QPCIBus *qpci_new_pc(QTestState *qts, QGuestAllocator *alloc) { QPCIBusPC *qpci = g_new0(QPCIBusPC, 1); qpci_init_pc(qpci, qts, alloc); return &qpci->bus; }
static void test_init(TestData *d) { QTestState *qs; qs = qtest_startf("-machine q35 %s %s", d->noreboot ? "" : "-global ICH9-LPC.noreboot=false", !d->args ? "" : d->args); global_qtest = qs; qtest_irq_intercept_in(qs, "ioapic"); d->bus = qpci_init_pc(qs, NULL); d->dev = qpci_device_find(d->bus, QPCI_DEVFN(0x1f, 0x00)); g_assert(d->dev != NULL); qpci_device_enable(d->dev); /* set ACPI PM I/O space base address */ qpci_config_writel(d->dev, ICH9_LPC_PMBASE, PM_IO_BASE_ADDR | 0x1); /* enable ACPI I/O */ qpci_config_writeb(d->dev, ICH9_LPC_ACPI_CTRL, 0x80); /* set Root Complex BAR */ qpci_config_writel(d->dev, ICH9_LPC_RCBA, RCBA_BASE_ADDR | 0x1); d->tco_io_bar = qpci_legacy_iomap(d->dev, PM_IO_BASE_ADDR + 0x60); }
static void init_virtio_dev(TestServer *s, uint32_t features_mask) { uint32_t features; int i; s->bus = qpci_init_pc(global_qtest, NULL); g_assert_nonnull(s->bus); s->dev = qvirtio_pci_device_find(s->bus, VIRTIO_ID_NET); g_assert_nonnull(s->dev); qvirtio_pci_device_enable(s->dev); qvirtio_reset(&s->dev->vdev); qvirtio_set_acknowledge(&s->dev->vdev); qvirtio_set_driver(&s->dev->vdev); s->alloc = pc_alloc_init(global_qtest); for (i = 0; i < s->queues * 2; i++) { s->vq[i] = qvirtqueue_setup(&s->dev->vdev, s->alloc, i); } features = qvirtio_get_features(&s->dev->vdev); features = features & features_mask; qvirtio_set_features(&s->dev->vdev, features); qvirtio_set_driver_ok(&s->dev->vdev); }
static QPCIDevice *get_pci_device(uint16_t *bmdma_base) { QPCIDevice *dev; uint16_t vendor_id, device_id; if (!pcibus) { pcibus = qpci_init_pc(); } /* Find PCI device and verify it's the right one */ dev = qpci_device_find(pcibus, QPCI_DEVFN(IDE_PCI_DEV, IDE_PCI_FUNC)); g_assert(dev != NULL); vendor_id = qpci_config_readw(dev, PCI_VENDOR_ID); device_id = qpci_config_readw(dev, PCI_DEVICE_ID); g_assert(vendor_id == PCI_VENDOR_ID_INTEL); g_assert(device_id == PCI_DEVICE_ID_INTEL_82371SB_1); /* Map bmdma BAR */ *bmdma_base = (uint16_t)(uintptr_t) qpci_iomap(dev, 4); qpci_device_enable(dev); return dev; }
static QPCIDevice *get_device(void) { QPCIDevice *dev; pcibus = qpci_init_pc(); qpci_device_foreach(pcibus, 0x10ec, 0x8139, save_fn, &dev); g_assert(dev != NULL); return dev; }
static QPCIBus *pci_test_start(int socket) { char *cmdline; cmdline = g_strdup_printf("-netdev socket,fd=%d,id=hs0 -device " "virtio-net-pci,netdev=hs0", socket); qtest_start(cmdline); g_free(cmdline); return qpci_init_pc(); }
static void pci_init(void) { if (pcibus) { return; } pcibus = qpci_init_pc(NULL); g_assert(pcibus != NULL); qusb_pci_init_one(pcibus, &uhci1, QPCI_DEVFN(0x1d, 0), 4); qusb_pci_init_one(pcibus, &uhci2, QPCI_DEVFN(0x1d, 1), 4); qusb_pci_init_one(pcibus, &uhci3, QPCI_DEVFN(0x1d, 2), 4); qusb_pci_init_one(pcibus, &ehci1, QPCI_DEVFN(0x1d, 7), 0); }
static void init_virtio_dev(TestServer *s) { QVirtioPCIDevice *dev; uint32_t features; s->bus = qpci_init_pc(NULL); g_assert_nonnull(s->bus); dev = qvirtio_pci_device_find(s->bus, VIRTIO_ID_NET); g_assert_nonnull(dev); qvirtio_pci_device_enable(dev); qvirtio_reset(&dev->vdev); qvirtio_set_acknowledge(&dev->vdev); qvirtio_set_driver(&dev->vdev); features = qvirtio_get_features(&dev->vdev); features = features & VIRTIO_NET_F_MAC; qvirtio_set_features(&dev->vdev, features); qvirtio_set_driver_ok(&dev->vdev); qvirtio_pci_device_free(dev); }