From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56927) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aNPTQ-0005X5-8y for qemu-devel@nongnu.org; Sun, 24 Jan 2016 13:33:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aNPTM-0000Ch-7Q for qemu-devel@nongnu.org; Sun, 24 Jan 2016 13:33:16 -0500 References: <1453581610-23179-1-git-send-email-hpoussin@reactos.org> <1453581610-23179-5-git-send-email-hpoussin@reactos.org> From: =?UTF-8?Q?Herv=c3=a9_Poussineau?= Message-ID: <56A518DC.9080805@reactos.org> Date: Sun, 24 Jan 2016 19:33:00 +0100 MIME-Version: 1.0 In-Reply-To: <1453581610-23179-5-git-send-email-hpoussin@reactos.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable 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: qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org, Alyssa Milburn , Mark Cave-Ayland , Alexander Graf , David Gibson Le 23/01/2016 21:40, Herv=C3=A9 Poussineau a =C3=A9crit : > Take requested autopoll rate into account > > Signed-off-by: Herv=C3=A9 Poussineau > --- > hw/misc/macio/cuda.c | 31 +++++++++++++++++++++++++++---- > hw/ppc/mac.h | 1 + > 2 files changed, 28 insertions(+), 4 deletions(-) > > 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 > > #define CUDA_TIMER_FREQ (4700000 / 6) > -#define CUDA_ADB_POLL_FREQ 50 > > /* 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))); > } > > /* 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; > } > > +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; This 'return' should be changed into a 'return false'. > + } > + > + 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))); > + } > + return true; > +} > + > static const CudaCommand handlers[] =3D { > { CUDA_AUTOPOLL, "AUTOPOLL", cuda_cmd_autopoll }, > + { CUDA_SET_AUTO_RATE, "SET_AUTO_RATE", cuda_cmd_set_autorate }, > }; > > 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; > > s->adb_poll_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, cuda_adb_p= oll, s); > + s->auto_rate_ms =3D 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; > > qemu_irq irq; > + uint8_t auto_rate_ms; > uint8_t autopoll; > uint8_t data_in[128]; > uint8_t data_out[16]; >