1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2021-2022, NVIDIA CORPORATION & AFFILIATES.
4 #ifndef _UAPI_IOMMUFD_TEST_H
5 #define _UAPI_IOMMUFD_TEST_H
7 #include <linux/types.h>
8 #include <linux/iommufd.h>
11 IOMMU_TEST_OP_ADD_RESERVED = 1,
12 IOMMU_TEST_OP_MOCK_DOMAIN,
13 IOMMU_TEST_OP_MD_CHECK_MAP,
14 IOMMU_TEST_OP_MD_CHECK_REFS,
15 IOMMU_TEST_OP_CREATE_ACCESS,
16 IOMMU_TEST_OP_DESTROY_ACCESS_PAGES,
17 IOMMU_TEST_OP_ACCESS_PAGES,
18 IOMMU_TEST_OP_ACCESS_RW,
19 IOMMU_TEST_OP_SET_TEMP_MEMORY_LIMIT,
20 IOMMU_TEST_OP_MOCK_DOMAIN_REPLACE,
21 IOMMU_TEST_OP_ACCESS_REPLACE_IOAS,
22 IOMMU_TEST_OP_MOCK_DOMAIN_FLAGS,
24 IOMMU_TEST_OP_MD_CHECK_IOTLB,
28 MOCK_APERTURE_START = 1UL << 24,
29 MOCK_APERTURE_LAST = (1UL << 31) - 1,
33 MOCK_FLAGS_ACCESS_WRITE = 1 << 0,
34 MOCK_FLAGS_ACCESS_SYZ = 1 << 16,
38 MOCK_ACCESS_RW_WRITE = 1 << 0,
39 MOCK_ACCESS_RW_SLOW_PATH = 1 << 2,
43 MOCK_FLAGS_ACCESS_CREATE_NEEDS_PIN_PAGES = 1 << 0,
47 MOCK_FLAGS_DEVICE_NO_DIRTY = 1 << 0,
48 MOCK_FLAGS_DEVICE_HUGE_IOVA = 1 << 1,
52 MOCK_NESTED_DOMAIN_IOTLB_ID_MAX = 3,
53 MOCK_NESTED_DOMAIN_IOTLB_NUM = 4,
56 struct iommu_test_cmd {
69 /* out_idev_id is the standard iommufd_bind object */
76 /* Expand mock_domain to set mock device flags */
81 } mock_domain_replace;
97 __u32 access_pages_id;
98 } destroy_access_pages;
101 __u32 out_access_pages_id;
103 __aligned_u64 length;
108 __aligned_u64 length;
117 } access_replace_ioas;
121 __aligned_u64 length;
122 __aligned_u64 page_size;
124 __aligned_u64 out_nr_dirty;
133 #define IOMMU_TEST_CMD _IO(IOMMUFD_TYPE, IOMMUFD_CMD_BASE + 32)
135 /* Mock structs for IOMMU_DEVICE_GET_HW_INFO ioctl */
136 #define IOMMU_HW_INFO_TYPE_SELFTEST 0xfeedbeef
137 #define IOMMU_HW_INFO_SELFTEST_REGVAL 0xdeadbeef
139 struct iommu_test_hw_info {
144 /* Should not be equal to any defined value in enum iommu_hwpt_data_type */
145 #define IOMMU_HWPT_DATA_SELFTEST 0xdead
146 #define IOMMU_TEST_IOTLB_DEFAULT 0xbadbeef
149 * struct iommu_hwpt_selftest
151 * @iotlb: default mock iotlb value, IOMMU_TEST_IOTLB_DEFAULT
153 struct iommu_hwpt_selftest {
157 /* Should not be equal to any defined value in enum iommu_hwpt_invalidate_data_type */
158 #define IOMMU_HWPT_INVALIDATE_DATA_SELFTEST 0xdeadbeef
159 #define IOMMU_HWPT_INVALIDATE_DATA_SELFTEST_INVALID 0xdadbeef
162 * struct iommu_hwpt_invalidate_selftest - Invalidation data for Mock driver
163 * (IOMMU_HWPT_INVALIDATE_DATA_SELFTEST)
164 * @flags: Invalidate flags
165 * @iotlb_id: Invalidate iotlb entry index
167 * If IOMMU_TEST_INVALIDATE_ALL is set in @flags, @iotlb_id will be ignored
169 struct iommu_hwpt_invalidate_selftest {
170 #define IOMMU_TEST_INVALIDATE_FLAG_ALL (1 << 0)