From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MWpNd-0004p6-C5 for qemu-devel@nongnu.org; Fri, 31 Jul 2009 06:30:29 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MWpNY-0004mr-HA for qemu-devel@nongnu.org; Fri, 31 Jul 2009 06:30:28 -0400 Received: from [199.232.76.173] (port=40962 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MWpNX-0004mZ-Uw for qemu-devel@nongnu.org; Fri, 31 Jul 2009 06:30:23 -0400 Received: from mx2.redhat.com ([66.187.237.31]:52874) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MWpNX-0005Qm-5E for qemu-devel@nongnu.org; Fri, 31 Jul 2009 06:30:23 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6VAUMma029746 for ; Fri, 31 Jul 2009 06:30:22 -0400 From: Gerd Hoffmann Date: Fri, 31 Jul 2009 12:30:15 +0200 Message-Id: <1249036218-5108-3-git-send-email-kraxel@redhat.com> In-Reply-To: <1249036218-5108-1-git-send-email-kraxel@redhat.com> References: <1249036218-5108-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 2/5] qdev/isa: add qdev support to i8042 (aka ps/2 kbd+mouse). List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann --- hw/pckbd.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 40 insertions(+), 0 deletions(-) diff --git a/hw/pckbd.c b/hw/pckbd.c index d50cd6e..bb4cc0e 100644 --- a/hw/pckbd.c +++ b/hw/pckbd.c @@ -440,3 +440,43 @@ void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, #endif qemu_register_reset(kbd_reset, s); } + +typedef struct ISAKBDState { + ISADevice dev; + KBDState kbd; +} ISAKBDState; + +static void i8042_initfn(ISADevice *dev) +{ + KBDState *s = &(DO_UPCAST(ISAKBDState, dev, dev)->kbd); + + isa_init_irq(dev, &s->irq_kbd); + isa_init_irq(dev, &s->irq_mouse); + + kbd_reset(s); + register_savevm("pckbd", 0, 3, kbd_save, kbd_load, s); + register_ioport_read(dev->iobase[0], 1, 1, kbd_read_data, s); + register_ioport_write(dev->iobase[0], 1, 1, kbd_write_data, s); + register_ioport_read(dev->iobase[1], 1, 1, kbd_read_status, s); + register_ioport_write(dev->iobase[1], 1, 1, kbd_write_command, s); + + s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s); + s->mouse = ps2_mouse_init(kbd_update_aux_irq, s); +#ifdef TARGET_I386 + vmmouse_init(s->mouse); +#endif + qemu_register_reset(kbd_reset, s); +} + +static ISADeviceInfo i8042_info = { + .qdev.name = "i8042", + .qdev.size = sizeof(ISAKBDState), + .qdev.no_user = 1, + .init = i8042_initfn, +}; + +static void i8042_register(void) +{ + isa_qdev_register(&i8042_info); +} +device_init(i8042_register) -- 1.6.2.5