DPDK  19.08.0-rc0
Functions
rte_vfio.h File Reference
#include <stdint.h>
#include <linux/vfio.h>

Go to the source code of this file.

Functions

int rte_vfio_setup_device (const char *sysfs_base, const char *dev_addr, int *vfio_dev_fd, struct vfio_device_info *device_info)
 
int rte_vfio_release_device (const char *sysfs_base, const char *dev_addr, int fd)
 
int rte_vfio_enable (const char *modname)
 
int rte_vfio_is_enabled (const char *modname)
 
int rte_vfio_noiommu_is_enabled (void)
 
int rte_vfio_clear_group (int vfio_group_fd)
 
int rte_vfio_dma_map (uint64_t vaddr, uint64_t iova, uint64_t len)
 
int rte_vfio_dma_unmap (uint64_t vaddr, uint64_t iova, uint64_t len)
 
int rte_vfio_get_group_num (const char *sysfs_base, const char *dev_addr, int *iommu_group_num)
 
int rte_vfio_get_container_fd (void)
 
int rte_vfio_get_group_fd (int iommu_group_num)
 
int rte_vfio_container_create (void)
 
int rte_vfio_container_destroy (int container_fd)
 
int rte_vfio_container_group_bind (int container_fd, int iommu_group_num)
 
int rte_vfio_container_group_unbind (int container_fd, int iommu_group_num)
 
int rte_vfio_container_dma_map (int container_fd, uint64_t vaddr, uint64_t iova, uint64_t len)
 
int rte_vfio_container_dma_unmap (int container_fd, uint64_t vaddr, uint64_t iova, uint64_t len)
 

Detailed Description

RTE VFIO. This library provides various VFIO related utility functions.

Definition in file rte_vfio.h.

Function Documentation

◆ rte_vfio_setup_device()

int rte_vfio_setup_device ( const char *  sysfs_base,
const char *  dev_addr,
int *  vfio_dev_fd,
struct vfio_device_info *  device_info 
)

Setup vfio_cfg for the device identified by its address. It discovers the configured I/O MMU groups or sets a new one for the device. If a new groups is assigned, the DMA mapping is performed.

This function is only relevant to linux and will return an error on BSD.

Parameters
sysfs_basesysfs path prefix.
dev_addrdevice location.
vfio_dev_fdVFIO fd.
device_infoDevice information.
Returns
0 on success. <0 on failure. >1 if the device cannot be managed this way.

◆ rte_vfio_release_device()

int rte_vfio_release_device ( const char *  sysfs_base,
const char *  dev_addr,
int  fd 
)

Release a device mapped to a VFIO-managed I/O MMU group.

This function is only relevant to linux and will return an error on BSD.

Parameters
sysfs_basesysfs path prefix.
dev_addrdevice location.
fdVFIO fd.
Returns
0 on success. <0 on failure.

◆ rte_vfio_enable()

int rte_vfio_enable ( const char *  modname)

Enable a VFIO-related kmod.

This function is only relevant to linux and will return an error on BSD.

Parameters
modnamekernel module name.
Returns
0 on success. <0 on failure.

◆ rte_vfio_is_enabled()

int rte_vfio_is_enabled ( const char *  modname)

Check whether a VFIO-related kmod is enabled.

This function is only relevant to linux and will return an error on BSD.

Parameters
modnamekernel module name.
Returns
!0 if true. 0 otherwise.

◆ rte_vfio_noiommu_is_enabled()

int rte_vfio_noiommu_is_enabled ( void  )

Whether VFIO NOIOMMU mode is enabled.

This function is only relevant to linux and will return an error on BSD.

Returns
!0 if true. 0 otherwise.

◆ rte_vfio_clear_group()

int rte_vfio_clear_group ( int  vfio_group_fd)

Remove group fd from internal VFIO group fd array/

This function is only relevant to linux and will return an error on BSD.

Parameters
vfio_group_fdVFIO Group FD.
Returns
0 on success. <0 on failure.

◆ rte_vfio_dma_map()

int rte_vfio_dma_map ( uint64_t  vaddr,
uint64_t  iova,
uint64_t  len 
)

