mirror of https://github.com/xemu-project/xemu.git
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);
|
g_assert(device_id == PCI_DEVICE_ID_INTEL_82371SB_1);
|
||||||
|
|
||||||
/* Map bmdma BAR */
|
/* 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);
|
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);
|
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);
|
QPCIBusPC *s = container_of(bus, QPCIBusPC, bus);
|
||||||
static const int bar_reg_map[] = {
|
static const int bar_reg_map[] = {
|
||||||
|
@ -173,6 +173,9 @@ static void *qpci_pc_iomap(QPCIBus *bus, QPCIDevice *dev, int barno)
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (sizeptr) {
|
||||||
|
*sizeptr = size;
|
||||||
|
}
|
||||||
|
|
||||||
if (io_type == PCI_BASE_ADDRESS_SPACE_IO) {
|
if (io_type == PCI_BASE_ADDRESS_SPACE_IO) {
|
||||||
uint16_t loc;
|
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);
|
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)
|
void qpci_iounmap(QPCIDevice *dev, void *data)
|
||||||
|
|
|
@ -41,7 +41,7 @@ struct QPCIBus
|
||||||
void (*config_writel)(QPCIBus *bus, int devfn,
|
void (*config_writel)(QPCIBus *bus, int devfn,
|
||||||
uint8_t offset, uint32_t value);
|
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);
|
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_writew(QPCIDevice *dev, void *data, uint16_t value);
|
||||||
void qpci_io_writel(QPCIDevice *dev, void *data, uint32_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);
|
void qpci_iounmap(QPCIDevice *dev, void *data);
|
||||||
|
|
||||||
#endif
|
#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);
|
hc->dev = qpci_device_find(pcibus, devfn);
|
||||||
g_assert(hc->dev != NULL);
|
g_assert(hc->dev != NULL);
|
||||||
qpci_device_enable(hc->dev);
|
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);
|
g_assert(hc->base != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue