DPDK  25.11.0
rte_vfio.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 6WIND S.A.
3  */
4 
5 #ifndef _RTE_VFIO_H_
6 #define _RTE_VFIO_H_
7 
13 #include <stdbool.h>
14 #include <stdint.h>
15 
16 #include <rte_compat.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #ifdef RTE_EXEC_ENV_LINUX
23 
24 #define RTE_VFIO_DIR "/dev/vfio"
25 #define RTE_VFIO_CONTAINER_PATH "/dev/vfio/vfio"
26 #define RTE_VFIO_GROUP_FMT "/dev/vfio/%u"
27 #define RTE_VFIO_NOIOMMU_GROUP_FMT "/dev/vfio/noiommu-%u"
28 #define RTE_VFIO_NOIOMMU_MODE \
29  "/sys/module/vfio/parameters/enable_unsafe_noiommu_mode"
30 
31 #endif /* RTE_EXEC_ENV_LINUX */
32 
33 /* we don't need an actual definition, only pointer is used */
34 struct vfio_device_info;
35 
36 #define RTE_VFIO_DEFAULT_CONTAINER_FD (-1)
37 
63 int rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr,
64  int *vfio_dev_fd, struct vfio_device_info *device_info);
65 
85 int rte_vfio_release_device(const char *sysfs_base, const char *dev_addr, int fd);
86 
100 int rte_vfio_enable(const char *modname);
101 
114 int rte_vfio_is_enabled(const char *modname);
115 
127 
141 int
142 rte_vfio_clear_group(int vfio_group_fd);
143 
164 int
165 rte_vfio_get_group_num(const char *sysfs_base,
166  const char *dev_addr, int *iommu_group_num);
167 
189 __rte_experimental
190 int
191 rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr,
192  int *vfio_dev_fd, struct vfio_device_info *device_info);
193 
204 int
206 
220 int
221 rte_vfio_get_group_fd(int iommu_group_num);
222 
238 int
240 
251 int
252 rte_vfio_container_destroy(int container_fd);
253 
267 int
268 rte_vfio_container_group_bind(int container_fd, int iommu_group_num);
269 
283 int
284 rte_vfio_container_group_unbind(int container_fd, int iommu_group_num);
285 
306 int
307 rte_vfio_container_dma_map(int container_fd, uint64_t vaddr,
308  uint64_t iova, uint64_t len);
309 
330 int
331 rte_vfio_container_dma_unmap(int container_fd, uint64_t vaddr,
332  uint64_t iova, uint64_t len);
333 
334 #ifdef __cplusplus
335 }
336 #endif
337 
338 #endif /* _RTE_VFIO_H_ */
int rte_vfio_clear_group(int vfio_group_fd)
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_get_group_num(const char *sysfs_base, const char *dev_addr, int *iommu_group_num)
int rte_vfio_is_enabled(const char *modname)
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_get_container_fd(void)
int rte_vfio_enable(const char *modname)
int rte_vfio_container_destroy(int container_fd)
int rte_vfio_container_dma_map(int container_fd, uint64_t vaddr, uint64_t iova, uint64_t len)
int rte_vfio_noiommu_is_enabled(void)
int rte_vfio_release_device(const char *sysfs_base, const char *dev_addr, int fd)
int rte_vfio_container_dma_unmap(int container_fd, uint64_t vaddr, uint64_t iova, uint64_t len)
int rte_vfio_container_create(void)
__rte_experimental int rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, int *vfio_dev_fd, struct vfio_device_info *device_info)
int rte_vfio_get_group_fd(int iommu_group_num)