Map memory region for use with VFIO.

Note
Require at least one device to be attached at the time of mapping. DMA maps done via this API will only apply to default container and will not apply to any of the containers created via rte_vfio_container_create().
Parameters
vaddrStarting virtual address of memory to be mapped.
iovaStarting IOVA address of memory to be mapped.
lenLength of memory segment being mapped.
Returns
0 if success. -1 on error.

◆ rte_vfio_dma_unmap()

int rte_vfio_dma_unmap ( uint64_t  vaddr,
uint64_t  iova,
uint64_t  len 
)

Unmap memory region from VFIO.

Parameters
vaddrStarting virtual address of memory to be unmapped.
iovaStarting IOVA address of memory to be unmapped.
lenLength of memory segment being unmapped.
Returns
0 if success. -1 on error.

◆ rte_vfio_get_group_num()

int rte_vfio_get_group_num ( const char *  sysfs_base,
const char *  dev_addr,
int *  iommu_group_num 
)

Parse IOMMU group number for a device

This function is only relevant to linux and will return an error on BSD.

Parameters
sysfs_basesysfs path prefix.
dev_addrdevice location.
iommu_group_numiommu group number
Returns
>0 on success 0 for non-existent group or VFIO <0 for errors

◆ rte_vfio_get_container_fd()

int rte_vfio_get_container_fd ( void  )

Open a new VFIO container fd

This function is only relevant to linux and will return an error on BSD.

Returns

0 container fd

< 0 for errors

◆ rte_vfio_get_group_fd()

int rte_vfio_get_group_fd ( int  iommu_group_num)

Open VFIO group fd or get an existing one

This function is only relevant to linux and will return an error on BSD.

Parameters
iommu_group_numiommu group number
Returns

0 group fd

< 0 for errors

◆ rte_vfio_container_create()

int rte_vfio_container_create ( void  )

Create a new container for device binding.

Note
Any newly allocated DPDK memory will not be mapped into these containers by default, user needs to manage DMA mappings for any container created by this API.
When creating containers using this API, the container will only be available in the process that has created it. Sharing containers and devices between multiple processes is not supported.
Returns
the container fd if successful <0 if failed

◆ rte_vfio_container_destroy()

int rte_vfio_container_destroy ( int  container_fd)

Destroy the container, unbind all vfio groups within it.

Parameters
container_fdthe container fd to destroy
Returns
0 if successful <0 if failed

◆ rte_vfio_container_group_bind()

int rte_vfio_container_group_bind ( int  container_fd,
int  iommu_group_num 
)

Bind a IOMMU group to a container.

Parameters
container_fdthe container's fd
iommu_group_numthe iommu group number to bind to container
Returns
group fd if successful <0 if failed

◆ rte_vfio_container_group_unbind()

int rte_vfio_container_group_unbind ( int  container_fd,
int  iommu_group_num 
)

Unbind a IOMMU group from a container.

Parameters
container_fdthe container fd of container
iommu_group_numthe iommu group number to delete from container
Returns
0 if successful <0 if failed

◆ rte_vfio_container_dma_map()

int rte_vfio_container_dma_map ( int  container_fd,
uint64_t  vaddr,
uint64_t  iova,
uint64_t  len 
)

Perform DMA mapping for devices in a container.

Parameters
container_fdthe specified container fd. Use RTE_VFIO_DEFAULT_CONTAINER_FD to use the default container.
vaddrStarting virtual address of memory to be mapped.
iovaStarting IOVA address of memory to be mapped.
lenLength of memory segment being mapped.
Returns
0 if successful <0 if failed

◆ rte_vfio_container_dma_unmap()

int rte_vfio_container_dma_unmap ( int  container_fd,
uint64_t  vaddr,
uint64_t  iova,
uint64_t  len 
)

Perform DMA unmapping for devices in a container.

Parameters
container_fdthe specified container fd. Use RTE_VFIO_DEFAULT_CONTAINER_FD to use the default container.
vaddrStarting virtual address of memory to be unmapped.
iovaStarting IOVA address of memory to be unmapped.
lenLength of memory segment being unmapped.
Returns
0 if successful <0 if failed