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/types.h>
8 #include <linux/iommufd.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 };
23 
24 enum {
25 	MOCK_APERTURE_START = 1UL << 24,
26 	MOCK_APERTURE_LAST = (1UL << 31) - 1,
27 };
28 
29 enum {
30 	MOCK_FLAGS_ACCESS_WRITE = 1 << 0,
31 	MOCK_FLAGS_ACCESS_SYZ = 1 << 16,
32 };
33 
34 enum {
35 	MOCK_ACCESS_RW_WRITE = 1 << 0,
36 	MOCK_ACCESS_RW_SLOW_PATH = 1 << 2,
37 };
38 
39 enum {
40 	MOCK_FLAGS_ACCESS_CREATE_NEEDS_PIN_PAGES = 1 << 0,
41 };
42 
43 struct iommu_test_cmd {
44 	__u32 size;
45 	__u32 op;
46 	__u32 id;
47 	__u32 __reserved;
48 	union {
49 		struct {
50 			__aligned_u64 start;
51 			__aligned_u64 length;
52 		} add_reserved;
53 		struct {
54 			__u32 out_stdev_id;
55 			__u32 out_hwpt_id;
56 			/* out_idev_id is the standard iommufd_bind object */
57 			__u32 out_idev_id;
58 		} mock_domain;
59 		struct {
60 			__u32 pt_id;
61 		} mock_domain_replace;
62 		struct {
63 			__aligned_u64 iova;
64 			__aligned_u64 length;
65 			__aligned_u64 uptr;
66 		} check_map;
67 		struct {
68 			__aligned_u64 length;
69 			__aligned_u64 uptr;
70 			__u32 refs;
71 		} check_refs;
72 		struct {
73 			__u32 out_access_fd;
74 			__u32 flags;
75 		} create_access;
76 		struct {
77 			__u32 access_pages_id;
78 		} destroy_access_pages;
79 		struct {
80 			__u32 flags;
81 			__u32 out_access_pages_id;
82 			__aligned_u64 iova;
83 			__aligned_u64 length;
84 			__aligned_u64 uptr;
85 		} access_pages;
86 		struct {
87 			__aligned_u64 iova;
88 			__aligned_u64 length;
89 			__aligned_u64 uptr;
90 			__u32 flags;
91 		} access_rw;
92 		struct {
93 			__u32 limit;
94 		} memory_limit;
95 		struct {
96 			__u32 ioas_id;
97 		} access_replace_ioas;
98 	};
99 	__u32 last;
100 };
101 #define IOMMU_TEST_CMD _IO(IOMMUFD_TYPE, IOMMUFD_CMD_BASE + 32)
102 
103 /* Mock structs for IOMMU_DEVICE_GET_HW_INFO ioctl */
104 #define IOMMU_HW_INFO_TYPE_SELFTEST	0xfeedbeef
105 #define IOMMU_HW_INFO_SELFTEST_REGVAL	0xdeadbeef
106 
107 struct iommu_test_hw_info {
108 	__u32 flags;
109 	__u32 test_reg;
110 };
111 
112 #endif
113