Revision 1d190d5c

b/hw/cs4231a.c
596 596
    return dma_pos;
597 597
}
598 598

  
599
static void cs_save (QEMUFile *f, void *opaque)
599
static int cs4231a_pre_load (void *opaque)
600 600
{
601 601
    CSState *s = opaque;
602
    unsigned int i;
603
    uint32_t val;
604 602

  
605
    for (i = 0; i < CS_REGS; i++)
606
        qemu_put_be32s (f, &s->regs[i]);
607

  
608
    qemu_put_buffer (f, s->dregs, CS_DREGS);
609
    val = s->dma_running; qemu_put_be32s (f, &val);
610
    val = s->audio_free;  qemu_put_be32s (f, &val);
611
    val = s->transferred; qemu_put_be32s (f, &val);
612
    val = s->aci_counter; qemu_put_be32s (f, &val);
603
    if (s->dma_running) {
604
        DMA_release_DREQ (s->dma);
605
        AUD_set_active_out (s->voice, 0);
606
    }
607
    s->dma_running = 0;
608
    return 0;
613 609
}
614 610

  
615
static int cs_load (QEMUFile *f, void *opaque, int version_id)
611
static int cs4231a_post_load (void *opaque, int version_id)
616 612
{
617 613
    CSState *s = opaque;
618
    unsigned int i;
619
    uint32_t val, dma_running;
620

  
621
    if (version_id > 1)
622
        return -EINVAL;
623 614

  
624
    for (i = 0; i < CS_REGS; i++)
625
        qemu_get_be32s (f, &s->regs[i]);
626

  
627
    qemu_get_buffer (f, s->dregs, CS_DREGS);
628

  
629
    qemu_get_be32s (f, &dma_running);
630
    qemu_get_be32s (f, &val); s->audio_free  = val;
631
    qemu_get_be32s (f, &val); s->transferred = val;
632
    qemu_get_be32s (f, &val); s->aci_counter = val;
633
    if (dma_running && (s->dregs[Interface_Configuration] & PEN))
615
    if (s->dma_running && (s->dregs[Interface_Configuration] & PEN)) {
616
        s->dma_running = 0;
634 617
        cs_reset_voices (s, s->dregs[FS_And_Playback_Data_Format]);
618
    }
635 619
    return 0;
636 620
}
637 621

  
622
static const VMStateDescription vmstate_cs4231a = {
623
    .name = "cs4231a",
624
    .version_id = 1,
625
    .minimum_version_id = 1,
626
    .minimum_version_id_old = 1,
627
    .pre_load = cs4231a_pre_load,
628
    .post_load = cs4231a_post_load,
629
    .fields      = (VMStateField []) {
630
        VMSTATE_UINT32_ARRAY(regs, CSState, CS_REGS),
631
        VMSTATE_BUFFER(dregs, CSState),
632
        VMSTATE_INT32(dma_running, CSState),
633
        VMSTATE_INT32(audio_free, CSState),
634
        VMSTATE_INT32(transferred, CSState),
635
        VMSTATE_INT32(aci_counter, CSState),
636
        VMSTATE_END_OF_LIST()
637
    }
638
};
639

  
638 640
static int cs4231a_initfn (ISADevice *dev)
639 641
{
640 642
    CSState *s = DO_UPCAST (CSState, dev, dev);
......
649 651

  
650 652
    DMA_register_channel (s->dma, cs_dma_read, s);
651 653

  
652
    register_savevm ("cs4231a", 0, 1, cs_save, cs_load, s);
654
    vmstate_register (0, &vmstate_cs4231a, s);
653 655
    qemu_register_reset (cs_reset, s);
654 656
    cs_reset (s);
655 657

  

Also available in: Unified diff