@@ -142,6 +142,12 @@ typedef struct KBDState {
hwaddr mask;
} KBDState;
+typedef struct ISAKBDState {
+ ISADevice dev;
+ KBDState kbd;
+ MemoryRegion io[2];
+} ISAKBDState;
+
/* update irq and KBD_STAT_[MOUSE_]OBF */
/* XXX: not generating the irqs if KBD_MODE_DISABLE_KBD is set may be
incorrect, but it avoids having to simulate exact delays */
@@ -360,9 +366,10 @@ static void kbd_write_data(void *opaque, hwaddr addr,
s->write_cmd = 0;
}
-static void kbd_reset(void *opaque)
+static void kbd_reset(DeviceState *dev)
{
- KBDState *s = opaque;
+ ISADevice *isadev = ISA_DEVICE(dev);
+ KBDState *s = &(DO_UPCAST(ISAKBDState, dev, isadev)->kbd);
s->mode = KBD_MODE_KBD_INT | KBD_MODE_MOUSE_INT;
s->status = KBD_STAT_CMD | KBD_STAT_UNLOCKED;
@@ -428,15 +435,8 @@ void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,
s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
- qemu_register_reset(kbd_reset, s);
}
-typedef struct ISAKBDState {
- ISADevice dev;
- KBDState kbd;
- MemoryRegion io[2];
-} ISAKBDState;
-
void i8042_isa_mouse_fake_event(void *opaque)
{
ISADevice *dev = opaque;
@@ -499,7 +499,7 @@ static int i8042_initfn(ISADevice *dev)
s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
- qemu_register_reset(kbd_reset, s);
+
return 0;
}
@@ -510,6 +510,8 @@ static void i8042_class_initfn(ObjectClass *klass, void *data)
ic->init = i8042_initfn;
dc->no_user = 1;
dc->vmsd = &vmstate_kbd_isa;
+ dc->reset = kbd_reset;
+ dc->on = kbd_reset;
}
static const TypeInfo i8042_info = {
Signed-off-by: liguang <lig.fnst@cn.fujitsu.com> --- hw/pckbd.c | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-)