File Index
Files and directories
Sign in
FILE

iommu.h

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/vfio/lib/include/libvfio/iommu.h C
 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/*
65 * Generator for VFIO selftests fixture variants that replicate across all
66 * possible IOMMU modes. Tests must define FIXTURE_VARIANT_ADD_IOMMU_MODE()
67 * which should then use FIXTURE_VARIANT_ADD() to create the variant.
68 */
69#define FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(...) \
70FIXTURE_VARIANT_ADD_IOMMU_MODE(vfio_type1_iommu, ##__VA_ARGS__); \
71FIXTURE_VARIANT_ADD_IOMMU_MODE(vfio_type1v2_iommu, ##__VA_ARGS__); \
72FIXTURE_VARIANT_ADD_IOMMU_MODE(iommufd_compat_type1, ##__VA_ARGS__); \
73FIXTURE_VARIANT_ADD_IOMMU_MODE(iommufd_compat_type1v2, ##__VA_ARGS__); \
74FIXTURE_VARIANT_ADD_IOMMU_MODE(iommufd, ##__VA_ARGS__)
75
76#endif /* SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_IOMMU_H */
~/ Read-only file preview.