@@ -1077,6 +1077,7 @@ static void e1000_reset(void *opaque)
memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init);
d->rxbuf_min_shift = 1;
memset(&d->tx, 0, sizeof d->tx);
+ pci_device_reset_default(&d->dev);
}
static NetClientInfo net_e1000_info = {
@@ -358,6 +358,8 @@ static void lsi_soft_reset(LSIState *s)
qemu_free(s->current);
s->current = NULL;
}
+
+ pci_device_reset_default(&s->dev);
}
static int lsi_dma_40bit(LSIState *s)
@@ -171,13 +171,7 @@ void pci_device_reset(PCIDevice *dev)
return;
}
- /*
- * TODO:
- * Each device should know all its states.
- * So move this part to each device specific callback.
- */
qdev_reset(&dev->qdev);
- pci_device_reset_default(dev);
}
/*
@@ -2023,6 +2023,7 @@ static void pci_reset(DeviceState *dev)
PCIPCNetState *d = DO_UPCAST(PCIPCNetState, pci_dev.qdev, dev);
pcnet_h_reset(&d->state);
+ pci_device_reset_default(&d->pci_dev);
}
static PCIDeviceInfo pcnet_info = {
@@ -1260,6 +1260,8 @@ static void rtl8139_reset(DeviceState *d)
/* reset tally counters */
RTL8139TallyCounters_clear(&s->tally_counters);
+
+ pci_device_reset_default(&s->dev);
}
static void RTL8139TallyCounters_clear(RTL8139TallyCounters* counters)
@@ -184,6 +184,7 @@ static void virtio_pci_reset(DeviceState *d)
virtio_reset(proxy->vdev);
msix_reset(&proxy->pci_dev);
proxy->bugs = 0;
+ pci_device_reset_default(&proxy->pci_dev);
}
static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val)
Eliminate work around in pci_device_reset() by making each pci reset function to call pci_device_reset_default(). Each device should know reset itself. It shouldn't be done pci generic layer automatically. PCI layer should just signal reset and let each device respond to reset. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> --- hw/e1000.c | 1 + hw/lsi53c895a.c | 2 ++ hw/pci.c | 6 ------ hw/pcnet.c | 1 + hw/rtl8139.c | 2 ++ hw/virtio-pci.c | 1 + 6 files changed, 7 insertions(+), 6 deletions(-)