static void pci_testdev_uninit(PCIDevice *dev) { PCITestDevState *d = PCI_TEST_DEV(dev); int i; pci_testdev_reset(d); for (i = 0; i < IOTEST_MAX; ++i) { if (d->tests[i].hasnotifier) { event_notifier_cleanup(&d->tests[i].notifier); } g_free(d->tests[i].hdr); } g_free(d->tests); }
static void pci_testdev_uninit(PCIDevice *dev) { PCITestDevState *d = DO_UPCAST(PCITestDevState, dev, dev); int i; pci_testdev_reset(d); for (i = 0; i < IOTEST_MAX; ++i) { if (d->tests[i].hasnotifier) { event_notifier_cleanup(&d->tests[i].notifier); } g_free(d->tests[i].hdr); } g_free(d->tests); memory_region_destroy(&d->mmio); memory_region_destroy(&d->portio); }
static void pci_testdev_write(void *opaque, hwaddr addr, uint64_t val, unsigned size, int type) { PCITestDevState *d = opaque; IOTest *test; int t, r; if (addr == offsetof(PCITestDevHdr, test)) { pci_testdev_reset(d); if (val >= IOTEST_MAX_TEST) { return; } t = type * IOTEST_MAX_TEST + val; r = pci_testdev_start(&d->tests[t]); if (r < 0) { return; } d->current = t; return; } if (d->current < 0) { return; } test = &d->tests[d->current]; if (addr != le32_to_cpu(test->hdr->offset)) { return; } if (test->match_data && test->size != size) { return; } if (test->match_data && val != test->hdr->data) { return; } pci_testdev_inc(test, 1); }
static void qdev_pci_testdev_reset(DeviceState *dev) { PCITestDevState *d = PCI_TEST_DEV(dev); pci_testdev_reset(d); }
static void qdev_pci_testdev_reset(DeviceState *dev) { PCITestDevState *d = DO_UPCAST(PCITestDevState, dev.qdev, dev); pci_testdev_reset(d); }