qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 2/4] qdev/isa: add qdev support to i8042 (aka ps/2 k


From: Gerd Hoffmann
Subject: [Qemu-devel] [PATCH 2/4] qdev/isa: add qdev support to i8042 (aka ps/2 kbd+mouse).
Date: Thu, 9 Jul 2009 15:02:38 +0200

Signed-off-by: Gerd Hoffmann <address@hidden>
---
 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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]