> From: Santosh Shukla [mailto:santosh.shu...@caviumnetworks.com] > Sent: Thursday, August 31, 2017 4:26 AM > To: dev@dpdk.org > Cc: tho...@monjalon.net; jerin.ja...@caviumnetworks.com; > hemant.agra...@nxp.com; olivier.m...@6wind.com; > maxime.coque...@redhat.com; Gonzalez Monroy, Sergio > <sergio.gonzalez.mon...@intel.com>; Richardson, Bruce > <bruce.richard...@intel.com>; shreyansh.j...@nxp.com; > gaetan.ri...@6wind.com; Burakov, Anatoly <anatoly.bura...@intel.com>; > step...@networkplumber.org; acon...@redhat.com; Santosh Shukla > <santosh.shu...@caviumnetworks.com> > Subject: [PATCH v7 2/9] eal/pci: get iommu class > > Introducing rte_pci_get_iommu_class API which helps to get iommu class of > PCI device on the bus and returns preferred iova mapping mode for PCI bus. > > Patch also add rte_pci_get_iommu_class definition for bsdapp, in bsdapp > case - api returns default iova mode. > > Signed-off-by: Santosh Shukla <santosh.shu...@caviumnetworks.com> > Signed-off-by: Jerin Jacob <jerin.ja...@caviumnetworks.com> > Reviewed-by: Maxime Coquelin <maxime.coque...@redhat.com> > --- > v6 --> v7: > - squashed v6 series patch [02/12] & [03/12] (Aaron comment). > > lib/librte_eal/bsdapp/eal/eal_pci.c | 10 ++++++++++ > lib/librte_eal/bsdapp/eal/rte_eal_version.map | 1 + > lib/librte_eal/common/include/rte_bus.h | 10 ++++++++++ > lib/librte_eal/common/include/rte_pci.h | 11 +++++++++++ > 4 files changed, 32 insertions(+) > > diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c > b/lib/librte_eal/bsdapp/eal/eal_pci.c > index 04eacdcc7..e2c252320 100644 > --- a/lib/librte_eal/bsdapp/eal/eal_pci.c > +++ b/lib/librte_eal/bsdapp/eal/eal_pci.c > @@ -403,6 +403,16 @@ rte_pci_scan(void) > return -1; > } > > +/* > + * Get iommu class of pci devices on the bus. > + */ > +enum rte_iova_mode > +rte_pci_get_iommu_class(void) > +{ > + /* Supports only RTE_KDRV_NIC_UIO */ > + return RTE_IOVA_PA; > +} > + > int > pci_update_device(const struct rte_pci_addr *addr) { diff --git > a/lib/librte_eal/bsdapp/eal/rte_eal_version.map > b/lib/librte_eal/bsdapp/eal/rte_eal_version.map > index c819e3084..1fdcfb460 100644 > --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map > +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map > @@ -242,5 +242,6 @@ DPDK_17.11 { > global: > > rte_pci_match; > + rte_pci_get_iommu_class; > > } DPDK_17.08; > diff --git a/lib/librte_eal/common/include/rte_bus.h > b/lib/librte_eal/common/include/rte_bus.h > index c79368d3c..9e40687e5 100644 > --- a/lib/librte_eal/common/include/rte_bus.h > +++ b/lib/librte_eal/common/include/rte_bus.h > @@ -55,6 +55,16 @@ extern "C" { > /** Double linked list of buses */ > TAILQ_HEAD(rte_bus_list, rte_bus); > > + > +/** > + * IOVA mapping mode. > + */ > +enum rte_iova_mode { > + RTE_IOVA_DC = 0, /* Don't care mode */ > + RTE_IOVA_PA = (1 << 0), > + RTE_IOVA_VA = (1 << 1)
Hi Santosh, No need to set values explicitly, standard C will take care of it. I wonder the purpose of "don't care" mode. It's not used for anything but cases when no driver is bound. All the libraries (e.g. rte_malloc) will only check for IOVA_VA mode. Can't we just used PA in all cases where IOVA_DC would be applicable? Thanks, Anatoly