From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MQtKl-0001Rt-C2 for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:30:59 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MQtKi-0001Pz-0l for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:30:59 -0400 Received: from [199.232.76.173] (port=43409 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MQtKh-0001Pw-QX for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:30:55 -0400 Received: from wf-out-1314.google.com ([209.85.200.169]:61545) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MQtKh-0001fd-9u for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:30:55 -0400 Received: by wf-out-1314.google.com with SMTP id 26so1126119wfd.4 for ; Tue, 14 Jul 2009 18:30:53 -0700 (PDT) MIME-Version: 1.0 Date: Tue, 14 Jul 2009 18:30:53 -0700 Message-ID: From: Dinesh Subhraveti Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH] Initialize PS2 keyboard / mouse state on reset List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Currently only common PS2 state is initialized, leaving keyboard and mouse specific state to contain stale values. Signed-off-by: Dinesh Subhraveti=A0 --- diff --git a/hw/ps2.c b/hw/ps2.c index fb77005..0915b9f 100644 --- a/hw/ps2.c +++ b/hw/ps2.c @@ -488,9 +488,8 @@ void ps2_write_mouse(void *opaque, int val) } } -static void ps2_reset(void *opaque) +static void ps2_common_reset(PS2State *s) { - PS2State *s =3D (PS2State *)opaque; PS2Queue *q; s->write_cmd =3D -1; q =3D &s->queue; @@ -500,6 +499,33 @@ static void ps2_reset(void *opaque) s->update_irq(s->update_arg, 0); } +static void ps2_kbd_reset(void *opaque) +{ + PS2KbdState *s =3D (PS2KbdState *) opaque; + + ps2_common_reset(&s->common); + s->scan_enabled =3D 0; + s->translate =3D 0; + s->scancode_set =3D 0; +} + +static void ps2_mouse_reset(void *opaque) +{ + PS2MouseState *s =3D (PS2MouseState *) opaque; + + ps2_common_reset(&s->common); + s->mouse_status =3D 0; + s->mouse_resolution =3D 0; + s->mouse_sample_rate =3D 0; + s->mouse_wrap =3D 0; + s->mouse_type =3D 0; + s->mouse_detect_state =3D 0; + s->mouse_dx =3D 0; + s->mouse_dy =3D 0; + s->mouse_dz =3D 0; + s->mouse_buttons =3D 0; +} + static void ps2_common_save (QEMUFile *f, PS2State *s) { qemu_put_be32 (f, s->write_cmd); @@ -590,10 +616,10 @@ void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg) s->common.update_irq =3D update_irq; s->common.update_arg =3D update_arg; s->scancode_set =3D 2; - ps2_reset(&s->common); + ps2_kbd_reset(s); register_savevm("ps2kbd", 0, 3, 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); return s; } @@ -603,9 +629,9 @@ void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg) s->common.update_irq =3D update_irq; s->common.update_arg =3D 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); return s; }