blob: a034b2921af174d489e23183d7ccd74243ba5248 [file] [log] [blame]
Christopher Ferrisb830ddf2024-03-28 11:48:08 -07001/*
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 */
7#ifndef _UAPI_XE_DRM_H_
8#define _UAPI_XE_DRM_H_
9#include "drm.h"
10#ifdef __cplusplus
11extern "C" {
12#endif
13#define DRM_XE_DEVICE_QUERY 0x00
14#define DRM_XE_GEM_CREATE 0x01
15#define DRM_XE_GEM_MMAP_OFFSET 0x02
16#define DRM_XE_VM_CREATE 0x03
17#define DRM_XE_VM_DESTROY 0x04
18#define DRM_XE_VM_BIND 0x05
19#define DRM_XE_EXEC_QUEUE_CREATE 0x06
20#define DRM_XE_EXEC_QUEUE_DESTROY 0x07
21#define DRM_XE_EXEC_QUEUE_GET_PROPERTY 0x08
22#define DRM_XE_EXEC 0x09
23#define DRM_XE_WAIT_USER_FENCE 0x0a
Christopher Ferris63fcca42024-09-26 01:12:10 +000024#define DRM_XE_OBSERVATION 0x0b
Christopher Ferrisb830ddf2024-03-28 11:48:08 -070025#define DRM_IOCTL_XE_DEVICE_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_DEVICE_QUERY, struct drm_xe_device_query)
26#define DRM_IOCTL_XE_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_GEM_CREATE, struct drm_xe_gem_create)
27#define DRM_IOCTL_XE_GEM_MMAP_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_GEM_MMAP_OFFSET, struct drm_xe_gem_mmap_offset)
28#define DRM_IOCTL_XE_VM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_VM_CREATE, struct drm_xe_vm_create)
29#define DRM_IOCTL_XE_VM_DESTROY DRM_IOW(DRM_COMMAND_BASE + DRM_XE_VM_DESTROY, struct drm_xe_vm_destroy)
30#define DRM_IOCTL_XE_VM_BIND DRM_IOW(DRM_COMMAND_BASE + DRM_XE_VM_BIND, struct drm_xe_vm_bind)
31#define DRM_IOCTL_XE_EXEC_QUEUE_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_CREATE, struct drm_xe_exec_queue_create)
32#define DRM_IOCTL_XE_EXEC_QUEUE_DESTROY DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_DESTROY, struct drm_xe_exec_queue_destroy)
33#define DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_GET_PROPERTY, struct drm_xe_exec_queue_get_property)
34#define DRM_IOCTL_XE_EXEC DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC, struct drm_xe_exec)
35#define DRM_IOCTL_XE_WAIT_USER_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_WAIT_USER_FENCE, struct drm_xe_wait_user_fence)
Christopher Ferris63fcca42024-09-26 01:12:10 +000036#define DRM_IOCTL_XE_OBSERVATION DRM_IOW(DRM_COMMAND_BASE + DRM_XE_OBSERVATION, struct drm_xe_observation_param)
Christopher Ferrisb830ddf2024-03-28 11:48:08 -070037struct drm_xe_user_extension {
38 __u64 next_extension;
39 __u32 name;
40 __u32 pad;
41};
42struct drm_xe_ext_set_property {
43 struct drm_xe_user_extension base;
44 __u32 property;
45 __u32 pad;
46 __u64 value;
47 __u64 reserved[2];
48};
49struct drm_xe_engine_class_instance {
50#define DRM_XE_ENGINE_CLASS_RENDER 0
51#define DRM_XE_ENGINE_CLASS_COPY 1
52#define DRM_XE_ENGINE_CLASS_VIDEO_DECODE 2
53#define DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE 3
54#define DRM_XE_ENGINE_CLASS_COMPUTE 4
55#define DRM_XE_ENGINE_CLASS_VM_BIND 5
56 __u16 engine_class;
57 __u16 engine_instance;
58 __u16 gt_id;
59 __u16 pad;
60};
61struct drm_xe_engine {
62 struct drm_xe_engine_class_instance instance;
63 __u64 reserved[3];
64};
65struct drm_xe_query_engines {
66 __u32 num_engines;
67 __u32 pad;
68 struct drm_xe_engine engines[];
69};
70enum drm_xe_memory_class {
71 DRM_XE_MEM_REGION_CLASS_SYSMEM = 0,
72 DRM_XE_MEM_REGION_CLASS_VRAM
73};
74struct drm_xe_mem_region {
75 __u16 mem_class;
76 __u16 instance;
77 __u32 min_page_size;
78 __u64 total_size;
79 __u64 used;
80 __u64 cpu_visible_size;
81 __u64 cpu_visible_used;
82 __u64 reserved[6];
83};
84struct drm_xe_query_mem_regions {
85 __u32 num_mem_regions;
86 __u32 pad;
87 struct drm_xe_mem_region mem_regions[];
88};
89struct drm_xe_query_config {
90 __u32 num_params;
91 __u32 pad;
92#define DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID 0
93#define DRM_XE_QUERY_CONFIG_FLAGS 1
94#define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM (1 << 0)
95#define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT 2
96#define DRM_XE_QUERY_CONFIG_VA_BITS 3
97#define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY 4
98 __u64 info[];
99};
100struct drm_xe_gt {
101#define DRM_XE_QUERY_GT_TYPE_MAIN 0
102#define DRM_XE_QUERY_GT_TYPE_MEDIA 1
103 __u16 type;
104 __u16 tile_id;
105 __u16 gt_id;
106 __u16 pad[3];
107 __u32 reference_clock;
108 __u64 near_mem_regions;
109 __u64 far_mem_regions;
Christopher Ferris7ac54f52024-08-07 21:07:12 +0000110 __u16 ip_ver_major;
111 __u16 ip_ver_minor;
112 __u16 ip_ver_rev;
113 __u16 pad2;
114 __u64 reserved[7];
Christopher Ferrisb830ddf2024-03-28 11:48:08 -0700115};
116struct drm_xe_query_gt_list {
117 __u32 num_gt;
118 __u32 pad;
119 struct drm_xe_gt gt_list[];
120};
121struct drm_xe_query_topology_mask {
122 __u16 gt_id;
Christopher Ferris7ac54f52024-08-07 21:07:12 +0000123#define DRM_XE_TOPO_DSS_GEOMETRY 1
124#define DRM_XE_TOPO_DSS_COMPUTE 2
Christopher Ferris63fcca42024-09-26 01:12:10 +0000125#define DRM_XE_TOPO_L3_BANK 3
Christopher Ferris7ac54f52024-08-07 21:07:12 +0000126#define DRM_XE_TOPO_EU_PER_DSS 4
Christopher Ferrisb830ddf2024-03-28 11:48:08 -0700127 __u16 type;
128 __u32 num_bytes;
129 __u8 mask[];
130};
131struct drm_xe_query_engine_cycles {
132 struct drm_xe_engine_class_instance eci;
133 __s32 clockid;
134 __u32 width;
135 __u64 engine_cycles;
136 __u64 cpu_timestamp;
137 __u64 cpu_delta;
138};
Christopher Ferris7f4c8372024-06-03 14:22:19 -0700139struct drm_xe_query_uc_fw_version {
140#define XE_QUERY_UC_TYPE_GUC_SUBMISSION 0
Christopher Ferris7ac54f52024-08-07 21:07:12 +0000141#define XE_QUERY_UC_TYPE_HUC 1
Christopher Ferris7f4c8372024-06-03 14:22:19 -0700142 __u16 uc_type;
143 __u16 pad;
144 __u32 branch_ver;
145 __u32 major_ver;
146 __u32 minor_ver;
147 __u32 patch_ver;
148 __u32 pad2;
149 __u64 reserved;
150};
Christopher Ferrisb830ddf2024-03-28 11:48:08 -0700151struct drm_xe_device_query {
152 __u64 extensions;
153#define DRM_XE_DEVICE_QUERY_ENGINES 0
154#define DRM_XE_DEVICE_QUERY_MEM_REGIONS 1
155#define DRM_XE_DEVICE_QUERY_CONFIG 2
156#define DRM_XE_DEVICE_QUERY_GT_LIST 3
157#define DRM_XE_DEVICE_QUERY_HWCONFIG 4
158#define DRM_XE_DEVICE_QUERY_GT_TOPOLOGY 5
159#define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
Christopher Ferris7f4c8372024-06-03 14:22:19 -0700160#define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
Christopher Ferris63fcca42024-09-26 01:12:10 +0000161#define DRM_XE_DEVICE_QUERY_OA_UNITS 8
Christopher Ferrisb830ddf2024-03-28 11:48:08 -0700162 __u32 query;
163 __u32 size;
164 __u64 data;
165 __u64 reserved[2];
166};
167struct drm_xe_gem_create {
168 __u64 extensions;
169 __u64 size;
170 __u32 placement;
171#define DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING (1 << 0)
172#define DRM_XE_GEM_CREATE_FLAG_SCANOUT (1 << 1)
173#define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM (1 << 2)
174 __u32 flags;
175 __u32 vm_id;
176 __u32 handle;
177#define DRM_XE_GEM_CPU_CACHING_WB 1
178#define DRM_XE_GEM_CPU_CACHING_WC 2
179 __u16 cpu_caching;
180 __u16 pad[3];
181 __u64 reserved[2];
182};
183struct drm_xe_gem_mmap_offset {
184 __u64 extensions;
185 __u32 handle;
186 __u32 flags;
187 __u64 offset;
188 __u64 reserved[2];
189};
190struct drm_xe_vm_create {
191 __u64 extensions;
192#define DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE (1 << 0)
193#define DRM_XE_VM_CREATE_FLAG_LR_MODE (1 << 1)
194#define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 2)
195 __u32 flags;
196 __u32 vm_id;
197 __u64 reserved[2];
198};
199struct drm_xe_vm_destroy {
200 __u32 vm_id;
201 __u32 pad;
202 __u64 reserved[2];
203};
204struct drm_xe_vm_bind_op {
205 __u64 extensions;
206 __u32 obj;
207 __u16 pat_index;
208 __u16 pad;
209 union {
210 __u64 obj_offset;
211 __u64 userptr;
212 };
213 __u64 range;
214 __u64 addr;
215#define DRM_XE_VM_BIND_OP_MAP 0x0
216#define DRM_XE_VM_BIND_OP_UNMAP 0x1
217#define DRM_XE_VM_BIND_OP_MAP_USERPTR 0x2
218#define DRM_XE_VM_BIND_OP_UNMAP_ALL 0x3
219#define DRM_XE_VM_BIND_OP_PREFETCH 0x4
220 __u32 op;
Christopher Ferris7ac54f52024-08-07 21:07:12 +0000221#define DRM_XE_VM_BIND_FLAG_READONLY (1 << 0)
222#define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1)
Christopher Ferrisb830ddf2024-03-28 11:48:08 -0700223#define DRM_XE_VM_BIND_FLAG_NULL (1 << 2)
224#define DRM_XE_VM_BIND_FLAG_DUMPABLE (1 << 3)
225 __u32 flags;
226 __u32 prefetch_mem_region_instance;
227 __u32 pad2;
228 __u64 reserved[3];
229};
230struct drm_xe_vm_bind {
231 __u64 extensions;
232 __u32 vm_id;
233 __u32 exec_queue_id;
234 __u32 pad;
235 __u32 num_binds;
236 union {
237 struct drm_xe_vm_bind_op bind;
238 __u64 vector_of_binds;
239 };
240 __u32 pad2;
241 __u32 num_syncs;
242 __u64 syncs;
243 __u64 reserved[2];
244};
245struct drm_xe_exec_queue_create {
246#define DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY 0
247#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0
248#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1
249 __u64 extensions;
250 __u16 width;
251 __u16 num_placements;
252 __u32 vm_id;
253 __u32 flags;
254 __u32 exec_queue_id;
255 __u64 instances;
256 __u64 reserved[2];
257};
258struct drm_xe_exec_queue_destroy {
259 __u32 exec_queue_id;
260 __u32 pad;
261 __u64 reserved[2];
262};
263struct drm_xe_exec_queue_get_property {
264 __u64 extensions;
265 __u32 exec_queue_id;
266#define DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN 0
267 __u32 property;
268 __u64 value;
269 __u64 reserved[2];
270};
271struct drm_xe_sync {
272 __u64 extensions;
273#define DRM_XE_SYNC_TYPE_SYNCOBJ 0x0
274#define DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ 0x1
275#define DRM_XE_SYNC_TYPE_USER_FENCE 0x2
276 __u32 type;
277#define DRM_XE_SYNC_FLAG_SIGNAL (1 << 0)
278 __u32 flags;
279 union {
280 __u32 handle;
281 __u64 addr;
282 };
283 __u64 timeline_value;
284 __u64 reserved[2];
285};
286struct drm_xe_exec {
287 __u64 extensions;
288 __u32 exec_queue_id;
289 __u32 num_syncs;
290 __u64 syncs;
291 __u64 address;
292 __u16 num_batch_buffer;
293 __u16 pad[3];
294 __u64 reserved[2];
295};
296struct drm_xe_wait_user_fence {
297 __u64 extensions;
298 __u64 addr;
299#define DRM_XE_UFENCE_WAIT_OP_EQ 0x0
300#define DRM_XE_UFENCE_WAIT_OP_NEQ 0x1
301#define DRM_XE_UFENCE_WAIT_OP_GT 0x2
302#define DRM_XE_UFENCE_WAIT_OP_GTE 0x3
303#define DRM_XE_UFENCE_WAIT_OP_LT 0x4
304#define DRM_XE_UFENCE_WAIT_OP_LTE 0x5
305 __u16 op;
306#define DRM_XE_UFENCE_WAIT_FLAG_ABSTIME (1 << 0)
307 __u16 flags;
308 __u32 pad;
309 __u64 value;
310 __u64 mask;
311 __s64 timeout;
312 __u32 exec_queue_id;
313 __u32 pad2;
314 __u64 reserved[2];
315};
Christopher Ferris63fcca42024-09-26 01:12:10 +0000316enum drm_xe_observation_type {
317 DRM_XE_OBSERVATION_TYPE_OA,
318};
319enum drm_xe_observation_op {
320 DRM_XE_OBSERVATION_OP_STREAM_OPEN,
321 DRM_XE_OBSERVATION_OP_ADD_CONFIG,
322 DRM_XE_OBSERVATION_OP_REMOVE_CONFIG,
323};
324struct drm_xe_observation_param {
325 __u64 extensions;
326 __u64 observation_type;
327 __u64 observation_op;
328 __u64 param;
329};
330enum drm_xe_observation_ioctls {
331 DRM_XE_OBSERVATION_IOCTL_ENABLE = _IO('i', 0x0),
332 DRM_XE_OBSERVATION_IOCTL_DISABLE = _IO('i', 0x1),
333 DRM_XE_OBSERVATION_IOCTL_CONFIG = _IO('i', 0x2),
334 DRM_XE_OBSERVATION_IOCTL_STATUS = _IO('i', 0x3),
335 DRM_XE_OBSERVATION_IOCTL_INFO = _IO('i', 0x4),
336};
337enum drm_xe_oa_unit_type {
338 DRM_XE_OA_UNIT_TYPE_OAG,
339 DRM_XE_OA_UNIT_TYPE_OAM,
340};
341struct drm_xe_oa_unit {
342 __u64 extensions;
343 __u32 oa_unit_id;
344 __u32 oa_unit_type;
345 __u64 capabilities;
346#define DRM_XE_OA_CAPS_BASE (1 << 0)
347 __u64 oa_timestamp_freq;
348 __u64 reserved[4];
349 __u64 num_engines;
350 struct drm_xe_engine_class_instance eci[];
351};
352struct drm_xe_query_oa_units {
353 __u64 extensions;
354 __u32 num_oa_units;
355 __u32 pad;
356 __u64 oa_units[];
357};
358enum drm_xe_oa_format_type {
359 DRM_XE_OA_FMT_TYPE_OAG,
360 DRM_XE_OA_FMT_TYPE_OAR,
361 DRM_XE_OA_FMT_TYPE_OAM,
362 DRM_XE_OA_FMT_TYPE_OAC,
363 DRM_XE_OA_FMT_TYPE_OAM_MPEC,
364 DRM_XE_OA_FMT_TYPE_PEC,
365};
366enum drm_xe_oa_property_id {
367#define DRM_XE_OA_EXTENSION_SET_PROPERTY 0
368 DRM_XE_OA_PROPERTY_OA_UNIT_ID = 1,
369 DRM_XE_OA_PROPERTY_SAMPLE_OA,
370 DRM_XE_OA_PROPERTY_OA_METRIC_SET,
371 DRM_XE_OA_PROPERTY_OA_FORMAT,
372#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE (0xffu << 0)
373#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL (0xffu << 8)
374#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE (0xffu << 16)
375#define DRM_XE_OA_FORMAT_MASK_BC_REPORT (0xffu << 24)
376 DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT,
377 DRM_XE_OA_PROPERTY_OA_DISABLED,
378 DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID,
379 DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE,
380 DRM_XE_OA_PROPERTY_NO_PREEMPT,
381};
382struct drm_xe_oa_config {
383 __u64 extensions;
384 char uuid[36];
385 __u32 n_regs;
386 __u64 regs_ptr;
387};
388struct drm_xe_oa_stream_status {
389 __u64 extensions;
390 __u64 oa_status;
391#define DRM_XE_OASTATUS_MMIO_TRG_Q_FULL (1 << 3)
392#define DRM_XE_OASTATUS_COUNTER_OVERFLOW (1 << 2)
393#define DRM_XE_OASTATUS_BUFFER_OVERFLOW (1 << 1)
394#define DRM_XE_OASTATUS_REPORT_LOST (1 << 0)
395 __u64 reserved[3];
396};
397struct drm_xe_oa_stream_info {
398 __u64 extensions;
399 __u64 oa_buf_size;
400 __u64 reserved[3];
401};
Christopher Ferrisb830ddf2024-03-28 11:48:08 -0700402#ifdef __cplusplus
403}
404#endif
405#endif