accel/ivpu: Move recovery work to system_unbound_wq
[drm/drm-misc.git] / drivers / iommu / iommufd / iommufd_test.h
bloba6b7a163f6364c6727a0e15cce3c7bd708501124
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2021-2022, NVIDIA CORPORATION & AFFILIATES.
3 */
4 #ifndef _UAPI_IOMMUFD_TEST_H
5 #define _UAPI_IOMMUFD_TEST_H
7 #include <linux/iommufd.h>
8 #include <linux/types.h>
10 enum {
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,
23 IOMMU_TEST_OP_DIRTY,
24 IOMMU_TEST_OP_MD_CHECK_IOTLB,
25 IOMMU_TEST_OP_TRIGGER_IOPF,
26 IOMMU_TEST_OP_DEV_CHECK_CACHE,
29 enum {
30 MOCK_APERTURE_START = 1UL << 24,
31 MOCK_APERTURE_LAST = (1UL << 31) - 1,
34 enum {
35 MOCK_FLAGS_ACCESS_WRITE = 1 << 0,
36 MOCK_FLAGS_ACCESS_SYZ = 1 << 16,
39 enum {
40 MOCK_ACCESS_RW_WRITE = 1 << 0,
41 MOCK_ACCESS_RW_SLOW_PATH = 1 << 2,
44 enum {
45 MOCK_FLAGS_ACCESS_CREATE_NEEDS_PIN_PAGES = 1 << 0,
48 enum {
49 MOCK_FLAGS_DEVICE_NO_DIRTY = 1 << 0,
50 MOCK_FLAGS_DEVICE_HUGE_IOVA = 1 << 1,
53 enum {
54 MOCK_NESTED_DOMAIN_IOTLB_ID_MAX = 3,
55 MOCK_NESTED_DOMAIN_IOTLB_NUM = 4,
58 enum {
59 MOCK_DEV_CACHE_ID_MAX = 3,
60 MOCK_DEV_CACHE_NUM = 4,
63 struct iommu_test_cmd {
64 __u32 size;
65 __u32 op;
66 __u32 id;
67 __u32 __reserved;
68 union {
69 struct {
70 __aligned_u64 start;
71 __aligned_u64 length;
72 } add_reserved;
73 struct {
74 __u32 out_stdev_id;
75 __u32 out_hwpt_id;
76 /* out_idev_id is the standard iommufd_bind object */
77 __u32 out_idev_id;
78 } mock_domain;
79 struct {
80 __u32 out_stdev_id;
81 __u32 out_hwpt_id;
82 __u32 out_idev_id;
83 /* Expand mock_domain to set mock device flags */
84 __u32 dev_flags;
85 } mock_domain_flags;
86 struct {
87 __u32 pt_id;
88 } mock_domain_replace;
89 struct {
90 __aligned_u64 iova;
91 __aligned_u64 length;
92 __aligned_u64 uptr;
93 } check_map;
94 struct {
95 __aligned_u64 length;
96 __aligned_u64 uptr;
97 __u32 refs;
98 } check_refs;
99 struct {
100 __u32 out_access_fd;
101 __u32 flags;
102 } create_access;
103 struct {
104 __u32 access_pages_id;
105 } destroy_access_pages;
106 struct {
107 __u32 flags;
108 __u32 out_access_pages_id;
109 __aligned_u64 iova;
110 __aligned_u64 length;
111 __aligned_u64 uptr;
112 } access_pages;
113 struct {
114 __aligned_u64 iova;
115 __aligned_u64 length;
116 __aligned_u64 uptr;
117 __u32 flags;
118 } access_rw;
119 struct {
120 __u32 limit;
121 } memory_limit;
122 struct {
123 __u32 ioas_id;
124 } access_replace_ioas;
125 struct {
126 __u32 flags;
127 __aligned_u64 iova;
128 __aligned_u64 length;
129 __aligned_u64 page_size;
130 __aligned_u64 uptr;
131 __aligned_u64 out_nr_dirty;
132 } dirty;
133 struct {
134 __u32 id;
135 __u32 iotlb;
136 } check_iotlb;
137 struct {
138 __u32 dev_id;
139 __u32 pasid;
140 __u32 grpid;
141 __u32 perm;
142 __u64 addr;
143 } trigger_iopf;
144 struct {
145 __u32 id;
146 __u32 cache;
147 } check_dev_cache;
149 __u32 last;
151 #define IOMMU_TEST_CMD _IO(IOMMUFD_TYPE, IOMMUFD_CMD_BASE + 32)
153 /* Mock structs for IOMMU_DEVICE_GET_HW_INFO ioctl */
154 #define IOMMU_HW_INFO_TYPE_SELFTEST 0xfeedbeef
155 #define IOMMU_HW_INFO_SELFTEST_REGVAL 0xdeadbeef
157 struct iommu_test_hw_info {
158 __u32 flags;
159 __u32 test_reg;
162 /* Should not be equal to any defined value in enum iommu_hwpt_data_type */
163 #define IOMMU_HWPT_DATA_SELFTEST 0xdead
164 #define IOMMU_TEST_IOTLB_DEFAULT 0xbadbeef
165 #define IOMMU_TEST_DEV_CACHE_DEFAULT 0xbaddad
168 * struct iommu_hwpt_selftest
170 * @iotlb: default mock iotlb value, IOMMU_TEST_IOTLB_DEFAULT
172 struct iommu_hwpt_selftest {
173 __u32 iotlb;
176 /* Should not be equal to any defined value in enum iommu_hwpt_invalidate_data_type */
177 #define IOMMU_HWPT_INVALIDATE_DATA_SELFTEST 0xdeadbeef
178 #define IOMMU_HWPT_INVALIDATE_DATA_SELFTEST_INVALID 0xdadbeef
181 * struct iommu_hwpt_invalidate_selftest - Invalidation data for Mock driver
182 * (IOMMU_HWPT_INVALIDATE_DATA_SELFTEST)
183 * @flags: Invalidate flags
184 * @iotlb_id: Invalidate iotlb entry index
186 * If IOMMU_TEST_INVALIDATE_ALL is set in @flags, @iotlb_id will be ignored
188 struct iommu_hwpt_invalidate_selftest {
189 #define IOMMU_TEST_INVALIDATE_FLAG_ALL (1 << 0)
190 __u32 flags;
191 __u32 iotlb_id;
194 #define IOMMU_VIOMMU_TYPE_SELFTEST 0xdeadbeef
196 /* Should not be equal to any defined value in enum iommu_viommu_invalidate_data_type */
197 #define IOMMU_VIOMMU_INVALIDATE_DATA_SELFTEST 0xdeadbeef
198 #define IOMMU_VIOMMU_INVALIDATE_DATA_SELFTEST_INVALID 0xdadbeef
201 * struct iommu_viommu_invalidate_selftest - Invalidation data for Mock VIOMMU
202 * (IOMMU_VIOMMU_INVALIDATE_DATA_SELFTEST)
203 * @flags: Invalidate flags
204 * @cache_id: Invalidate cache entry index
206 * If IOMMU_TEST_INVALIDATE_ALL is set in @flags, @cache_id will be ignored
208 struct iommu_viommu_invalidate_selftest {
209 #define IOMMU_TEST_INVALIDATE_FLAG_ALL (1 << 0)
210 __u32 flags;
211 __u32 vdev_id;
212 __u32 cache_id;
215 #endif