From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MOtH2-0002JZ-Oz for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:53 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MOtGw-0002Db-BJ for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:51 -0400 Received: from [199.232.76.173] (port=42392 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MOtGv-0002DH-QE for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:45 -0400 Received: from mx2.redhat.com ([66.187.237.31]:54509) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MOtGv-0002E5-5Q for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:45 -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 n69D2iuX016279 for ; Thu, 9 Jul 2009 09:02:44 -0400 From: Gerd Hoffmann Date: Thu, 9 Jul 2009 15:02:38 +0200 Message-Id: <1247144560-9014-3-git-send-email-kraxel@redhat.com> In-Reply-To: <1247144560-9014-1-git-send-email-kraxel@redhat.com> References: <1247144560-9014-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 2/4] 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 | 38 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 38 insertions(+), 0 deletions(-) diff --git a/hw/pckbd.c b/hw/pckbd.c index d50cd6e..3f2023c 100644 --- a/hw/pckbd.c +++ b/hw/pckbd.c @@ -113,6 +113,7 @@ #define KBD_PENDING_AUX 2 typedef struct KBDState { + ISADevice dev; uint8_t write_cmd; /* if non zero, write data to port 60 is expected */ uint8_t status; uint8_t mode; @@ -440,3 +441,40 @@ void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, #endif qemu_register_reset(kbd_reset, s); } + +static void i8042_initfn(ISADevice *dev) +{ + KBDState *s = DO_UPCAST(KBDState, dev, dev); + + 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); + + 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(KBDState), + .qdev.no_user = 1, + .init = i8042_initfn, + .io[0].read = kbd_read_data, + .io[0].write = kbd_write_data, + .io[0].length = 1, + .io[1].read = kbd_read_status, + .io[1].write = kbd_write_command, + .io[1].length = 1, +}; + +static void i8042_register(void) +{ + isa_qdev_register(&i8042_info); +} +device_init(i8042_register) -- 1.6.2.5