Commit ef74679a810fe6858f625b9d52b68cc3fc61eb3d
Committed by
Anthony Liguori
1 parent
0bb05eaf
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>
Showing
1 changed file
with
32 additions
and
6 deletions
hw/ps2.c
| ... | ... | @@ -488,9 +488,8 @@ void ps2_write_mouse(void *opaque, int val) |
| 488 | 488 | } |
| 489 | 489 | } |
| 490 | 490 | |
| 491 | -static void ps2_reset(void *opaque) | |
| 491 | +static void ps2_common_reset(PS2State *s) | |
| 492 | 492 | { |
| 493 | - PS2State *s = (PS2State *)opaque; | |
| 494 | 493 | PS2Queue *q; |
| 495 | 494 | s->write_cmd = -1; |
| 496 | 495 | q = &s->queue; |
| ... | ... | @@ -500,6 +499,33 @@ static void ps2_reset(void *opaque) |
| 500 | 499 | s->update_irq(s->update_arg, 0); |
| 501 | 500 | } |
| 502 | 501 | |
| 502 | +static void ps2_kbd_reset(void *opaque) | |
| 503 | +{ | |
| 504 | + PS2KbdState *s = (PS2KbdState *) opaque; | |
| 505 | + | |
| 506 | + ps2_common_reset(&s->common); | |
| 507 | + s->scan_enabled = 0; | |
| 508 | + s->translate = 0; | |
| 509 | + s->scancode_set = 0; | |
| 510 | +} | |
| 511 | + | |
| 512 | +static void ps2_mouse_reset(void *opaque) | |
| 513 | +{ | |
| 514 | + PS2MouseState *s = (PS2MouseState *) opaque; | |
| 515 | + | |
| 516 | + ps2_common_reset(&s->common); | |
| 517 | + s->mouse_status = 0; | |
| 518 | + s->mouse_resolution = 0; | |
| 519 | + s->mouse_sample_rate = 0; | |
| 520 | + s->mouse_wrap = 0; | |
| 521 | + s->mouse_type = 0; | |
| 522 | + s->mouse_detect_state = 0; | |
| 523 | + s->mouse_dx = 0; | |
| 524 | + s->mouse_dy = 0; | |
| 525 | + s->mouse_dz = 0; | |
| 526 | + s->mouse_buttons = 0; | |
| 527 | +} | |
| 528 | + | |
| 503 | 529 | static void ps2_common_save (QEMUFile *f, PS2State *s) |
| 504 | 530 | { |
| 505 | 531 | qemu_put_be32 (f, s->write_cmd); |
| ... | ... | @@ -590,10 +616,10 @@ void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg) |
| 590 | 616 | s->common.update_irq = update_irq; |
| 591 | 617 | s->common.update_arg = update_arg; |
| 592 | 618 | s->scancode_set = 2; |
| 593 | - ps2_reset(&s->common); | |
| 619 | + ps2_kbd_reset(s); | |
| 594 | 620 | register_savevm("ps2kbd", 0, 3, ps2_kbd_save, ps2_kbd_load, s); |
| 595 | 621 | qemu_add_kbd_event_handler(ps2_put_keycode, s); |
| 596 | - qemu_register_reset(ps2_reset, &s->common); | |
| 622 | + qemu_register_reset(ps2_kbd_reset, s); | |
| 597 | 623 | return s; |
| 598 | 624 | } |
| 599 | 625 | |
| ... | ... | @@ -603,9 +629,9 @@ void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg) |
| 603 | 629 | |
| 604 | 630 | s->common.update_irq = update_irq; |
| 605 | 631 | s->common.update_arg = update_arg; |
| 606 | - ps2_reset(&s->common); | |
| 632 | + ps2_mouse_reset(s); | |
| 607 | 633 | register_savevm("ps2mouse", 0, 2, ps2_mouse_save, ps2_mouse_load, s); |
| 608 | 634 | qemu_add_mouse_event_handler(ps2_mouse_event, s, 0, "QEMU PS/2 Mouse"); |
| 609 | - qemu_register_reset(ps2_reset, &s->common); | |
| 635 | + qemu_register_reset(ps2_mouse_reset, s); | |
| 610 | 636 | return s; |
| 611 | 637 | } | ... | ... |