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/iommufd.h>
8 #include <linux/types.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
,
25 IOMMU_TEST_OP_TRIGGER_IOPF
,
26 IOMMU_TEST_OP_DEV_CHECK_CACHE
,
30 MOCK_APERTURE_START
= 1UL << 24,
31 MOCK_APERTURE_LAST
= (1UL << 31) - 1,
35 MOCK_FLAGS_ACCESS_WRITE
= 1 << 0,
36 MOCK_FLAGS_ACCESS_SYZ
= 1 << 16,
40 MOCK_ACCESS_RW_WRITE
= 1 << 0,
41 MOCK_ACCESS_RW_SLOW_PATH
= 1 << 2,
45 MOCK_FLAGS_ACCESS_CREATE_NEEDS_PIN_PAGES
= 1 << 0,
49 MOCK_FLAGS_DEVICE_NO_DIRTY
= 1 << 0,
50 MOCK_FLAGS_DEVICE_HUGE_IOVA
= 1 << 1,
54 MOCK_NESTED_DOMAIN_IOTLB_ID_MAX
= 3,
55 MOCK_NESTED_DOMAIN_IOTLB_NUM
= 4,
59 MOCK_DEV_CACHE_ID_MAX
= 3,
60 MOCK_DEV_CACHE_NUM
= 4,
63 struct iommu_test_cmd
{
76 /* out_idev_id is the standard iommufd_bind object */
83 /* Expand mock_domain to set mock device flags */
88 } mock_domain_replace
;
104 __u32 access_pages_id
;
105 } destroy_access_pages
;
108 __u32 out_access_pages_id
;
110 __aligned_u64 length
;
115 __aligned_u64 length
;
124 } access_replace_ioas
;
128 __aligned_u64 length
;
129 __aligned_u64 page_size
;
131 __aligned_u64 out_nr_dirty
;
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
{
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
{
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)
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)