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); | ... | ... |