From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33170) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aNUM3-0006NR-4e for qemu-devel@nongnu.org; Sun, 24 Jan 2016 18:46:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aNUM1-0000qK-DI for qemu-devel@nongnu.org; Sun, 24 Jan 2016 18:45:59 -0500 Date: Mon, 25 Jan 2016 10:21:04 +1100 From: David Gibson Message-ID: <20160124232104.GQ27454@voom.redhat.com> References: <1453581610-23179-1-git-send-email-hpoussin@reactos.org> <1453581610-23179-5-git-send-email-hpoussin@reactos.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="QLVwfW7TUsi22t4P" Content-Disposition: inline In-Reply-To: <1453581610-23179-5-git-send-email-hpoussin@reactos.org> Subject: Re: [Qemu-devel] [PATCH 04/13] cuda: port SET_AUTO_RATE command to new framework List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?iso-8859-1?Q?Herv=E9?= Poussineau Cc: qemu-ppc@nongnu.org, Alyssa Milburn , Mark Cave-Ayland , qemu-devel@nongnu.org, Alexander Graf --QLVwfW7TUsi22t4P Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Jan 23, 2016 at 09:40:01PM +0100, Herv=E9 Poussineau wrote: > Take requested autopoll rate into account Commit message needs some work - as far as I can tell this is not just moving this to the new framework, but implementing it - previously the command was silently ignored. >=20 > Signed-off-by: Herv=E9 Poussineau > --- > hw/misc/macio/cuda.c | 31 +++++++++++++++++++++++++++---- > hw/ppc/mac.h | 1 + > 2 files changed, 28 insertions(+), 4 deletions(-) >=20 > diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c > index 37406fc..9ec642f 100644 > --- a/hw/misc/macio/cuda.c > +++ b/hw/misc/macio/cuda.c > @@ -105,7 +105,6 @@ > #define CUDA_COMBINED_FORMAT_IIC 0x25 > =20 > #define CUDA_TIMER_FREQ (4700000 / 6) > -#define CUDA_ADB_POLL_FREQ 50 > =20 > /* CUDA returns time_t's offset from Jan 1, 1904, not 1970 */ > #define RTC_OFFSET 2082844800 > @@ -531,7 +530,7 @@ static void cuda_adb_poll(void *opaque) > } > timer_mod(s->adb_poll_timer, > qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + > - (get_ticks_per_sec() / CUDA_ADB_POLL_FREQ)); > + (get_ticks_per_sec() / (1000 / s->auto_rate_ms))); I believe you can reduce the rounding errors by expressing this as: (s->auto_rate_ms * get_ticks_per_sec()) / 1000 =09 > } > =20 > /* description of commands */ > @@ -559,7 +558,7 @@ static bool cuda_cmd_autopoll(CUDAState *s, > if (autopoll) { > timer_mod(s->adb_poll_timer, > qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + > - (get_ticks_per_sec() / CUDA_ADB_POLL_FREQ)); > + (get_ticks_per_sec() / (1000 / s->auto_rate_ms))); > } else { > timer_del(s->adb_poll_timer); > } > @@ -567,8 +566,32 @@ static bool cuda_cmd_autopoll(CUDAState *s, > return true; > } > =20 > +static bool cuda_cmd_set_autorate(CUDAState *s, > + const uint8_t *in_data, int in_len, > + uint8_t *out_data, int *out_len) > +{ > + if (in_len !=3D 1) { > + return false; > + } > + > + /* we don't want a period of 0 ms */ > + /* FIXME: check what real hardware does */ > + if (in_data[0] =3D=3D 0) { > + return; > + } > + > + s->auto_rate_ms =3D in_data[0]; > + if (s->autopoll) { > + timer_mod(s->adb_poll_timer, > + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + > + (get_ticks_per_sec() / (1000 / s->auto_rate_ms))); IIUC this will make the next even occur in auto_rate_ms milliseconds, rather than auto_rate_ms from the previous event. i.e. it discards any time elapsed on the currently running timer. That may be the intended behaviour, or at least close enough that it doesn't matter, but I think it deserves comment. > + } > + return true; > +} > + > static const CudaCommand handlers[] =3D { > { CUDA_AUTOPOLL, "AUTOPOLL", cuda_cmd_autopoll }, > + { CUDA_SET_AUTO_RATE, "SET_AUTO_RATE", cuda_cmd_set_autorate }, > }; > =20 > static void cuda_receive_packet(CUDAState *s, > @@ -618,7 +641,6 @@ static void cuda_receive_packet(CUDAState *s, > return; > case CUDA_FILE_SERVER_FLAG: > case CUDA_SET_DEVICE_LIST: > - case CUDA_SET_AUTO_RATE: > case CUDA_SET_POWER_MESSAGES: > cuda_send_packet_to_host(s, obuf, 3); > return; > @@ -824,6 +846,7 @@ static void cuda_realizefn(DeviceState *dev, Error **= errp) > s->tick_offset =3D (uint32_t)mktimegm(&tm) + RTC_OFFSET; > =20 > s->adb_poll_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, cuda_adb_poll= , s); > + s->auto_rate_ms =3D 20; > } > =20 > static void cuda_initfn(Object *obj) > diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h > index e375ed2..90fcb69 100644 > --- a/hw/ppc/mac.h > +++ b/hw/ppc/mac.h > @@ -111,6 +111,7 @@ typedef struct CUDAState { > int data_out_index; > =20 > qemu_irq irq; > + uint8_t auto_rate_ms; > uint8_t autopoll; > uint8_t data_in[128]; > uint8_t data_out[16]; --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --QLVwfW7TUsi22t4P Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJWpVxgAAoJEGw4ysog2bOSVkYQAOFoJah5PGewsSkzqhyFqGNB 0/kbNqPpDcMaN+ZtNd0iMWRr64/kNVzDxXDwNJfYrkyvAnaXoPHNj1GkBWeopJr6 7vnfF7ryJSc0jnk0r4itD4Eiy46vPDZ3sI0O6ow4b/wr3Olmi4yMB3FfM4JyS1mA GJiGizy/ySmq3bRlMqFrJVXrUxKOH7VS5OAqQ6ilKaEX47ON3J14xeye060ld+mv +O4IHZgS1HexHiLXT8F/ebthfHi6KJuAXTnj9Az+FmmqiYcX/93xbmKzmjthGxP6 wUGG3jttiuU59BKS6rG7JkpuDDqY4D1kdONNrsyJ7nV+6w438/tGG6+hGaJpfKHa T4Q3nsOq8deGYkAmOfiemkLQgkJCEBWct+44vbBCQYt1Ollc34A0jZusvxKB9CGr OZHSgwnVVUAWOnxkrSnuUclg7vUT+4ogmOoll0R1WHvP00JGFNAThBgstAry6TSR pmTZ22pdqWFU0UzgNKx0YXujfCI+a0tUapsQjqUKMYots9w352Rt8yf3ijgg98l+ eyQzu7V2Vgs0StfTUM7ktzgAOr/yez9fe4AZexG5uKy7qd+z4tKLTGrDXYGac1cb /I9eznAp9nQuVQUlGTeRMZ67bTjWEn4WatsLYuzOhvIdq5l6OtviVh2vBXkZ1dt2 dcFDWr4sgeIW2ehVJCyv =cCGa -----END PGP SIGNATURE----- --QLVwfW7TUsi22t4P--