diff options
author | Eduardo Habkost <ehabkost@redhat.com> | 2009-08-03 14:00:32 -0300 |
---|---|---|
committer | Eduardo Habkost <ehabkost@redhat.com> | 2009-08-18 10:49:38 -0300 |
commit | 01e7c7a5bebe3920da54883549c296564ddfbc73 (patch) | |
tree | 0170ccfb90c3e0e7b48c57a1362938abe01e1ef0 | |
parent | b4294916b1fc3fc789478d8c73017666969f2ec4 (diff) |
Initialize PS2 keyboard / mouse state on reset
https://bugzilla.redhat.com/515275
This is a backport of qemu commit ef74679a810fe6858f625b9d52b68cc3fc61eb3d.
I don't know if this bug should be considered a RHEL-5.4 blocker. If not, then
this is a RHEL-5.5 patch submission. :)
Log message from the patch added on Bugzilla:
Initialize PS2 keyboard / mouse state on reset
Currently only common PS2 state is initialized, leaving keyboard and
mouse specific state to contain stale values.
Signed-off-by: Dinesh Subhraveti <dineshs@us.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Ram Pai <linuxram@us.ibm.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Bugzilla: 517855
RH-Upstream-status: backport-from-upstream
Message-Id: <1249318832-29302-1-git-send-email-ehabkost@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Dor Laor <dlaor@redhat.com>
-rw-r--r-- | qemu/hw/ps2.c | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/qemu/hw/ps2.c b/qemu/hw/ps2.c index 5a9ffde1..b4153165 100644 --- a/qemu/hw/ps2.c +++ b/qemu/hw/ps2.c @@ -584,9 +584,8 @@ void ps2_write_mouse(void *opaque, int val) } } -static void ps2_reset(void *opaque) +static void ps2_common_reset(PS2State *s) { - PS2State *s = (PS2State *)opaque; PS2Queue *q; s->write_cmd = -1; q = &s->queue; @@ -596,6 +595,33 @@ static void ps2_reset(void *opaque) s->update_irq(s->update_arg, 0); } +static void ps2_kbd_reset(void *opaque) +{ + PS2KbdState *s = (PS2KbdState *) opaque; + + ps2_common_reset(&s->common); + s->scan_enabled = 0; + s->translate = 0; + s->scancode_set = 0; +} + +static void ps2_mouse_reset(void *opaque) +{ + PS2MouseState *s = (PS2MouseState *) opaque; + + ps2_common_reset(&s->common); + s->mouse_status = 0; + s->mouse_resolution = 0; + s->mouse_sample_rate = 0; + s->mouse_wrap = 0; + s->mouse_type = 0; + s->mouse_detect_state = 0; + s->mouse_dx = 0; + s->mouse_dy = 0; + s->mouse_dz = 0; + s->mouse_buttons = 0; +} + static void ps2_common_save (QEMUFile *f, PS2State *s) { qemu_put_be32 (f, s->write_cmd); @@ -794,10 +820,10 @@ void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg) s->common.update_irq = update_irq; s->common.update_arg = update_arg; s->scancode_set = 2; - ps2_reset(&s->common); + ps2_kbd_reset(s); register_savevm("ps2kbd", 0, 4, ps2_kbd_save, ps2_kbd_load, s); qemu_add_kbd_event_handler(ps2_put_keycode, s); - qemu_register_reset(ps2_reset, &s->common); + qemu_register_reset(ps2_kbd_reset, s); #ifdef CONFIG_SPICE regitser_keyboard(s); #endif @@ -810,10 +836,10 @@ void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg) s->common.update_irq = update_irq; s->common.update_arg = update_arg; - ps2_reset(&s->common); + ps2_mouse_reset(s); register_savevm("ps2mouse", 0, 2, ps2_mouse_save, ps2_mouse_load, s); qemu_add_mouse_event_handler(ps2_mouse_event, s, 0, "QEMU PS/2 Mouse"); - qemu_register_reset(ps2_reset, &s->common); + qemu_register_reset(ps2_mouse_reset, s); #ifdef CONFIG_SPICE regitser_mouse(s); #endif |