mirror of https://github.com/xemu-project/xemu.git
Port PCI Bus to VMState design
This uses VARRAY and INT32_EQUAL values Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
b00319a9df
commit
2d1e9f96a2
41
hw/pci.c
41
hw/pci.c
|
@ -73,36 +73,17 @@ static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET;
|
||||||
static uint16_t pci_default_sub_device_id = PCI_SUBDEVICE_ID_QEMU;
|
static uint16_t pci_default_sub_device_id = PCI_SUBDEVICE_ID_QEMU;
|
||||||
static PCIBus *first_bus;
|
static PCIBus *first_bus;
|
||||||
|
|
||||||
static void pcibus_save(QEMUFile *f, void *opaque)
|
static const VMStateDescription vmstate_pcibus = {
|
||||||
{
|
.name = "PCIBUS",
|
||||||
PCIBus *bus = (PCIBus *)opaque;
|
.version_id = 1,
|
||||||
int i;
|
.minimum_version_id = 1,
|
||||||
|
.minimum_version_id_old = 1,
|
||||||
qemu_put_be32(f, bus->nirq);
|
.fields = (VMStateField []) {
|
||||||
for (i = 0; i < bus->nirq; i++)
|
VMSTATE_INT32_EQUAL(nirq, PCIBus),
|
||||||
qemu_put_be32(f, bus->irq_count[i]);
|
VMSTATE_INT32_VARRAY(irq_count, PCIBus, nirq),
|
||||||
}
|
VMSTATE_END_OF_LIST()
|
||||||
|
|
||||||
static int pcibus_load(QEMUFile *f, void *opaque, int version_id)
|
|
||||||
{
|
|
||||||
PCIBus *bus = (PCIBus *)opaque;
|
|
||||||
int i, nirq;
|
|
||||||
|
|
||||||
if (version_id != 1)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
nirq = qemu_get_be32(f);
|
|
||||||
if (bus->nirq != nirq) {
|
|
||||||
fprintf(stderr, "pcibus_load: nirq mismatch: src=%d dst=%d\n",
|
|
||||||
nirq, bus->nirq);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
for (i = 0; i < nirq; i++)
|
|
||||||
bus->irq_count[i] = qemu_get_be32(f);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pci_bus_reset(void *opaque)
|
static void pci_bus_reset(void *opaque)
|
||||||
{
|
{
|
||||||
|
@ -135,7 +116,7 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name,
|
||||||
bus->irq_count = qemu_mallocz(nirq * sizeof(bus->irq_count[0]));
|
bus->irq_count = qemu_mallocz(nirq * sizeof(bus->irq_count[0]));
|
||||||
bus->next = first_bus;
|
bus->next = first_bus;
|
||||||
first_bus = bus;
|
first_bus = bus;
|
||||||
register_savevm("PCIBUS", nbus++, 1, pcibus_save, pcibus_load, bus);
|
vmstate_register(nbus++, &vmstate_pcibus, bus);
|
||||||
qemu_register_reset(pci_bus_reset, bus);
|
qemu_register_reset(pci_bus_reset, bus);
|
||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue