From: Łukasz Gieryk <lukasz.gie...@linux.intel.com> Two convenience functions for retrieving: - the total number of VFs, - the PCIDevice object of the N-th VF.
Signed-off-by: Łukasz Gieryk <lukasz.gie...@linux.intel.com> --- hw/pci/pcie_sriov.c | 14 ++++++++++++++ include/hw/pci/pcie_sriov.h | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index cac2aee061..5a8e92d5ab 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -292,8 +292,22 @@ uint16_t pcie_sriov_vf_number(PCIDevice *dev) return dev->exp.sriov_vf.vf_number; } +uint16_t pcie_sriov_vf_number_total(PCIDevice *dev) +{ + assert(!pci_is_vf(dev)); + return dev->exp.sriov_pf.num_vfs; +} PCIDevice *pcie_sriov_get_pf(PCIDevice *dev) { return dev->exp.sriov_vf.pf; } + +PCIDevice *pcie_sriov_get_vf_at_index(PCIDevice *dev, int n) +{ + assert(!pci_is_vf(dev)); + if (n < dev->exp.sriov_pf.num_vfs) { + return dev->exp.sriov_pf.vf[n]; + } + return NULL; +} diff --git a/include/hw/pci/pcie_sriov.h b/include/hw/pci/pcie_sriov.h index 9ab48b79c0..d1f39b7223 100644 --- a/include/hw/pci/pcie_sriov.h +++ b/include/hw/pci/pcie_sriov.h @@ -65,9 +65,17 @@ void pcie_sriov_pf_disable_vfs(PCIDevice *dev); /* Get logical VF number of a VF - only valid for VFs */ uint16_t pcie_sriov_vf_number(PCIDevice *dev); +/* Get the total number of VFs - only valid for PF */ +uint16_t pcie_sriov_vf_number_total(PCIDevice *dev); + /* Get the physical function that owns this VF. * Returns NULL if dev is not a virtual function */ PCIDevice *pcie_sriov_get_pf(PCIDevice *dev); +/* Get the n-th VF of this physical function - only valid for PF. + * Returns NULL if index is invalid + */ +PCIDevice *pcie_sriov_get_vf_at_index(PCIDevice *dev, int n); + #endif /* QEMU_PCIE_SRIOV_H */ -- 2.25.1