Revision b31442c3

b/hw/ps2.c
526 526
    s->mouse_buttons = 0;
527 527
}
528 528

  
529
static void ps2_common_save (QEMUFile *f, PS2State *s)
530
{
531
    qemu_put_be32 (f, s->write_cmd);
532
    qemu_put_be32 (f, s->queue.rptr);
533
    qemu_put_be32 (f, s->queue.wptr);
534
    qemu_put_be32 (f, s->queue.count);
535
    qemu_put_buffer (f, s->queue.data, sizeof (s->queue.data));
536
}
537

  
538
static void ps2_common_load (QEMUFile *f, PS2State *s)
539
{
540
    s->write_cmd=qemu_get_be32 (f);
541
    s->queue.rptr=qemu_get_be32 (f);
542
    s->queue.wptr=qemu_get_be32 (f);
543
    s->queue.count=qemu_get_be32 (f);
544
    qemu_get_buffer (f, s->queue.data, sizeof (s->queue.data));
545
}
546

  
547
static void ps2_kbd_save(QEMUFile* f, void* opaque)
548
{
549
    PS2KbdState *s = (PS2KbdState*)opaque;
550

  
551
    ps2_common_save (f, &s->common);
552
    qemu_put_be32(f, s->scan_enabled);
553
    qemu_put_be32(f, s->translate);
554
    qemu_put_be32(f, s->scancode_set);
555
}
556

  
557
static void ps2_mouse_save(QEMUFile* f, void* opaque)
558
{
559
    PS2MouseState *s = (PS2MouseState*)opaque;
560

  
561
    ps2_common_save (f, &s->common);
562
    qemu_put_8s(f, &s->mouse_status);
563
    qemu_put_8s(f, &s->mouse_resolution);
564
    qemu_put_8s(f, &s->mouse_sample_rate);
565
    qemu_put_8s(f, &s->mouse_wrap);
566
    qemu_put_8s(f, &s->mouse_type);
567
    qemu_put_8s(f, &s->mouse_detect_state);
568
    qemu_put_be32(f, s->mouse_dx);
569
    qemu_put_be32(f, s->mouse_dy);
570
    qemu_put_be32(f, s->mouse_dz);
571
    qemu_put_8s(f, &s->mouse_buttons);
572
}
529
static const VMStateDescription vmstate_ps2_common = {
530
    .name = "PS2 Common State",
531
    .version_id = 3,
532
    .minimum_version_id = 2,
533
    .minimum_version_id_old = 2,
534
    .fields      = (VMStateField []) {
535
        VMSTATE_INT32(write_cmd, PS2State),
536
        VMSTATE_INT32(queue.rptr, PS2State),
537
        VMSTATE_INT32(queue.wptr, PS2State),
538
        VMSTATE_INT32(queue.count, PS2State),
539
        VMSTATE_BUFFER(queue.data, PS2State),
540
        VMSTATE_END_OF_LIST()
541
    }
542
};
573 543

  
574
static int ps2_kbd_load(QEMUFile* f, void* opaque, int version_id)
544
static int ps2_kbd_load_old(QEMUFile* f, void* opaque, int version_id)
575 545
{
576 546
    PS2KbdState *s = (PS2KbdState*)opaque;
577 547

  
578 548
    if (version_id != 2 && version_id != 3)
579 549
        return -EINVAL;
580 550

  
581
    ps2_common_load (f, &s->common);
551
    vmstate_load_state(f, &vmstate_ps2_common, &s->common, version_id);
582 552
    s->scan_enabled=qemu_get_be32(f);
583 553
    s->translate=qemu_get_be32(f);
584 554
    if (version_id == 3)
......
588 558
    return 0;
589 559
}
590 560

  
591
static int ps2_mouse_load(QEMUFile* f, void* opaque, int version_id)
592
{
593
    PS2MouseState *s = (PS2MouseState*)opaque;
594

  
595
    if (version_id != 2)
596
        return -EINVAL;
561
static const VMStateDescription vmstate_ps2_keyboard = {
562
    .name = "ps2kbd",
563
    .version_id = 3,
564
    .minimum_version_id = 3,
565
    .minimum_version_id_old = 2,
566
    .load_state_old = ps2_kbd_load_old,
567
    .fields      = (VMStateField []) {
568
        VMSTATE_STRUCT(common, PS2KbdState, 0, vmstate_ps2_common, PS2State),
569
        VMSTATE_INT32(scan_enabled, PS2KbdState),
570
        VMSTATE_INT32(translate, PS2KbdState),
571
        VMSTATE_INT32_V(scancode_set, PS2KbdState,3),
572
        VMSTATE_END_OF_LIST()
573
    }
574
};
597 575

  
598
    ps2_common_load (f, &s->common);
599
    qemu_get_8s(f, &s->mouse_status);
600
    qemu_get_8s(f, &s->mouse_resolution);
601
    qemu_get_8s(f, &s->mouse_sample_rate);
602
    qemu_get_8s(f, &s->mouse_wrap);
603
    qemu_get_8s(f, &s->mouse_type);
604
    qemu_get_8s(f, &s->mouse_detect_state);
605
    s->mouse_dx=qemu_get_be32(f);
606
    s->mouse_dy=qemu_get_be32(f);
607
    s->mouse_dz=qemu_get_be32(f);
608
    qemu_get_8s(f, &s->mouse_buttons);
609
    return 0;
610
}
576
static const VMStateDescription vmstate_ps2_mouse = {
577
    .name = "ps2mouse",
578
    .version_id = 2,
579
    .minimum_version_id = 2,
580
    .minimum_version_id_old = 2,
581
    .fields      = (VMStateField []) {
582
        VMSTATE_STRUCT(common, PS2MouseState, 0, vmstate_ps2_common, PS2State),
583
        VMSTATE_UINT8(mouse_status, PS2MouseState),
584
        VMSTATE_UINT8(mouse_resolution, PS2MouseState),
585
        VMSTATE_UINT8(mouse_sample_rate, PS2MouseState),
586
        VMSTATE_UINT8(mouse_wrap, PS2MouseState),
587
        VMSTATE_UINT8(mouse_type, PS2MouseState),
588
        VMSTATE_UINT8(mouse_detect_state, PS2MouseState),
589
        VMSTATE_INT32(mouse_dx, PS2MouseState),
590
        VMSTATE_INT32(mouse_dy, PS2MouseState),
591
        VMSTATE_INT32(mouse_dz, PS2MouseState),
592
        VMSTATE_UINT8(mouse_buttons, PS2MouseState),
593
        VMSTATE_END_OF_LIST()
594
    }
595
};
611 596

  
612 597
void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg)
613 598
{
......
617 602
    s->common.update_arg = update_arg;
618 603
    s->scancode_set = 2;
619 604
    ps2_kbd_reset(s);
620
    register_savevm("ps2kbd", 0, 3, ps2_kbd_save, ps2_kbd_load, s);
605
    vmstate_register(0, &vmstate_ps2_keyboard, s);
621 606
    qemu_add_kbd_event_handler(ps2_put_keycode, s);
622 607
    qemu_register_reset(ps2_kbd_reset, s);
623 608
    return s;
......
630 615
    s->common.update_irq = update_irq;
631 616
    s->common.update_arg = update_arg;
632 617
    ps2_mouse_reset(s);
633
    register_savevm("ps2mouse", 0, 2, ps2_mouse_save, ps2_mouse_load, s);
618
    vmstate_register(0, &vmstate_ps2_mouse, s);
634 619
    qemu_add_mouse_event_handler(ps2_mouse_event, s, 0, "QEMU PS/2 Mouse");
635 620
    qemu_register_reset(ps2_mouse_reset, s);
636 621
    return s;

Also available in: Unified diff