Commit 675376f2b450e22cba45e0617f34ab8454219ef5
1 parent
15a34c63
kbd save/restore
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@991 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
48 additions
and
0 deletions
hw/pckbd.c
| ... | ... | @@ -642,11 +642,59 @@ static void kbd_reset(void *opaque) |
| 642 | 642 | q->count = 0; |
| 643 | 643 | } |
| 644 | 644 | |
| 645 | +static void kbd_save(QEMUFile* f, void* opaque) | |
| 646 | +{ | |
| 647 | + KBDState *s = (KBDState*)opaque; | |
| 648 | + | |
| 649 | + qemu_put_8s(f, &s->write_cmd); | |
| 650 | + qemu_put_8s(f, &s->status); | |
| 651 | + qemu_put_8s(f, &s->mode); | |
| 652 | + qemu_put_be32s(f, &s->kbd_write_cmd); | |
| 653 | + qemu_put_be32s(f, &s->scan_enabled); | |
| 654 | + qemu_put_be32s(f, &s->mouse_write_cmd); | |
| 655 | + qemu_put_8s(f, &s->mouse_status); | |
| 656 | + qemu_put_8s(f, &s->mouse_resolution); | |
| 657 | + qemu_put_8s(f, &s->mouse_sample_rate); | |
| 658 | + qemu_put_8s(f, &s->mouse_wrap); | |
| 659 | + qemu_put_8s(f, &s->mouse_type); | |
| 660 | + qemu_put_8s(f, &s->mouse_detect_state); | |
| 661 | + qemu_put_be32s(f, &s->mouse_dx); | |
| 662 | + qemu_put_be32s(f, &s->mouse_dy); | |
| 663 | + qemu_put_be32s(f, &s->mouse_dz); | |
| 664 | + qemu_put_8s(f, &s->mouse_buttons); | |
| 665 | +} | |
| 666 | + | |
| 667 | +static int kbd_load(QEMUFile* f, void* opaque, int version_id) | |
| 668 | +{ | |
| 669 | + KBDState *s = (KBDState*)opaque; | |
| 670 | + | |
| 671 | + if (version_id != 1) | |
| 672 | + return -EINVAL; | |
| 673 | + qemu_get_8s(f, &s->write_cmd); | |
| 674 | + qemu_get_8s(f, &s->status); | |
| 675 | + qemu_get_8s(f, &s->mode); | |
| 676 | + qemu_get_be32s(f, &s->kbd_write_cmd); | |
| 677 | + qemu_get_be32s(f, &s->scan_enabled); | |
| 678 | + qemu_get_be32s(f, &s->mouse_write_cmd); | |
| 679 | + qemu_get_8s(f, &s->mouse_status); | |
| 680 | + qemu_get_8s(f, &s->mouse_resolution); | |
| 681 | + qemu_get_8s(f, &s->mouse_sample_rate); | |
| 682 | + qemu_get_8s(f, &s->mouse_wrap); | |
| 683 | + qemu_get_8s(f, &s->mouse_type); | |
| 684 | + qemu_get_8s(f, &s->mouse_detect_state); | |
| 685 | + qemu_get_be32s(f, &s->mouse_dx); | |
| 686 | + qemu_get_be32s(f, &s->mouse_dy); | |
| 687 | + qemu_get_be32s(f, &s->mouse_dz); | |
| 688 | + qemu_get_8s(f, &s->mouse_buttons); | |
| 689 | + return 0; | |
| 690 | +} | |
| 691 | + | |
| 645 | 692 | void kbd_init(void) |
| 646 | 693 | { |
| 647 | 694 | KBDState *s = &kbd_state; |
| 648 | 695 | |
| 649 | 696 | kbd_reset(s); |
| 697 | + register_savevm("pckbd", 0, 1, kbd_save, kbd_load, s); | |
| 650 | 698 | register_ioport_read(0x60, 1, 1, kbd_read_data, s); |
| 651 | 699 | register_ioport_write(0x60, 1, 1, kbd_write_data, s); |
| 652 | 700 | register_ioport_read(0x64, 1, 1, kbd_read_status, s); | ... | ... |