pci: export device mapping functions
authorYuanhan Liu <yuanhan.liu@linux.intel.com>
Tue, 2 Feb 2016 13:48:18 +0000 (21:48 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 3 Feb 2016 15:07:50 +0000 (16:07 +0100)
Normally we could set RTE_PCI_DRV_NEED_MAPPING flag so that eal will
invoke pci_map_device internally for us. From that point view, there
is no need to export pci_map_device.

However, for virtio pmd driver, which is designed to work without
binding UIO (or something similar first), pci_map_device() will fail,
which ends up with virtio pmd driver being skipped. Therefore, we can
not set RTE_PCI_DRV_NEED_MAPPING blindly at virtio pmd driver.

Therefore, this patch exports pci_map_device, and let virtio pmd call
it when necessary.

Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Tested-by: Santosh Shukla <sshukla@mvista.com>
Tested-by: Qian Xu <qian.q.xu@intel.com>
Reviewed-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Tested-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Acked-by: David Marchand <david.marchand@6wind.com>
Acked-by: Huawei Xie <huawei.xie@intel.com>
lib/librte_eal/bsdapp/eal/eal_pci.c
lib/librte_eal/bsdapp/eal/rte_eal_version.map
lib/librte_eal/common/eal_common_pci.c
lib/librte_eal/common/eal_private.h
lib/librte_eal/common/include/rte_pci.h
lib/librte_eal/linuxapp/eal/eal_pci.c
lib/librte_eal/linuxapp/eal/rte_eal_version.map

index 6c21fbd..95c32c1 100644 (file)
@@ -93,7 +93,7 @@ pci_unbind_kernel_driver(struct rte_pci_device *dev __rte_unused)
 
 /* Map pci device */
 int
-pci_map_device(struct rte_pci_device *dev)
+rte_eal_pci_map_device(struct rte_pci_device *dev)
 {
        int ret = -1;
 
@@ -115,7 +115,7 @@ pci_map_device(struct rte_pci_device *dev)
 
 /* Unmap pci device */
 void
-pci_unmap_device(struct rte_pci_device *dev)
+rte_eal_pci_unmap_device(struct rte_pci_device *dev)
 {
        /* try unmapping the NIC resources */
        switch (dev->kdrv) {
index 6fa9c67..d8ac7f7 100644 (file)
@@ -139,6 +139,8 @@ DPDK_2.2 {
 DPDK_2.3 {
        global:
 
+       rte_eal_pci_map_device;
+       rte_eal_pci_unmap_device;
        rte_cpu_feature_table;
 
 } DPDK_2.2;
index dcfe947..96d5113 100644 (file)
@@ -188,7 +188,7 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d
                        pci_config_space_set(dev);
 #endif
                        /* map resources for devices that use igb_uio */
-                       ret = pci_map_device(dev);
+                       ret = rte_eal_pci_map_device(dev);
                        if (ret != 0)
                                return ret;
                } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND &&
@@ -254,7 +254,7 @@ rte_eal_pci_detach_dev(struct rte_pci_driver *dr,
 
                if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING)
                        /* unmap resources for devices that use igb_uio */
-                       pci_unmap_device(dev);
+                       rte_eal_pci_unmap_device(dev);
 
                return 0;
        }
index 072e672..2342fa1 100644 (file)
@@ -164,24 +164,6 @@ struct rte_pci_device;
  */
 int pci_unbind_kernel_driver(struct rte_pci_device *dev);
 
-/**
- * Map this device
- *
- * This function is private to EAL.
- *
- * @return
- *   0 on success, negative on error and positive if no driver
- *   is found for the device.
- */
-int pci_map_device(struct rte_pci_device *dev);
-
-/**
- * Unmap this device
- *
- * This function is private to EAL.
- */
-void pci_unmap_device(struct rte_pci_device *dev);
-
 /**
  * Map the PCI resource of a PCI device in virtual memory
  *
index 334c12e..1508ea9 100644 (file)
@@ -366,6 +366,32 @@ int rte_eal_pci_scan(void);
  */
 int rte_eal_pci_probe(void);
 
+/**
+ * Map the PCI device resources in user space virtual memory address
+ *
+ * Note that driver should not call this function when flag
+ * RTE_PCI_DRV_NEED_MAPPING is set, as EAL will do that for
+ * you when it's on.
+ *
+ * @param dev
+ *   A pointer to a rte_pci_device structure describing the device
+ *   to use
+ *
+ * @return
+ *   0 on success, negative on error and positive if no driver
+ *   is found for the device.
+ */
+int rte_eal_pci_map_device(struct rte_pci_device *dev);
+
+/**
+ * Unmap this device
+ *
+ * @param dev
+ *   A pointer to a rte_pci_device structure describing the device
+ *   to use
+ */
+void rte_eal_pci_unmap_device(struct rte_pci_device *dev);
+
 /**
  * @internal
  * Map a particular resource from a file.
index bc5b5be..db947da 100644 (file)
@@ -124,7 +124,7 @@ pci_get_kernel_driver_by_path(const char *filename, char *dri_name)
 
 /* Map pci device */
 int
-pci_map_device(struct rte_pci_device *dev)
+rte_eal_pci_map_device(struct rte_pci_device *dev)
 {
        int ret = -1;
 
@@ -153,7 +153,7 @@ pci_map_device(struct rte_pci_device *dev)
 
 /* Unmap pci device */
 void
-pci_unmap_device(struct rte_pci_device *dev)
+rte_eal_pci_unmap_device(struct rte_pci_device *dev)
 {
        /* try unmapping the NIC resources using VFIO if it exists */
        switch (dev->kdrv) {
index aa4fcbd..4c09c0b 100644 (file)
@@ -142,5 +142,8 @@ DPDK_2.2 {
 DPDK_2.3 {
        global:
 
+       rte_eal_pci_map_device;
+       rte_eal_pci_unmap_device;
        rte_cpu_feature_table;
+
 } DPDK_2.2;