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 10enum { 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}; 26 27enum { 28 MOCK_APERTURE_START = 1UL << 24, 29 MOCK_APERTURE_LAST = (1UL << 31) - 1, 30}; 31 32enum { 33 MOCK_FLAGS_ACCESS_WRITE = 1 << 0, 34 MOCK_FLAGS_ACCESS_SYZ = 1 << 16, 35}; 36 37enum { 38 MOCK_ACCESS_RW_WRITE = 1 << 0, 39 MOCK_ACCESS_RW_SLOW_PATH = 1 << 2, 40}; 41 42enum { 43 MOCK_FLAGS_ACCESS_CREATE_NEEDS_PIN_PAGES = 1 << 0, 44}; 45 46enum { 47 MOCK_FLAGS_DEVICE_NO_DIRTY = 1 << 0, 48 MOCK_FLAGS_DEVICE_HUGE_IOVA = 1 << 1, 49}; 50 51enum { 52 MOCK_NESTED_DOMAIN_IOTLB_ID_MAX = 3, 53 MOCK_NESTED_DOMAIN_IOTLB_NUM = 4, 54}; 55 56struct iommu_test_cmd { 57 __u32 size; 58 __u32 op; 59 __u32 id; 60 __u32 __reserved; 61 union { 62 struct { 63 __aligned_u64 start; 64 __aligned_u64 length; 65 } add_reserved; 66 struct { 67 __u32 out_stdev_id; 68 __u32 out_hwpt_id; 69 /* out_idev_id is the standard iommufd_bind object */ 70 __u32 out_idev_id; 71 } mock_domain; 72 struct { 73 __u32 out_stdev_id; 74 __u32 out_hwpt_id; 75 __u32 out_idev_id; 76 /* Expand mock_domain to set mock device flags */ 77 __u32 dev_flags; 78 } mock_domain_flags; 79 struct { 80 __u32 pt_id; 81 } mock_domain_replace; 82 struct { 83 __aligned_u64 iova; 84 __aligned_u64 length; 85 __aligned_u64 uptr; 86 } check_map; 87 struct { 88 __aligned_u64 length; 89 __aligned_u64 uptr; 90 __u32 refs; 91 } check_refs; 92 struct { 93 __u32 out_access_fd; 94 __u32 flags; 95 } create_access; 96 struct { 97 __u32 access_pages_id; 98 } destroy_access_pages; 99 struct { 100 __u32 flags; 101 __u32 out_access_pages_id; 102 __aligned_u64 iova; 103 __aligned_u64 length; 104 __aligned_u64 uptr; 105 } access_pages; 106 struct { 107 __aligned_u64 iova; 108 __aligned_u64 length; 109 __aligned_u64 uptr; 110 __u32 flags; 111 } access_rw; 112 struct { 113 __u32 limit; 114 } memory_limit; 115 struct { 116 __u32 ioas_id; 117 } access_replace_ioas; 118 struct { 119 __u32 flags; 120 __aligned_u64 iova; 121 __aligned_u64 length; 122 __aligned_u64 page_size; 123 __aligned_u64 uptr; 124 __aligned_u64 out_nr_dirty; 125 } dirty; 126 struct { 127 __u32 id; 128 __u32 iotlb; 129 } check_iotlb; 130 }; 131 __u32 last; 132}; 133#define IOMMU_TEST_CMD _IO(IOMMUFD_TYPE, IOMMUFD_CMD_BASE + 32) 134 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 138 139struct iommu_test_hw_info { 140 __u32 flags; 141 __u32 test_reg; 142}; 143 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 147 148/** 149 * struct iommu_hwpt_selftest 150 * 151 * @iotlb: default mock iotlb value, IOMMU_TEST_IOTLB_DEFAULT 152 */ 153struct iommu_hwpt_selftest { 154 __u32 iotlb; 155}; 156 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 160 161/** 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 166 * 167 * If IOMMU_TEST_INVALIDATE_ALL is set in @flags, @iotlb_id will be ignored 168 */ 169struct iommu_hwpt_invalidate_selftest { 170#define IOMMU_TEST_INVALIDATE_FLAG_ALL (1 << 0) 171 __u32 flags; 172 __u32 iotlb_id; 173}; 174 175#endif 176