pci: merge mapping functions for linux and bsd

The patch consolidates below functions, and implemented in common
eal code.
 - pci_map_device()
 - pci_unmap_device()

Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
This commit is contained in:
Tetsuya Mukawa 2015-07-08 19:34:52 +09:00 committed by Thomas Monjalon
parent 9b957f378a
commit 35b3313e32
6 changed files with 81 additions and 53 deletions

View File

@ -241,6 +241,9 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf)
/* FreeBSD has no NUMA support (yet) */
dev->numa_node = 0;
/* FreeBSD has only one pass through driver */
dev->kdrv = RTE_KDRV_NIC_UIO;
/* parse resources */
switch (conf->pc_hdr & PCIM_HDRTYPE) {
case PCIM_HDRTYPE_NORMAL:

View File

@ -137,6 +137,63 @@ pci_unmap_resource(void *requested_addr, size_t size)
requested_addr);
}
/* Map pci device */
int
pci_map_device(struct rte_pci_device *dev)
{
int ret = -1;
/* try mapping the NIC resources using VFIO if it exists */
switch (dev->kdrv) {
case RTE_KDRV_VFIO:
#ifdef VFIO_PRESENT
if (pci_vfio_is_enabled())
ret = pci_vfio_map_resource(dev);
#endif
break;
case RTE_KDRV_IGB_UIO:
case RTE_KDRV_UIO_GENERIC:
case RTE_KDRV_NIC_UIO:
/* map resources for devices that use uio */
ret = pci_uio_map_resource(dev);
break;
default:
RTE_LOG(DEBUG, EAL, " Not managed by a supported kernel driver,"
" skipped\n");
ret = 1;
break;
}
return ret;
}
#ifdef RTE_LIBRTE_EAL_HOTPLUG
/* Unmap pci device */
void
pci_unmap_device(struct rte_pci_device *dev)
{
if (dev == NULL)
return;
/* try unmapping the NIC resources using VFIO if it exists */
switch (dev->kdrv) {
case RTE_KDRV_VFIO:
RTE_LOG(ERR, EAL, "Hotplug doesn't support vfio yet\n");
break;
case RTE_KDRV_IGB_UIO:
case RTE_KDRV_UIO_GENERIC:
case RTE_KDRV_NIC_UIO:
/* unmap resources for devices that use uio */
pci_uio_unmap_resource(dev);
break;
default:
RTE_LOG(DEBUG, EAL, " Not managed by a supported kernel driver,"
" skipped\n");
break;
}
}
#endif /* RTE_LIBRTE_EAL_HOTPLUG */
/*
* If vendor/device ID match, call the devinit() function of all
* registered driver for the given device. Return -1 if initialization

View File

@ -154,6 +154,25 @@ int rte_eal_ivshmem_obj_init(void);
struct rte_pci_driver;
struct rte_pci_device;
/**
* Map this device
*
* This function is private to EAL.
*
* @return
* 0 on success, negative on error
*/
int pci_map_device(struct rte_pci_device *dev);
#ifdef RTE_LIBRTE_EAL_HOTPLUG
/**
* Unmap this device
*
* This function is private to EAL.
*/
void pci_unmap_device(struct rte_pci_device *dev);
#endif /* RTE_LIBRTE_EAL_HOTPLUG */
/**
* Map the PCI resource of a PCI device in virtual memory
*

View File

@ -148,6 +148,7 @@ enum rte_kernel_driver {
RTE_KDRV_IGB_UIO,
RTE_KDRV_VFIO,
RTE_KDRV_UIO_GENERIC,
RTE_KDRV_NIC_UIO,
};
/**

View File

@ -522,59 +522,6 @@ pci_config_space_set(struct rte_pci_device *dev)
}
#endif
static int
pci_map_device(struct rte_pci_device *dev)
{
int ret = -1;
/* try mapping the NIC resources using VFIO if it exists */
switch (dev->kdrv) {
case RTE_KDRV_VFIO:
#ifdef VFIO_PRESENT
if (pci_vfio_is_enabled())
ret = pci_vfio_map_resource(dev);
#endif
break;
case RTE_KDRV_IGB_UIO:
case RTE_KDRV_UIO_GENERIC:
/* map resources for devices that use uio */
ret = pci_uio_map_resource(dev);
break;
default:
RTE_LOG(DEBUG, EAL, " Not managed by a supported kernel driver,"
" skipped\n");
ret = 1;
break;
}
return ret;
}
#ifdef RTE_LIBRTE_EAL_HOTPLUG
static void
pci_unmap_device(struct rte_pci_device *dev)
{
if (dev == NULL)
return;
/* try unmapping the NIC resources using VFIO if it exists */
switch (dev->kdrv) {
case RTE_KDRV_VFIO:
RTE_LOG(ERR, EAL, "Hotplug doesn't support vfio yet\n");
break;
case RTE_KDRV_IGB_UIO:
case RTE_KDRV_UIO_GENERIC:
/* unmap resources for devices that use uio */
pci_uio_unmap_resource(dev);
break;
default:
RTE_LOG(DEBUG, EAL, " Not managed by a supported kernel driver,"
" skipped\n");
break;
}
}
#endif /* RTE_LIBRTE_EAL_HOTPLUG */
/*
* If vendor/device ID match, call the devinit() function of the
* driver.

View File

@ -527,6 +527,7 @@ rte_eth_dev_is_detachable(uint8_t port_id)
switch (rte_eth_devices[port_id].pci_dev->kdrv) {
case RTE_KDRV_IGB_UIO:
case RTE_KDRV_UIO_GENERIC:
case RTE_KDRV_NIC_UIO:
break;
case RTE_KDRV_VFIO:
default: