]> Git Repo - linux.git/blob - drivers/iommu/iommufd/iommufd_test.h
Linux 6.14-rc3
[linux.git] / drivers / iommu / iommufd / iommufd_test.h
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
6
7 #include <linux/iommufd.h>
8 #include <linux/types.h>
9
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,
27 };
28
29 enum {
30         MOCK_APERTURE_START = 1UL << 24,
31         MOCK_APERTURE_LAST = (1UL << 31) - 1,
32 };
33
34 enum {
35         MOCK_FLAGS_ACCESS_WRITE = 1 << 0,
36         MOCK_FLAGS_ACCESS_SYZ = 1 << 16,
37 };
38
39 enum {
40         MOCK_ACCESS_RW_WRITE = 1 << 0,
41         MOCK_ACCESS_RW_SLOW_PATH = 1 << 2,
42 };
43
44 enum {
45         MOCK_FLAGS_ACCESS_CREATE_NEEDS_PIN_PAGES = 1 << 0,
46 };
47
48 enum {
49         MOCK_FLAGS_DEVICE_NO_DIRTY = 1 << 0,
50         MOCK_FLAGS_DEVICE_HUGE_IOVA = 1 << 1,
51 };
52
53 enum {
54         MOCK_NESTED_DOMAIN_IOTLB_ID_MAX = 3,
55         MOCK_NESTED_DOMAIN_IOTLB_NUM = 4,
56 };
57
58 enum {
59         MOCK_DEV_CACHE_ID_MAX = 3,
60         MOCK_DEV_CACHE_NUM = 4,
61 };
62
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;
148         };
149         __u32 last;
150 };
151 #define IOMMU_TEST_CMD _IO(IOMMUFD_TYPE, IOMMUFD_CMD_BASE + 32)
152
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
156
157 struct iommu_test_hw_info {
158         __u32 flags;
159         __u32 test_reg;
160 };
161
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
166
167 /**
168  * struct iommu_hwpt_selftest
169  *
170  * @iotlb: default mock iotlb value, IOMMU_TEST_IOTLB_DEFAULT
171  */
172 struct iommu_hwpt_selftest {
173         __u32 iotlb;
174 };
175
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
179
180 /**
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
185  *
186  * If IOMMU_TEST_INVALIDATE_ALL is set in @flags, @iotlb_id will be ignored
187  */
188 struct iommu_hwpt_invalidate_selftest {
189 #define IOMMU_TEST_INVALIDATE_FLAG_ALL  (1 << 0)
190         __u32 flags;
191         __u32 iotlb_id;
192 };
193
194 #define IOMMU_VIOMMU_TYPE_SELFTEST 0xdeadbeef
195
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
199
200 /**
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
205  *
206  * If IOMMU_TEST_INVALIDATE_ALL is set in @flags, @cache_id will be ignored
207  */
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;
213 };
214
215 #endif
This page took 0.04334 seconds and 4 git commands to generate.