Revision 7c131dd5 hw/ne2000.c

b/hw/ne2000.c
623 623
    return 0;
624 624
}
625 625

  
626
void ne2000_save(QEMUFile* f, void* opaque)
626
static int ne2000_post_load(void* opaque, int version_id)
627 627
{
628
	NE2000State* s = opaque;
629
        uint32_t tmp;
630

  
631
        qemu_put_8s(f, &s->rxcr);
632

  
633
	qemu_put_8s(f, &s->cmd);
634
	qemu_put_be32s(f, &s->start);
635
	qemu_put_be32s(f, &s->stop);
636
	qemu_put_8s(f, &s->boundary);
637
	qemu_put_8s(f, &s->tsr);
638
	qemu_put_8s(f, &s->tpsr);
639
	qemu_put_be16s(f, &s->tcnt);
640
	qemu_put_be16s(f, &s->rcnt);
641
	qemu_put_be32s(f, &s->rsar);
642
	qemu_put_8s(f, &s->rsr);
643
	qemu_put_8s(f, &s->isr);
644
	qemu_put_8s(f, &s->dcfg);
645
	qemu_put_8s(f, &s->imr);
646
	qemu_put_buffer(f, s->phys, 6);
647
	qemu_put_8s(f, &s->curpag);
648
	qemu_put_buffer(f, s->mult, 8);
649
        tmp = 0;
650
	qemu_put_be32s(f, &tmp); /* ignored, was irq */
651
	qemu_put_buffer(f, s->mem, NE2000_MEM_SIZE);
652
}
653

  
654
int ne2000_load(QEMUFile* f, void* opaque, int version_id)
655
{
656
	NE2000State* s = opaque;
657
        uint32_t tmp;
658

  
659
        if (version_id > 3)
660
            return -EINVAL;
661

  
662
        if (version_id >= 2) {
663
            qemu_get_8s(f, &s->rxcr);
664
        } else {
665
            s->rxcr = 0x0c;
666
        }
667

  
668
	qemu_get_8s(f, &s->cmd);
669
	qemu_get_be32s(f, &s->start);
670
	qemu_get_be32s(f, &s->stop);
671
	qemu_get_8s(f, &s->boundary);
672
	qemu_get_8s(f, &s->tsr);
673
	qemu_get_8s(f, &s->tpsr);
674
	qemu_get_be16s(f, &s->tcnt);
675
	qemu_get_be16s(f, &s->rcnt);
676
	qemu_get_be32s(f, &s->rsar);
677
	qemu_get_8s(f, &s->rsr);
678
	qemu_get_8s(f, &s->isr);
679
	qemu_get_8s(f, &s->dcfg);
680
	qemu_get_8s(f, &s->imr);
681
	qemu_get_buffer(f, s->phys, 6);
682
	qemu_get_8s(f, &s->curpag);
683
	qemu_get_buffer(f, s->mult, 8);
684
	qemu_get_be32s(f, &tmp); /* ignored */
685
	qemu_get_buffer(f, s->mem, NE2000_MEM_SIZE);
686

  
687
	return 0;
688
}
689

  
690
static void pci_ne2000_save(QEMUFile* f, void* opaque)
691
{
692
	PCINE2000State* s = opaque;
628
    NE2000State* s = opaque;
693 629

  
694
        pci_device_save(&s->dev, f);
695
        ne2000_save(f, &s->ne2000);
630
    if (version_id < 2) {
631
        s->rxcr = 0x0c;
632
    }
633
    return 0;
696 634
}
697 635

  
698
static int pci_ne2000_load(QEMUFile* f, void* opaque, int version_id)
699
{
700
	PCINE2000State* s = opaque;
701
        int ret;
702

  
703
        if (version_id > 3)
704
            return -EINVAL;
705

  
706
        if (version_id >= 3) {
707
            ret = pci_device_load(&s->dev, f);
708
            if (ret < 0)
709
                return ret;
710
        }
636
const VMStateDescription vmstate_ne2000 = {
637
    .name = "ne2000",
638
    .version_id = 2,
639
    .minimum_version_id = 0,
640
    .minimum_version_id_old = 0,
641
    .post_load = ne2000_post_load,
642
    .fields      = (VMStateField []) {
643
        VMSTATE_UINT8_V(rxcr, NE2000State, 2),
644
        VMSTATE_UINT8(cmd, NE2000State),
645
        VMSTATE_UINT32(start, NE2000State),
646
        VMSTATE_UINT32(stop, NE2000State),
647
        VMSTATE_UINT8(boundary, NE2000State),
648
        VMSTATE_UINT8(tsr, NE2000State),
649
        VMSTATE_UINT8(tpsr, NE2000State),
650
        VMSTATE_UINT16(tcnt, NE2000State),
651
        VMSTATE_UINT16(rcnt, NE2000State),
652
        VMSTATE_UINT32(rsar, NE2000State),
653
        VMSTATE_UINT8(rsr, NE2000State),
654
        VMSTATE_UINT8(isr, NE2000State),
655
        VMSTATE_UINT8(dcfg, NE2000State),
656
        VMSTATE_UINT8(imr, NE2000State),
657
        VMSTATE_BUFFER(phys, NE2000State),
658
        VMSTATE_UINT8(curpag, NE2000State),
659
        VMSTATE_BUFFER(mult, NE2000State),
660
        VMSTATE_UNUSED(4), /* was irq */
661
        VMSTATE_BUFFER(mem, NE2000State),
662
        VMSTATE_END_OF_LIST()
663
    }
664
};
711 665

  
712
        return ne2000_load(f, &s->ne2000, version_id);
713
}
666
const VMStateDescription vmstate_pci_ne2000 = {
667
    .name = "ne2000",
668
    .version_id = 3,
669
    .minimum_version_id = 3,
670
    .minimum_version_id_old = 3,
671
    .fields      = (VMStateField []) {
672
        VMSTATE_PCI_DEVICE(dev, PCINE2000State),
673
        VMSTATE_STRUCT(ne2000, PCINE2000State, 0, vmstate_ne2000, NE2000State),
674
        VMSTATE_END_OF_LIST()
675
    }
676
};
714 677

  
715 678
/***********************************************************/
716 679
/* PCI NE2000 definitions */
......
776 739
        }
777 740
    }
778 741

  
779
    register_savevm("ne2000", -1, 3, pci_ne2000_save, pci_ne2000_load, d);
742
    vmstate_register(-1, &vmstate_pci_ne2000, d);
780 743
    return 0;
781 744
}
782 745

  
......
785 748
    PCINE2000State *d = DO_UPCAST(PCINE2000State, dev, pci_dev);
786 749
    NE2000State *s = &d->ne2000;
787 750

  
788
    unregister_savevm("ne2000", s);
751
    vmstate_unregister(&vmstate_pci_ne2000, s);
789 752
    qemu_del_vlan_client(s->vc);
790 753
    return 0;
791 754
}

Also available in: Unified diff