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,11 +642,59 @@ static void kbd_reset(void *opaque) | ||
| 642 | q->count = 0; | 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 | void kbd_init(void) | 692 | void kbd_init(void) |
| 646 | { | 693 | { |
| 647 | KBDState *s = &kbd_state; | 694 | KBDState *s = &kbd_state; |
| 648 | 695 | ||
| 649 | kbd_reset(s); | 696 | kbd_reset(s); |
| 697 | + register_savevm("pckbd", 0, 1, kbd_save, kbd_load, s); | ||
| 650 | register_ioport_read(0x60, 1, 1, kbd_read_data, s); | 698 | register_ioport_read(0x60, 1, 1, kbd_read_data, s); |
| 651 | register_ioport_write(0x60, 1, 1, kbd_write_data, s); | 699 | register_ioport_write(0x60, 1, 1, kbd_write_data, s); |
| 652 | register_ioport_read(0x64, 1, 1, kbd_read_status, s); | 700 | register_ioport_read(0x64, 1, 1, kbd_read_status, s); |