Signed-off-by: liguang <lig.f...@cn.fujitsu.com> --- hw/pckbd.c | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/hw/pckbd.c b/hw/pckbd.c index 3bad09b..1ab8ada 100644 --- a/hw/pckbd.c +++ b/hw/pckbd.c @@ -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 = { -- 1.7.2.5