Message ID | 20211007162406.1920374-14-lukasz.maniak@linux.intel.com |
---|---|
State | New |
Headers | show |
Series | hw/nvme: SR-IOV with Virtualization Enhancements | expand |
On Thu, 2021-10-07 at 18:24 +0200, Lukasz Maniak wrote: > From: Łukasz Gieryk <lukasz.gieryk@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.gieryk@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 */ These look like natural improvements to me, thanks! Reviewed-by: Knut Omang <knuto@ifi.uio.no>
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 */