Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 82 lines 2.4 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2#ifndef SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_IOMMU_H 3#define SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_IOMMU_H 4 5#include <linux/list.h> 6#include <linux/types.h> 7 8#include <libvfio/assert.h> 9 10typedef u64 iova_t; 11 12struct iommu_mode { 13 const char *name; 14 const char *container_path; 15 unsigned long iommu_type; 16}; 17 18extern const char *default_iommu_mode; 19 20struct dma_region { 21 struct list_head link; 22 void *vaddr; 23 iova_t iova; 24 u64 size; 25}; 26 27struct iommu { 28 const struct iommu_mode *mode; 29 int container_fd; 30 int iommufd; 31 u32 ioas_id; 32 struct list_head dma_regions; 33}; 34 35struct iommu *iommu_init(const char *iommu_mode); 36void iommu_cleanup(struct iommu *iommu); 37 38int __iommu_map(struct iommu *iommu, struct dma_region *region); 39 40static inline void iommu_map(struct iommu *iommu, struct dma_region *region) 41{ 42 VFIO_ASSERT_EQ(__iommu_map(iommu, region), 0); 43} 44 45int __iommu_unmap(struct iommu *iommu, struct dma_region *region, u64 *unmapped); 46 47static inline void iommu_unmap(struct iommu *iommu, struct dma_region *region) 48{ 49 VFIO_ASSERT_EQ(__iommu_unmap(iommu, region, NULL), 0); 50} 51 52int __iommu_unmap_all(struct iommu *iommu, u64 *unmapped); 53 54static inline void iommu_unmap_all(struct iommu *iommu) 55{ 56 VFIO_ASSERT_EQ(__iommu_unmap_all(iommu, NULL), 0); 57} 58 59int __iommu_hva2iova(struct iommu *iommu, void *vaddr, iova_t *iova); 60iova_t iommu_hva2iova(struct iommu *iommu, void *vaddr); 61 62struct iommu_iova_range *iommu_iova_ranges(struct iommu *iommu, u32 *nranges); 63 64#define MODE_VFIO_TYPE1_IOMMU "vfio_type1_iommu" 65#define MODE_VFIO_TYPE1V2_IOMMU "vfio_type1v2_iommu" 66#define MODE_IOMMUFD_COMPAT_TYPE1 "iommufd_compat_type1" 67#define MODE_IOMMUFD_COMPAT_TYPE1V2 "iommufd_compat_type1v2" 68#define MODE_IOMMUFD "iommufd" 69 70/* 71 * Generator for VFIO selftests fixture variants that replicate across all 72 * possible IOMMU modes. Tests must define FIXTURE_VARIANT_ADD_IOMMU_MODE() 73 * which should then use FIXTURE_VARIANT_ADD() to create the variant. 74 */ 75#define FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(...) \ 76FIXTURE_VARIANT_ADD_IOMMU_MODE(vfio_type1_iommu, ##__VA_ARGS__); \ 77FIXTURE_VARIANT_ADD_IOMMU_MODE(vfio_type1v2_iommu, ##__VA_ARGS__); \ 78FIXTURE_VARIANT_ADD_IOMMU_MODE(iommufd_compat_type1, ##__VA_ARGS__); \ 79FIXTURE_VARIANT_ADD_IOMMU_MODE(iommufd_compat_type1v2, ##__VA_ARGS__); \ 80FIXTURE_VARIANT_ADD_IOMMU_MODE(iommufd, ##__VA_ARGS__) 81 82#endif /* SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_IOMMU_H */