libqos: allow qpci_iomap to return BAR mapping size
This patch allows qpci_iomap to return the size of the BAR mapping that it created, to allow driver applications (e.g, ahci-test) to make determinations about the suitability or the mapping size, or in the specific case of AHCI, how many ports are supported by the HBA. Signed-off-by: John Snow <jsnow@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
7f2a5ae6c1
commit
6ce7100e7f
@ -146,7 +146,7 @@ static QPCIDevice *get_pci_device(uint16_t *bmdma_base)
|
||||
g_assert(device_id == PCI_DEVICE_ID_INTEL_82371SB_1);
|
||||
|
||||
/* Map bmdma BAR */
|
||||
*bmdma_base = (uint16_t)(uintptr_t) qpci_iomap(dev, 4);
|
||||
*bmdma_base = (uint16_t)(uintptr_t) qpci_iomap(dev, 4, NULL);
|
||||
|
||||
qpci_device_enable(dev);
|
||||
|
||||
|
@ -144,7 +144,7 @@ static void qpci_pc_config_writel(QPCIBus *bus, int devfn, uint8_t offset, uint3
|
||||
outl(0xcfc, value);
|
||||
}
|
||||
|
||||
static void *qpci_pc_iomap(QPCIBus *bus, QPCIDevice *dev, int barno)
|
||||
static void *qpci_pc_iomap(QPCIBus *bus, QPCIDevice *dev, int barno, uint64_t *sizeptr)
|
||||
{
|
||||
QPCIBusPC *s = container_of(bus, QPCIBusPC, bus);
|
||||
static const int bar_reg_map[] = {
|
||||
@ -173,6 +173,9 @@ static void *qpci_pc_iomap(QPCIBus *bus, QPCIDevice *dev, int barno)
|
||||
if (size == 0) {
|
||||
return NULL;
|
||||
}
|
||||
if (sizeptr) {
|
||||
*sizeptr = size;
|
||||
}
|
||||
|
||||
if (io_type == PCI_BASE_ADDRESS_SPACE_IO) {
|
||||
uint16_t loc;
|
||||
|
@ -138,9 +138,9 @@ void qpci_io_writel(QPCIDevice *dev, void *data, uint32_t value)
|
||||
dev->bus->io_writel(dev->bus, data, value);
|
||||
}
|
||||
|
||||
void *qpci_iomap(QPCIDevice *dev, int barno)
|
||||
void *qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr)
|
||||
{
|
||||
return dev->bus->iomap(dev->bus, dev, barno);
|
||||
return dev->bus->iomap(dev->bus, dev, barno, sizeptr);
|
||||
}
|
||||
|
||||
void qpci_iounmap(QPCIDevice *dev, void *data)
|
||||
|
@ -41,7 +41,7 @@ struct QPCIBus
|
||||
void (*config_writel)(QPCIBus *bus, int devfn,
|
||||
uint8_t offset, uint32_t value);
|
||||
|
||||
void *(*iomap)(QPCIBus *bus, QPCIDevice *dev, int barno);
|
||||
void *(*iomap)(QPCIBus *bus, QPCIDevice *dev, int barno, uint64_t *sizeptr);
|
||||
void (*iounmap)(QPCIBus *bus, void *data);
|
||||
};
|
||||
|
||||
@ -74,7 +74,7 @@ void qpci_io_writeb(QPCIDevice *dev, void *data, uint8_t value);
|
||||
void qpci_io_writew(QPCIDevice *dev, void *data, uint16_t value);
|
||||
void qpci_io_writel(QPCIDevice *dev, void *data, uint32_t value);
|
||||
|
||||
void *qpci_iomap(QPCIDevice *dev, int barno);
|
||||
void *qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr);
|
||||
void qpci_iounmap(QPCIDevice *dev, void *data);
|
||||
|
||||
#endif
|
||||
|
@ -34,7 +34,7 @@ static void pci_init_one(struct qhc *hc, uint32_t devfn, int bar)
|
||||
hc->dev = qpci_device_find(pcibus, devfn);
|
||||
g_assert(hc->dev != NULL);
|
||||
qpci_device_enable(hc->dev);
|
||||
hc->base = qpci_iomap(hc->dev, bar);
|
||||
hc->base = qpci_iomap(hc->dev, bar, NULL);
|
||||
g_assert(hc->base != NULL);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user