blob: 257062881cd4b6fc5b30580b4d7867fff56a0f91 [file] [log] [blame]
Elliott Hughes180edef2023-11-02 00:08:05 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
Christopher Ferris8b7fdc92023-02-21 13:36:32 -08007#ifndef _UAPI_IOMMUFD_H
8#define _UAPI_IOMMUFD_H
9#include <linux/types.h>
10#include <linux/ioctl.h>
11#define IOMMUFD_TYPE (';')
12enum {
13 IOMMUFD_CMD_BASE = 0x80,
14 IOMMUFD_CMD_DESTROY = IOMMUFD_CMD_BASE,
15 IOMMUFD_CMD_IOAS_ALLOC,
16 IOMMUFD_CMD_IOAS_ALLOW_IOVAS,
17 IOMMUFD_CMD_IOAS_COPY,
18 IOMMUFD_CMD_IOAS_IOVA_RANGES,
19 IOMMUFD_CMD_IOAS_MAP,
20 IOMMUFD_CMD_IOAS_UNMAP,
21 IOMMUFD_CMD_OPTION,
22 IOMMUFD_CMD_VFIO_IOAS,
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070023 IOMMUFD_CMD_HWPT_ALLOC,
24 IOMMUFD_CMD_GET_HW_INFO,
Christopher Ferris0f795212024-01-17 14:17:28 -080025 IOMMUFD_CMD_HWPT_SET_DIRTY_TRACKING,
26 IOMMUFD_CMD_HWPT_GET_DIRTY_BITMAP,
Christopher Ferrisb830ddf2024-03-28 11:48:08 -070027 IOMMUFD_CMD_HWPT_INVALIDATE,
Christopher Ferris8b7fdc92023-02-21 13:36:32 -080028};
29struct iommu_destroy {
30 __u32 size;
31 __u32 id;
32};
33#define IOMMU_DESTROY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_DESTROY)
34struct iommu_ioas_alloc {
35 __u32 size;
36 __u32 flags;
37 __u32 out_ioas_id;
38};
39#define IOMMU_IOAS_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOC)
40struct iommu_iova_range {
41 __aligned_u64 start;
42 __aligned_u64 last;
43};
44struct iommu_ioas_iova_ranges {
45 __u32 size;
46 __u32 ioas_id;
47 __u32 num_iovas;
48 __u32 __reserved;
49 __aligned_u64 allowed_iovas;
50 __aligned_u64 out_iova_alignment;
51};
52#define IOMMU_IOAS_IOVA_RANGES _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_IOVA_RANGES)
53struct iommu_ioas_allow_iovas {
54 __u32 size;
55 __u32 ioas_id;
56 __u32 num_iovas;
57 __u32 __reserved;
58 __aligned_u64 allowed_iovas;
59};
60#define IOMMU_IOAS_ALLOW_IOVAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOW_IOVAS)
61enum iommufd_ioas_map_flags {
62 IOMMU_IOAS_MAP_FIXED_IOVA = 1 << 0,
63 IOMMU_IOAS_MAP_WRITEABLE = 1 << 1,
64 IOMMU_IOAS_MAP_READABLE = 1 << 2,
65};
66struct iommu_ioas_map {
67 __u32 size;
68 __u32 flags;
69 __u32 ioas_id;
70 __u32 __reserved;
71 __aligned_u64 user_va;
72 __aligned_u64 length;
73 __aligned_u64 iova;
74};
75#define IOMMU_IOAS_MAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_MAP)
76struct iommu_ioas_copy {
77 __u32 size;
78 __u32 flags;
79 __u32 dst_ioas_id;
80 __u32 src_ioas_id;
81 __aligned_u64 length;
82 __aligned_u64 dst_iova;
83 __aligned_u64 src_iova;
84};
85#define IOMMU_IOAS_COPY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_COPY)
86struct iommu_ioas_unmap {
87 __u32 size;
88 __u32 ioas_id;
89 __aligned_u64 iova;
90 __aligned_u64 length;
91};
92#define IOMMU_IOAS_UNMAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_UNMAP)
93enum iommufd_option {
94 IOMMU_OPTION_RLIMIT_MODE = 0,
95 IOMMU_OPTION_HUGE_PAGES = 1,
96};
97enum iommufd_option_ops {
98 IOMMU_OPTION_OP_SET = 0,
99 IOMMU_OPTION_OP_GET = 1,
100};
101struct iommu_option {
102 __u32 size;
103 __u32 option_id;
104 __u16 op;
105 __u16 __reserved;
106 __u32 object_id;
107 __aligned_u64 val64;
108};
109#define IOMMU_OPTION _IO(IOMMUFD_TYPE, IOMMUFD_CMD_OPTION)
110enum iommufd_vfio_ioas_op {
111 IOMMU_VFIO_IOAS_GET = 0,
112 IOMMU_VFIO_IOAS_SET = 1,
113 IOMMU_VFIO_IOAS_CLEAR = 2,
114};
115struct iommu_vfio_ioas {
116 __u32 size;
117 __u32 ioas_id;
118 __u16 op;
119 __u16 __reserved;
120};
121#define IOMMU_VFIO_IOAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VFIO_IOAS)
Christopher Ferris0f795212024-01-17 14:17:28 -0800122enum iommufd_hwpt_alloc_flags {
123 IOMMU_HWPT_ALLOC_NEST_PARENT = 1 << 0,
124 IOMMU_HWPT_ALLOC_DIRTY_TRACKING = 1 << 1,
125};
126enum iommu_hwpt_vtd_s1_flags {
127 IOMMU_VTD_S1_SRE = 1 << 0,
128 IOMMU_VTD_S1_EAFE = 1 << 1,
129 IOMMU_VTD_S1_WPE = 1 << 2,
130};
131struct iommu_hwpt_vtd_s1 {
132 __aligned_u64 flags;
133 __aligned_u64 pgtbl_addr;
134 __u32 addr_width;
135 __u32 __reserved;
136};
137enum iommu_hwpt_data_type {
138 IOMMU_HWPT_DATA_NONE,
139 IOMMU_HWPT_DATA_VTD_S1,
140};
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700141struct iommu_hwpt_alloc {
142 __u32 size;
143 __u32 flags;
144 __u32 dev_id;
145 __u32 pt_id;
146 __u32 out_hwpt_id;
147 __u32 __reserved;
Christopher Ferris0f795212024-01-17 14:17:28 -0800148 __u32 data_type;
149 __u32 data_len;
150 __aligned_u64 data_uptr;
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700151};
152#define IOMMU_HWPT_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_ALLOC)
Christopher Ferris0f795212024-01-17 14:17:28 -0800153enum iommu_hw_info_vtd_flags {
154 IOMMU_HW_INFO_VTD_ERRATA_772415_SPR17 = 1 << 0,
155};
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700156struct iommu_hw_info_vtd {
157 __u32 flags;
158 __u32 __reserved;
159 __aligned_u64 cap_reg;
160 __aligned_u64 ecap_reg;
161};
162enum iommu_hw_info_type {
163 IOMMU_HW_INFO_TYPE_NONE,
164 IOMMU_HW_INFO_TYPE_INTEL_VTD,
165};
Christopher Ferris0f795212024-01-17 14:17:28 -0800166enum iommufd_hw_capabilities {
167 IOMMU_HW_CAP_DIRTY_TRACKING = 1 << 0,
168};
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700169struct iommu_hw_info {
170 __u32 size;
171 __u32 flags;
172 __u32 dev_id;
173 __u32 data_len;
174 __aligned_u64 data_uptr;
175 __u32 out_data_type;
176 __u32 __reserved;
Christopher Ferris0f795212024-01-17 14:17:28 -0800177 __aligned_u64 out_capabilities;
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700178};
179#define IOMMU_GET_HW_INFO _IO(IOMMUFD_TYPE, IOMMUFD_CMD_GET_HW_INFO)
Christopher Ferris0f795212024-01-17 14:17:28 -0800180enum iommufd_hwpt_set_dirty_tracking_flags {
181 IOMMU_HWPT_DIRTY_TRACKING_ENABLE = 1,
182};
183struct iommu_hwpt_set_dirty_tracking {
184 __u32 size;
185 __u32 flags;
186 __u32 hwpt_id;
187 __u32 __reserved;
188};
189#define IOMMU_HWPT_SET_DIRTY_TRACKING _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_SET_DIRTY_TRACKING)
190enum iommufd_hwpt_get_dirty_bitmap_flags {
191 IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR = 1,
192};
193struct iommu_hwpt_get_dirty_bitmap {
194 __u32 size;
195 __u32 hwpt_id;
196 __u32 flags;
197 __u32 __reserved;
198 __aligned_u64 iova;
199 __aligned_u64 length;
200 __aligned_u64 page_size;
201 __aligned_u64 data;
202};
203#define IOMMU_HWPT_GET_DIRTY_BITMAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_GET_DIRTY_BITMAP)
Christopher Ferrisb830ddf2024-03-28 11:48:08 -0700204enum iommu_hwpt_invalidate_data_type {
205 IOMMU_HWPT_INVALIDATE_DATA_VTD_S1,
206};
207enum iommu_hwpt_vtd_s1_invalidate_flags {
208 IOMMU_VTD_INV_FLAGS_LEAF = 1 << 0,
209};
210struct iommu_hwpt_vtd_s1_invalidate {
211 __aligned_u64 addr;
212 __aligned_u64 npages;
213 __u32 flags;
214 __u32 __reserved;
215};
216struct iommu_hwpt_invalidate {
217 __u32 size;
218 __u32 hwpt_id;
219 __aligned_u64 data_uptr;
220 __u32 data_type;
221 __u32 entry_len;
222 __u32 entry_num;
223 __u32 __reserved;
224};
225#define IOMMU_HWPT_INVALIDATE _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_INVALIDATE)
Christopher Ferris8b7fdc92023-02-21 13:36:32 -0800226#endif