On Thu, Jul 24, 2014 at 08:31:00PM +0200, Marc Marí wrote: > +static uint32_t qvirtio_pci_get_features(QVirtioDevice *d) > +{ > + QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d; > + return qpci_io_readl(dev->pdev, dev->addr + QVIRTIO_DEVICE_FEATURES); > +}
Unused? If it's unused, then it's untested. > + > +static uint8_t qvirtio_pci_get_status(QVirtioDevice *d) > +{ > + QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d; > + return qpci_io_readb(dev->pdev, dev->addr + QVIRTIO_DEVICE_STATUS); > +} Unused? > + > +static void qvirtio_pci_set_status(QVirtioDevice *d, uint8_t val) > +{ > + QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d; > + qpci_io_writeb(dev->pdev, dev->addr + QVIRTIO_DEVICE_STATUS, val); Unused? > @@ -73,3 +97,11 @@ QVirtioPCIDevice *qvirtio_pci_device_find(QPCIBus *bus, > uint16_t device_type) > > return dev; > } > + > +void qvirtio_pci_enable_device(QVirtioPCIDevice *d) > +{ > + qpci_device_enable(d->pdev); > + d->addr = qpci_iomap(d->pdev, 0); > + g_assert(d->addr != NULL); > +} Where is qpci_iounmap() called to clean up? > @@ -67,6 +69,18 @@ static void pci_basic(void) > g_assert_cmphex(dev->vdev.device_type, ==, QVIRTIO_BLK_DEVICE_ID); > g_assert_cmphex(dev->pdev->devfn, ==, ((PCI_SLOT << 3) | PCI_FN)); > > + qvirtio_pci_enable_device(dev); > + qvirtio_reset(&qvirtio_pci, &dev->vdev); > + qvirtio_set_acknowledge(&qvirtio_pci, &dev->vdev); > + qvirtio_set_driver(&qvirtio_pci, &dev->vdev); > + > + /* MSI-X is not enabled */ > + addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_NO_MSIX; > + > + capacity = qpci_io_readl(dev->pdev, addr) | > + qpci_io_readl(dev->pdev, addr+4); > + g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE/512); Please add a qvirtio_config_read() function instead of directly accessing the virtio configuration space via PCI. Stefan
pgpJkubtbLrqG.pgp
Description: PGP signature