mirror of https://gitee.com/openkylin/qemu.git
hw/pci: Add pci_bus_range() to get PCI bus number range
This helps to get the min and max bus number of a PCI bus hierarchy. Signed-off-by: Xingang Wang <wangxingang5@huawei.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Message-Id: <1625748919-52456-6-git-send-email-wangxingang5@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
c9e96b04fc
commit
500db1daf3
16
hw/pci/pci.c
16
hw/pci/pci.c
|
@ -537,6 +537,22 @@ int pci_bus_num(PCIBus *s)
|
|||
return PCI_BUS_GET_CLASS(s)->bus_num(s);
|
||||
}
|
||||
|
||||
/* Returns the min and max bus numbers of a PCI bus hierarchy */
|
||||
void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus)
|
||||
{
|
||||
int i;
|
||||
*min_bus = *max_bus = pci_bus_num(bus);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) {
|
||||
PCIDevice *dev = bus->devices[i];
|
||||
|
||||
if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) {
|
||||
*min_bus = MIN(*min_bus, dev->config[PCI_SECONDARY_BUS]);
|
||||
*max_bus = MAX(*max_bus, dev->config[PCI_SUBORDINATE_BUS]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int pci_bus_numa_node(PCIBus *bus)
|
||||
{
|
||||
return PCI_BUS_GET_CLASS(bus)->numa_node(bus);
|
||||
|
|
|
@ -450,6 +450,7 @@ static inline PCIBus *pci_get_bus(const PCIDevice *dev)
|
|||
return PCI_BUS(qdev_get_parent_bus(DEVICE(dev)));
|
||||
}
|
||||
int pci_bus_num(PCIBus *s);
|
||||
void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus);
|
||||
static inline int pci_dev_bus_num(const PCIDevice *dev)
|
||||
{
|
||||
return pci_bus_num(pci_get_bus(dev));
|
||||
|
|
Loading…
Reference in New Issue