pci: export device mapping functions

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>
This commit is contained in:
Yuanhan Liu 2016-02-02 21:48:18 +08:00 committed by Thomas Monjalon
parent 1905e101dc
commit 962cf902e6
7 changed files with 37 additions and 24 deletions

View 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) {

View 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;

View 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;
}

View 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
*

View 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.

View 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) {

View 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;