Revision bdb78cae

b/hw/escc.c
113 113
    int e0_mode, led_mode, caps_lock_mode, num_lock_mode;
114 114
    int disabled;
115 115
    int clock;
116
    uint32_t vmstate_dummy;
116 117
} ChannelState;
117 118

  
118 119
struct SerialState {
......
326 327
    clear_queue(s);
327 328
}
328 329

  
329
static void escc_reset(void *opaque)
330
static void escc_reset(DeviceState *d)
330 331
{
331
    SerialState *s = opaque;
332
    SerialState *s = container_of(d, SerialState, busdev.qdev);
333

  
332 334
    escc_reset_chn(&s->chn[0]);
333 335
    escc_reset_chn(&s->chn[1]);
334 336
}
......
547 549
                escc_reset_chn(&serial->chn[1]);
548 550
                return;
549 551
            case MINTR_RST_ALL:
550
                escc_reset(serial);
552
                escc_reset(&serial->busdev.qdev);
551 553
                return;
552 554
            }
553 555
            break;
......
666 668
    NULL,
667 669
};
668 670

  
669
static void escc_save_chn(QEMUFile *f, ChannelState *s)
670
{
671
    uint32_t tmp = 0;
672

  
673
    qemu_put_be32s(f, &tmp); /* unused, was IRQ.  */
674
    qemu_put_be32s(f, &s->reg);
675
    qemu_put_be32s(f, &s->rxint);
676
    qemu_put_be32s(f, &s->txint);
677
    qemu_put_be32s(f, &s->rxint_under_svc);
678
    qemu_put_be32s(f, &s->txint_under_svc);
679
    qemu_put_8s(f, &s->rx);
680
    qemu_put_8s(f, &s->tx);
681
    qemu_put_buffer(f, s->wregs, SERIAL_REGS);
682
    qemu_put_buffer(f, s->rregs, SERIAL_REGS);
683
}
684

  
685
static void escc_save(QEMUFile *f, void *opaque)
686
{
687
    SerialState *s = opaque;
688

  
689
    escc_save_chn(f, &s->chn[0]);
690
    escc_save_chn(f, &s->chn[1]);
691
}
692

  
693
static int escc_load_chn(QEMUFile *f, ChannelState *s, int version_id)
694
{
695
    uint32_t tmp;
696

  
697
    if (version_id > 2)
698
        return -EINVAL;
699

  
700
    qemu_get_be32s(f, &tmp); /* unused */
701
    qemu_get_be32s(f, &s->reg);
702
    qemu_get_be32s(f, &s->rxint);
703
    qemu_get_be32s(f, &s->txint);
704
    if (version_id >= 2) {
705
        qemu_get_be32s(f, &s->rxint_under_svc);
706
        qemu_get_be32s(f, &s->txint_under_svc);
671
static const VMStateDescription vmstate_escc_chn = {
672
    .name ="escc_chn",
673
    .version_id = 2,
674
    .minimum_version_id = 1,
675
    .minimum_version_id_old = 1,
676
    .fields      = (VMStateField []) {
677
        VMSTATE_UINT32(vmstate_dummy, ChannelState),
678
        VMSTATE_UINT32(reg, ChannelState),
679
        VMSTATE_UINT32(rxint, ChannelState),
680
        VMSTATE_UINT32(txint, ChannelState),
681
        VMSTATE_UINT32(rxint_under_svc, ChannelState),
682
        VMSTATE_UINT32(txint_under_svc, ChannelState),
683
        VMSTATE_UINT8(rx, ChannelState),
684
        VMSTATE_UINT8(tx, ChannelState),
685
        VMSTATE_BUFFER(wregs, ChannelState),
686
        VMSTATE_BUFFER(rregs, ChannelState),
687
        VMSTATE_END_OF_LIST()
707 688
    }
708
    qemu_get_8s(f, &s->rx);
709
    qemu_get_8s(f, &s->tx);
710
    qemu_get_buffer(f, s->wregs, SERIAL_REGS);
711
    qemu_get_buffer(f, s->rregs, SERIAL_REGS);
712
    return 0;
713
}
714

  
715
static int escc_load(QEMUFile *f, void *opaque, int version_id)
716
{
717
    SerialState *s = opaque;
718
    int ret;
719

  
720
    ret = escc_load_chn(f, &s->chn[0], version_id);
721
    if (ret != 0)
722
        return ret;
723
    ret = escc_load_chn(f, &s->chn[1], version_id);
724
    return ret;
689
};
725 690

  
726
}
691
static const VMStateDescription vmstate_escc = {
692
    .name ="escc",
693
    .version_id = 2,
694
    .minimum_version_id = 1,
695
    .minimum_version_id_old = 1,
696
    .fields      = (VMStateField []) {
697
        VMSTATE_STRUCT_ARRAY(chn, SerialState, 2, 2, vmstate_escc_chn,
698
                             ChannelState),
699
        VMSTATE_END_OF_LIST()
700
    }
701
};
727 702

  
728 703
int escc_init(target_phys_addr_t base, qemu_irq irqA, qemu_irq irqB,
729 704
              CharDriverState *chrA, CharDriverState *chrB,
......
942 917
    if (s->chn[1].type == kbd) {
943 918
        qemu_add_kbd_event_handler(sunkbd_event, &s->chn[1]);
944 919
    }
945
    register_savevm("escc", -1, 2, escc_save, escc_load, s);
946
    qemu_register_reset(escc_reset, s);
947
    escc_reset(s);
920
    escc_reset(&s->busdev.qdev);
921

  
948 922
    return 0;
949 923
}
950 924

  
......
952 926
    .init = escc_init1,
953 927
    .qdev.name  = "escc",
954 928
    .qdev.size  = sizeof(SerialState),
929
    .qdev.vmsd  = &vmstate_escc,
930
    .qdev.reset = escc_reset,
955 931
    .qdev.props = (Property[]) {
956 932
        DEFINE_PROP_UINT32("frequency", SerialState, frequency,   0),
957 933
        DEFINE_PROP_UINT32("it_shift",  SerialState, it_shift,    0),

Also available in: Unified diff