From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=50202 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PoJ6j-00066Y-Eq for qemu-devel@nongnu.org; Sat, 12 Feb 2011 12:18:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PoJ6i-00029D-1t for qemu-devel@nongnu.org; Sat, 12 Feb 2011 12:18:05 -0500 Received: from mail-vw0-f45.google.com ([209.85.212.45]:62162) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PoJ6h-000298-R9 for qemu-devel@nongnu.org; Sat, 12 Feb 2011 12:18:03 -0500 Received: by vws12 with SMTP id 12so2291880vws.4 for ; Sat, 12 Feb 2011 09:18:03 -0800 (PST) MIME-Version: 1.0 In-Reply-To: References: From: Blue Swirl Date: Sat, 12 Feb 2011 19:17:42 +0200 Message-ID: Subject: Re: [Qemu-devel] [PATCH 06/10] vmmouse: convert to qdev Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: qemu-devel On Sat, Feb 12, 2011 at 7:03 PM, Markus Armbruster wrot= e: > Blue Swirl writes: > >> Convert to qdev, also add a proper reset function. >> >> Signed-off-by: Blue Swirl >> --- >> =C2=A0hw/pc.c =C2=A0 =C2=A0 =C2=A0| =C2=A0 =C2=A05 +++-- >> =C2=A0hw/pc.h =C2=A0 =C2=A0 =C2=A0| =C2=A0 =C2=A03 --- >> =C2=A0hw/vmmouse.c | =C2=A0 37 +++++++++++++++++++++++++++++-------- >> =C2=A03 files changed, 32 insertions(+), 13 deletions(-) >> >> diff --git a/hw/pc.c b/hw/pc.c >> index fcee09a..f66ac5d 100644 >> --- a/hw/pc.c >> +++ b/hw/pc.c >> @@ -1096,7 +1096,7 @@ void pc_basic_device_init(qemu_irq *isa_irq, >> =C2=A0 =C2=A0 =C2=A0PITState *pit; >> =C2=A0 =C2=A0 =C2=A0qemu_irq rtc_irq =3D NULL; >> =C2=A0 =C2=A0 =C2=A0qemu_irq *a20_line; >> - =C2=A0 =C2=A0ISADevice *i8042, *port92; >> + =C2=A0 =C2=A0ISADevice *i8042, *port92, *vmmouse; >> =C2=A0 =C2=A0 =C2=A0qemu_irq *cpu_exit_irq; >> >> =C2=A0 =C2=A0 =C2=A0register_ioport_write(0x80, 1, 1, ioport80_write, NU= LL); >> @@ -1133,7 +1133,8 @@ void pc_basic_device_init(qemu_irq *isa_irq, >> =C2=A0 =C2=A0 =C2=A0a20_line =3D qemu_allocate_irqs(handle_a20_line_chan= ge, first_cpu, 2); >> =C2=A0 =C2=A0 =C2=A0i8042 =3D isa_create_simple("i8042"); >> =C2=A0 =C2=A0 =C2=A0i8042_setup_a20_line(i8042, &a20_line[0]); >> - =C2=A0 =C2=A0vmmouse_init(i8042); >> + =C2=A0 =C2=A0vmmouse =3D isa_create("vmmouse"); >> + =C2=A0 =C2=A0qdev_prop_set_ptr(&vmmouse->qdev, "ps2_mouse", i8042); >> =C2=A0 =C2=A0 =C2=A0port92 =3D isa_create_simple("port92"); >> =C2=A0 =C2=A0 =C2=A0port92_init(port92, &a20_line[1]); >> >> diff --git a/hw/pc.h b/hw/pc.h >> index 603a2a3..ae83934 100644 >> --- a/hw/pc.h >> +++ b/hw/pc.h >> @@ -67,9 +67,6 @@ void hpet_pit_enable(void); >> =C2=A0/* vmport.c */ >> =C2=A0void vmport_register(unsigned char command, IOPortReadFunc *func, >> void *opaque); >> >> -/* vmmouse.c */ >> -void *vmmouse_init(void *m); >> - >> =C2=A0/* pckbd.c */ >> >> =C2=A0void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_= base); >> diff --git a/hw/vmmouse.c b/hw/vmmouse.c >> index 2097119..3b39144 100644 >> --- a/hw/vmmouse.c >> +++ b/hw/vmmouse.c >> @@ -25,6 +25,7 @@ >> =C2=A0#include "console.h" >> =C2=A0#include "ps2.h" >> =C2=A0#include "pc.h" >> +#include "qdev.h" >> >> =C2=A0/* debug only vmmouse */ >> =C2=A0//#define DEBUG_VMMOUSE >> @@ -52,6 +53,7 @@ >> >> =C2=A0typedef struct _VMMouseState >> =C2=A0{ >> + =C2=A0 =C2=A0ISADevice dev; >> =C2=A0 =C2=A0 =C2=A0uint32_t queue[VMMOUSE_QUEUE_SIZE]; >> =C2=A0 =C2=A0 =C2=A0int32_t queue_size; >> =C2=A0 =C2=A0 =C2=A0uint16_t nb_queue; >> @@ -270,22 +272,41 @@ static const VMStateDescription vmstate_vmmouse = =3D { >> =C2=A0 =C2=A0 =C2=A0} >> =C2=A0}; >> >> -void *vmmouse_init(void *m) >> +static void vmmouse_reset(DeviceState *d) >> =C2=A0{ >> - =C2=A0 =C2=A0VMMouseState *s =3D NULL; >> + =C2=A0 =C2=A0VMMouseState *s =3D container_of(d, VMMouseState, dev.qde= v); >> >> - =C2=A0 =C2=A0DPRINTF("vmmouse_init\n"); >> + =C2=A0 =C2=A0s->status =3D 0xffff; >> +} >> >> - =C2=A0 =C2=A0s =3D qemu_mallocz(sizeof(VMMouseState)); >> +static int vmmouse_initfn(ISADevice *dev) >> +{ >> + =C2=A0 =C2=A0VMMouseState *s =3D DO_UPCAST(VMMouseState, dev, dev); >> >> - =C2=A0 =C2=A0s->status =3D 0xffff; >> - =C2=A0 =C2=A0s->ps2_mouse =3D m; >> - =C2=A0 =C2=A0s->queue_size =3D VMMOUSE_QUEUE_SIZE; > > Where is member queue_size initialized in your new code? Good catch, nowhere. I'll fix it. >> + =C2=A0 =C2=A0DPRINTF("vmmouse_init\n"); >> >> =C2=A0 =C2=A0 =C2=A0vmport_register(VMMOUSE_STATUS, vmmouse_ioport_read,= s); >> =C2=A0 =C2=A0 =C2=A0vmport_register(VMMOUSE_COMMAND, vmmouse_ioport_read= , s); >> =C2=A0 =C2=A0 =C2=A0vmport_register(VMMOUSE_DATA, vmmouse_ioport_read, s= ); >> =C2=A0 =C2=A0 =C2=A0vmstate_register(NULL, 0, &vmstate_vmmouse, s); >> >> - =C2=A0 =C2=A0return s; >> + =C2=A0 =C2=A0return 0; >> +} >> + >> +static ISADeviceInfo vmmouse_info =3D { >> + =C2=A0 =C2=A0.init =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D vmmouse_initf= n, >> + =C2=A0 =C2=A0.qdev.name =C2=A0 =C2=A0 =3D "vmmouse", >> + =C2=A0 =C2=A0.qdev.size =C2=A0 =C2=A0 =3D sizeof(VMMouseState), >> + =C2=A0 =C2=A0.qdev.no_user =C2=A0=3D 1, >> + =C2=A0 =C2=A0.qdev.reset =C2=A0 =C2=A0=3D vmmouse_reset, >> + =C2=A0 =C2=A0.qdev.props =3D (Property[]) { >> + =C2=A0 =C2=A0 =C2=A0 =C2=A0DEFINE_PROP_PTR("ps2_mouse", VMMouseState, = ps2_mouse), > > Pointer properties are for dirty hacks only. =C2=A0Is there really no bet= ter > solution? =C2=A0Why does it have to be a property? So that it can be set using qdev interfaces only.