• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 _MSM_KGSL_H
8 #define _MSM_KGSL_H
9 #include <linux/types.h>
10 #include <linux/ioctl.h>
11 #define KGSL_VERSION_MAJOR 3
12 #define KGSL_VERSION_MINOR 14
13 #define KGSL_CONTEXT_SAVE_GMEM 0x00000001
14 #define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002
15 #define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004
16 #define KGSL_CONTEXT_CTX_SWITCH 0x00000008
17 #define KGSL_CONTEXT_PREAMBLE 0x00000010
18 #define KGSL_CONTEXT_TRASH_STATE 0x00000020
19 #define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040
20 #define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080
21 #define KGSL_CONTEXT_END_OF_FRAME 0x00000100
22 #define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200
23 #define KGSL_CONTEXT_SYNC 0x00000400
24 #define KGSL_CONTEXT_PWR_CONSTRAINT 0x00000800
25 #define KGSL_CONTEXT_PRIORITY_MASK 0x0000F000
26 #define KGSL_CONTEXT_PRIORITY_SHIFT 12
27 #define KGSL_CONTEXT_PRIORITY_UNDEF 0
28 #define KGSL_CONTEXT_IFH_NOP 0x00010000
29 #define KGSL_CONTEXT_SECURE 0x00020000
30 #define KGSL_CONTEXT_NO_SNAPSHOT 0x00040000
31 #define KGSL_CONTEXT_SPARSE 0x00080000
32 #define KGSL_CONTEXT_PREEMPT_STYLE_MASK 0x0E000000
33 #define KGSL_CONTEXT_PREEMPT_STYLE_SHIFT 25
34 #define KGSL_CONTEXT_PREEMPT_STYLE_DEFAULT 0x0
35 #define KGSL_CONTEXT_PREEMPT_STYLE_RINGBUFFER 0x1
36 #define KGSL_CONTEXT_PREEMPT_STYLE_FINEGRAIN 0x2
37 #define KGSL_CONTEXT_TYPE_MASK 0x01F00000
38 #define KGSL_CONTEXT_TYPE_SHIFT 20
39 #define KGSL_CONTEXT_TYPE_ANY 0
40 #define KGSL_CONTEXT_TYPE_GL 1
41 #define KGSL_CONTEXT_TYPE_CL 2
42 #define KGSL_CONTEXT_TYPE_C2D 3
43 #define KGSL_CONTEXT_TYPE_RS 4
44 #define KGSL_CONTEXT_TYPE_VK 5
45 #define KGSL_CONTEXT_TYPE_UNKNOWN 0x1E
46 #define KGSL_CONTEXT_INVALIDATE_ON_FAULT 0x10000000
47 #define KGSL_CONTEXT_INVALID 0xffffffff
48 #define KGSL_CMDBATCH_MEMLIST 0x00000001
49 #define KGSL_CMDBATCH_MARKER 0x00000002
50 #define KGSL_CMDBATCH_SUBMIT_IB_LIST KGSL_CONTEXT_SUBMIT_IB_LIST
51 #define KGSL_CMDBATCH_CTX_SWITCH KGSL_CONTEXT_CTX_SWITCH
52 #define KGSL_CMDBATCH_PROFILING 0x00000010
53 #define KGSL_CMDBATCH_PROFILING_KTIME 0x00000020
54 #define KGSL_CMDBATCH_END_OF_FRAME KGSL_CONTEXT_END_OF_FRAME
55 #define KGSL_CMDBATCH_SYNC KGSL_CONTEXT_SYNC
56 #define KGSL_CMDBATCH_PWR_CONSTRAINT KGSL_CONTEXT_PWR_CONSTRAINT
57 #define KGSL_CMDBATCH_SPARSE 0x1000
58 #define KGSL_CMDLIST_IB 0x00000001U
59 #define KGSL_CMDLIST_CTXTSWITCH_PREAMBLE 0x00000002U
60 #define KGSL_CMDLIST_IB_PREAMBLE 0x00000004U
61 #define KGSL_OBJLIST_MEMOBJ 0x00000008U
62 #define KGSL_OBJLIST_PROFILE 0x00000010U
63 #define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0
64 #define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1
65 #define KGSL_CMD_SYNCPOINT_TYPE_TIMELINE 2
66 #define KGSL_MEMFLAGS_SECURE 0x00000008ULL
67 #define KGSL_MEMFLAGS_GPUREADONLY 0x01000000U
68 #define KGSL_MEMFLAGS_GPUWRITEONLY 0x02000000U
69 #define KGSL_MEMFLAGS_FORCE_32BIT 0x100000000ULL
70 #define KGSL_SPARSE_BIND_MULTIPLE_TO_PHYS 0x400000000ULL
71 #define KGSL_SPARSE_BIND 0x1ULL
72 #define KGSL_SPARSE_UNBIND 0x2ULL
73 #define KGSL_CACHEMODE_MASK 0x0C000000U
74 #define KGSL_CACHEMODE_SHIFT 26
75 #define KGSL_CACHEMODE_WRITECOMBINE 0
76 #define KGSL_CACHEMODE_UNCACHED 1
77 #define KGSL_CACHEMODE_WRITETHROUGH 2
78 #define KGSL_CACHEMODE_WRITEBACK 3
79 #define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000ULL
80 #define KGSL_MEMFLAGS_SPARSE_PHYS 0x20000000ULL
81 #define KGSL_MEMFLAGS_SPARSE_VIRT 0x40000000ULL
82 #define KGSL_MEMFLAGS_IOCOHERENT 0x80000000ULL
83 #define KGSL_MEMTYPE_MASK 0x0000FF00
84 #define KGSL_MEMTYPE_SHIFT 8
85 #define KGSL_MEMTYPE_OBJECTANY 0
86 #define KGSL_MEMTYPE_FRAMEBUFFER 1
87 #define KGSL_MEMTYPE_RENDERBUFFER 2
88 #define KGSL_MEMTYPE_ARRAYBUFFER 3
89 #define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4
90 #define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5
91 #define KGSL_MEMTYPE_TEXTURE 6
92 #define KGSL_MEMTYPE_SURFACE 7
93 #define KGSL_MEMTYPE_EGL_SURFACE 8
94 #define KGSL_MEMTYPE_GL 9
95 #define KGSL_MEMTYPE_CL 10
96 #define KGSL_MEMTYPE_CL_BUFFER_MAP 11
97 #define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12
98 #define KGSL_MEMTYPE_CL_IMAGE_MAP 13
99 #define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14
100 #define KGSL_MEMTYPE_CL_KERNEL_STACK 15
101 #define KGSL_MEMTYPE_COMMAND 16
102 #define KGSL_MEMTYPE_2D 17
103 #define KGSL_MEMTYPE_EGL_IMAGE 18
104 #define KGSL_MEMTYPE_EGL_SHADOW 19
105 #define KGSL_MEMTYPE_MULTISAMPLE 20
106 #define KGSL_MEMTYPE_KERNEL 255
107 #define KGSL_MEMALIGN_MASK 0x00FF0000
108 #define KGSL_MEMALIGN_SHIFT 16
109 enum kgsl_user_mem_type {
110   KGSL_USER_MEM_TYPE_PMEM = 0x00000000,
111   KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001,
112   KGSL_USER_MEM_TYPE_ADDR = 0x00000002,
113   KGSL_USER_MEM_TYPE_ION = 0x00000003,
114   KGSL_USER_MEM_TYPE_DMABUF = 0x00000003,
115   KGSL_USER_MEM_TYPE_MAX = 0x00000007,
116 };
117 #define KGSL_MEMFLAGS_USERMEM_MASK 0x000000e0
118 #define KGSL_MEMFLAGS_USERMEM_SHIFT 5
119 #define KGSL_USERMEM_FLAG(x) (((x) + 1) << KGSL_MEMFLAGS_USERMEM_SHIFT)
120 #define KGSL_MEMFLAGS_NOT_USERMEM 0
121 #define KGSL_MEMFLAGS_USERMEM_PMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_PMEM)
122 #define KGSL_MEMFLAGS_USERMEM_ASHMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ASHMEM)
123 #define KGSL_MEMFLAGS_USERMEM_ADDR KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ADDR)
124 #define KGSL_MEMFLAGS_USERMEM_ION KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ION)
125 #define KGSL_FLAGS_NORMALMODE 0x00000000
126 #define KGSL_FLAGS_SAFEMODE 0x00000001
127 #define KGSL_FLAGS_INITIALIZED0 0x00000002
128 #define KGSL_FLAGS_INITIALIZED 0x00000004
129 #define KGSL_FLAGS_STARTED 0x00000008
130 #define KGSL_FLAGS_ACTIVE 0x00000010
131 #define KGSL_FLAGS_RESERVED0 0x00000020
132 #define KGSL_FLAGS_RESERVED1 0x00000040
133 #define KGSL_FLAGS_RESERVED2 0x00000080
134 #define KGSL_FLAGS_SOFT_RESET 0x00000100
135 #define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200
136 #define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000
137 #define KGSL_UBWC_NONE 0
138 #define KGSL_UBWC_1_0 1
139 #define KGSL_UBWC_2_0 2
140 #define KGSL_UBWC_3_0 3
141 #define KGSL_UBWC_4_0 4
142 enum kgsl_ctx_reset_stat {
143   KGSL_CTX_STAT_NO_ERROR = 0x00000000,
144   KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001,
145   KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002,
146   KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003
147 };
148 #define KGSL_CONVERT_TO_MBPS(val) (val * 1000 * 1000U)
149 struct kgsl_devinfo {
150   unsigned int device_id;
151   unsigned int chip_id;
152   unsigned int mmu_enabled;
153   unsigned long gmem_gpubaseaddr;
154   unsigned int gpu_id;
155   size_t gmem_sizebytes;
156 };
157 struct kgsl_devmemstore {
158   __volatile__ unsigned int soptimestamp;
159   unsigned int sbz;
160   __volatile__ unsigned int eoptimestamp;
161   unsigned int sbz2;
162   __volatile__ unsigned int preempted;
163   unsigned int sbz3;
164   __volatile__ unsigned int ref_wait_ts;
165   unsigned int sbz4;
166   unsigned int current_context;
167   unsigned int sbz5;
168 };
169 #define KGSL_MEMSTORE_OFFSET(ctxt_id,field) ((ctxt_id) * sizeof(struct kgsl_devmemstore) + offsetof(struct kgsl_devmemstore, field))
170 enum kgsl_timestamp_type {
171   KGSL_TIMESTAMP_CONSUMED = 0x00000001,
172   KGSL_TIMESTAMP_RETIRED = 0x00000002,
173   KGSL_TIMESTAMP_QUEUED = 0x00000003,
174 };
175 #define KGSL_PROP_DEVICE_INFO 0x1
176 #define KGSL_PROP_DEVICE_SHADOW 0x2
177 #define KGSL_PROP_DEVICE_POWER 0x3
178 #define KGSL_PROP_SHMEM 0x4
179 #define KGSL_PROP_SHMEM_APERTURES 0x5
180 #define KGSL_PROP_MMU_ENABLE 0x6
181 #define KGSL_PROP_INTERRUPT_WAITS 0x7
182 #define KGSL_PROP_VERSION 0x8
183 #define KGSL_PROP_GPU_RESET_STAT 0x9
184 #define KGSL_PROP_PWRCTRL 0xE
185 #define KGSL_PROP_PWR_CONSTRAINT 0x12
186 #define KGSL_PROP_UCHE_GMEM_VADDR 0x13
187 #define KGSL_PROP_SP_GENERIC_MEM 0x14
188 #define KGSL_PROP_UCODE_VERSION 0x15
189 #define KGSL_PROP_GPMU_VERSION 0x16
190 #define KGSL_PROP_HIGHEST_BANK_BIT 0x17
191 #define KGSL_PROP_DEVICE_BITNESS 0x18
192 #define KGSL_PROP_DEVICE_QDSS_STM 0x19
193 #define KGSL_PROP_MIN_ACCESS_LENGTH 0x1A
194 #define KGSL_PROP_UBWC_MODE 0x1B
195 #define KGSL_PROP_DEVICE_QTIMER 0x20
196 #define KGSL_PROP_L3_PWR_CONSTRAINT 0x22
197 #define KGSL_PROP_SECURE_BUFFER_ALIGNMENT 0x23
198 #define KGSL_PROP_SECURE_CTXT_SUPPORT 0x24
199 #define KGSL_PROP_SPEED_BIN 0x25
200 #define KGSL_PROP_GAMING_BIN 0x26
201 #define KGSL_PROP_QUERY_CAPABILITIES 0x27
202 #define KGSL_PROP_CONTEXT_PROPERTY 0x28
203 struct kgsl_capabilities_properties {
204   __u64 list;
205   __u32 count;
206 };
207 #define KGSL_QUERY_CAPS_PROPERTIES 1
208 struct kgsl_capabilities {
209   __u64 data;
210   __u64 size;
211   __u32 querytype;
212 };
213 struct kgsl_shadowprop {
214   unsigned long gpuaddr;
215   size_t size;
216   unsigned int flags;
217 };
218 struct kgsl_qdss_stm_prop {
219   uint64_t gpuaddr;
220   uint64_t size;
221 };
222 struct kgsl_qtimer_prop {
223   uint64_t gpuaddr;
224   uint64_t size;
225 };
226 struct kgsl_version {
227   unsigned int drv_major;
228   unsigned int drv_minor;
229   unsigned int dev_major;
230   unsigned int dev_minor;
231 };
232 struct kgsl_sp_generic_mem {
233   uint64_t local;
234   uint64_t pvt;
235 };
236 struct kgsl_ucode_version {
237   unsigned int pfp;
238   unsigned int pm4;
239 };
240 struct kgsl_gpmu_version {
241   unsigned int major;
242   unsigned int minor;
243   unsigned int features;
244 };
245 struct kgsl_context_property {
246   __u64 data;
247   __u32 size;
248   __u32 type;
249   __u32 contextid;
250 };
251 struct kgsl_context_property_fault {
252   __s32 faults;
253   __u32 timestamp;
254 };
255 #define KGSL_CONTEXT_PROP_FAULTS 1
256 #define KGSL_PERFCOUNTER_GROUP_CP 0x0
257 #define KGSL_PERFCOUNTER_GROUP_RBBM 0x1
258 #define KGSL_PERFCOUNTER_GROUP_PC 0x2
259 #define KGSL_PERFCOUNTER_GROUP_VFD 0x3
260 #define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4
261 #define KGSL_PERFCOUNTER_GROUP_VPC 0x5
262 #define KGSL_PERFCOUNTER_GROUP_TSE 0x6
263 #define KGSL_PERFCOUNTER_GROUP_RAS 0x7
264 #define KGSL_PERFCOUNTER_GROUP_UCHE 0x8
265 #define KGSL_PERFCOUNTER_GROUP_TP 0x9
266 #define KGSL_PERFCOUNTER_GROUP_SP 0xA
267 #define KGSL_PERFCOUNTER_GROUP_RB 0xB
268 #define KGSL_PERFCOUNTER_GROUP_PWR 0xC
269 #define KGSL_PERFCOUNTER_GROUP_VBIF 0xD
270 #define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE
271 #define KGSL_PERFCOUNTER_GROUP_MH 0xF
272 #define KGSL_PERFCOUNTER_GROUP_PA_SU 0x10
273 #define KGSL_PERFCOUNTER_GROUP_SQ 0x11
274 #define KGSL_PERFCOUNTER_GROUP_SX 0x12
275 #define KGSL_PERFCOUNTER_GROUP_TCF 0x13
276 #define KGSL_PERFCOUNTER_GROUP_TCM 0x14
277 #define KGSL_PERFCOUNTER_GROUP_TCR 0x15
278 #define KGSL_PERFCOUNTER_GROUP_L2 0x16
279 #define KGSL_PERFCOUNTER_GROUP_VSC 0x17
280 #define KGSL_PERFCOUNTER_GROUP_CCU 0x18
281 #define KGSL_PERFCOUNTER_GROUP_LRZ 0x19
282 #define KGSL_PERFCOUNTER_GROUP_CMP 0x1A
283 #define KGSL_PERFCOUNTER_GROUP_ALWAYSON 0x1B
284 #define KGSL_PERFCOUNTER_GROUP_SP_PWR 0x1C
285 #define KGSL_PERFCOUNTER_GROUP_TP_PWR 0x1D
286 #define KGSL_PERFCOUNTER_GROUP_RB_PWR 0x1E
287 #define KGSL_PERFCOUNTER_GROUP_CCU_PWR 0x1F
288 #define KGSL_PERFCOUNTER_GROUP_UCHE_PWR 0x20
289 #define KGSL_PERFCOUNTER_GROUP_CP_PWR 0x21
290 #define KGSL_PERFCOUNTER_GROUP_GPMU_PWR 0x22
291 #define KGSL_PERFCOUNTER_GROUP_ALWAYSON_PWR 0x23
292 #define KGSL_PERFCOUNTER_GROUP_GLC 0x24
293 #define KGSL_PERFCOUNTER_GROUP_FCHE 0x25
294 #define KGSL_PERFCOUNTER_GROUP_MHUB 0x26
295 #define KGSL_PERFCOUNTER_GROUP_MAX 0x27
296 #define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF
297 #define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE
298 struct kgsl_ibdesc {
299   unsigned long gpuaddr;
300   unsigned long __pad;
301   size_t sizedwords;
302   unsigned int ctrl;
303 };
304 struct kgsl_cmdbatch_profiling_buffer {
305   uint64_t wall_clock_s;
306   uint64_t wall_clock_ns;
307   uint64_t gpu_ticks_queued;
308   uint64_t gpu_ticks_submitted;
309   uint64_t gpu_ticks_retired;
310 };
311 #define KGSL_IOC_TYPE 0x09
312 struct kgsl_device_getproperty {
313   unsigned int type;
314   void * value;
315   size_t sizebytes;
316 };
317 #define IOCTL_KGSL_DEVICE_GETPROPERTY _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty)
318 struct kgsl_device_waittimestamp {
319   unsigned int timestamp;
320   unsigned int timeout;
321 };
322 #define IOCTL_KGSL_DEVICE_WAITTIMESTAMP _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp)
323 struct kgsl_device_waittimestamp_ctxtid {
324   unsigned int context_id;
325   unsigned int timestamp;
326   unsigned int timeout;
327 };
328 #define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid)
329 struct kgsl_ringbuffer_issueibcmds {
330   unsigned int drawctxt_id;
331   unsigned long ibdesc_addr;
332   unsigned int numibs;
333   unsigned int timestamp;
334   unsigned int flags;
335 };
336 #define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds)
337 struct kgsl_cmdstream_readtimestamp {
338   unsigned int type;
339   unsigned int timestamp;
340 };
341 #define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
342 #define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
343 struct kgsl_cmdstream_freememontimestamp {
344   unsigned long gpuaddr;
345   unsigned int type;
346   unsigned int timestamp;
347 };
348 #define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
349 #define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
350 struct kgsl_drawctxt_create {
351   unsigned int flags;
352   unsigned int drawctxt_id;
353 };
354 #define IOCTL_KGSL_DRAWCTXT_CREATE _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create)
355 struct kgsl_drawctxt_destroy {
356   unsigned int drawctxt_id;
357 };
358 #define IOCTL_KGSL_DRAWCTXT_DESTROY _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy)
359 struct kgsl_map_user_mem {
360   int fd;
361   unsigned long gpuaddr;
362   size_t len;
363   size_t offset;
364   unsigned long hostptr;
365   enum kgsl_user_mem_type memtype;
366   unsigned int flags;
367 };
368 #define IOCTL_KGSL_MAP_USER_MEM _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem)
369 struct kgsl_cmdstream_readtimestamp_ctxtid {
370   unsigned int context_id;
371   unsigned int type;
372   unsigned int timestamp;
373 };
374 #define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid)
375 struct kgsl_cmdstream_freememontimestamp_ctxtid {
376   unsigned int context_id;
377   unsigned long gpuaddr;
378   unsigned int type;
379   unsigned int timestamp;
380 };
381 #define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID _IOW(KGSL_IOC_TYPE, 0x17, struct kgsl_cmdstream_freememontimestamp_ctxtid)
382 struct kgsl_sharedmem_from_pmem {
383   int pmem_fd;
384   unsigned long gpuaddr;
385   unsigned int len;
386   unsigned int offset;
387 };
388 #define IOCTL_KGSL_SHAREDMEM_FROM_PMEM _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem)
389 struct kgsl_sharedmem_free {
390   unsigned long gpuaddr;
391 };
392 #define IOCTL_KGSL_SHAREDMEM_FREE _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free)
393 struct kgsl_cff_user_event {
394   unsigned char cff_opcode;
395   unsigned int op1;
396   unsigned int op2;
397   unsigned int op3;
398   unsigned int op4;
399   unsigned int op5;
400   unsigned int __pad[2];
401 };
402 #define IOCTL_KGSL_CFF_USER_EVENT _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event)
403 struct kgsl_gmem_desc {
404   unsigned int x;
405   unsigned int y;
406   unsigned int width;
407   unsigned int height;
408   unsigned int pitch;
409 };
410 struct kgsl_buffer_desc {
411   void * hostptr;
412   unsigned long gpuaddr;
413   int size;
414   unsigned int format;
415   unsigned int pitch;
416   unsigned int enabled;
417 };
418 struct kgsl_bind_gmem_shadow {
419   unsigned int drawctxt_id;
420   struct kgsl_gmem_desc gmem_desc;
421   unsigned int shadow_x;
422   unsigned int shadow_y;
423   struct kgsl_buffer_desc shadow_buffer;
424   unsigned int buffer_id;
425 };
426 #define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow)
427 struct kgsl_sharedmem_from_vmalloc {
428   unsigned long gpuaddr;
429   unsigned int hostptr;
430   unsigned int flags;
431 };
432 #define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc)
433 #define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free)
434 struct kgsl_drawctxt_set_bin_base_offset {
435   unsigned int drawctxt_id;
436   unsigned int offset;
437 };
438 #define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset)
439 enum kgsl_cmdwindow_type {
440   KGSL_CMDWINDOW_MIN = 0x00000000,
441   KGSL_CMDWINDOW_2D = 0x00000000,
442   KGSL_CMDWINDOW_3D = 0x00000001,
443   KGSL_CMDWINDOW_MMU = 0x00000002,
444   KGSL_CMDWINDOW_ARBITER = 0x000000FF,
445   KGSL_CMDWINDOW_MAX = 0x000000FF,
446 };
447 struct kgsl_cmdwindow_write {
448   enum kgsl_cmdwindow_type target;
449   unsigned int addr;
450   unsigned int data;
451 };
452 #define IOCTL_KGSL_CMDWINDOW_WRITE _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write)
453 struct kgsl_gpumem_alloc {
454   unsigned long gpuaddr;
455   size_t size;
456   unsigned int flags;
457 };
458 #define IOCTL_KGSL_GPUMEM_ALLOC _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc)
459 struct kgsl_cff_syncmem {
460   unsigned long gpuaddr;
461   size_t len;
462   unsigned int __pad[2];
463 };
464 #define IOCTL_KGSL_CFF_SYNCMEM _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem)
465 struct kgsl_timestamp_event {
466   int type;
467   unsigned int timestamp;
468   unsigned int context_id;
469   void * priv;
470   size_t len;
471 };
472 #define IOCTL_KGSL_TIMESTAMP_EVENT_OLD _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event)
473 #define KGSL_TIMESTAMP_EVENT_GENLOCK 1
474 struct kgsl_timestamp_event_genlock {
475   int handle;
476 };
477 #define KGSL_TIMESTAMP_EVENT_FENCE 2
478 struct kgsl_timestamp_event_fence {
479   int fence_fd;
480 };
481 #define IOCTL_KGSL_SETPROPERTY _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty)
482 #define IOCTL_KGSL_TIMESTAMP_EVENT _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event)
483 struct kgsl_gpumem_alloc_id {
484   unsigned int id;
485   unsigned int flags;
486   size_t size;
487   size_t mmapsize;
488   unsigned long gpuaddr;
489   unsigned long __pad[2];
490 };
491 #define IOCTL_KGSL_GPUMEM_ALLOC_ID _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id)
492 struct kgsl_gpumem_free_id {
493   unsigned int id;
494   unsigned int __pad;
495 };
496 #define IOCTL_KGSL_GPUMEM_FREE_ID _IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id)
497 struct kgsl_gpumem_get_info {
498   unsigned long gpuaddr;
499   unsigned int id;
500   unsigned int flags;
501   size_t size;
502   size_t mmapsize;
503   unsigned long useraddr;
504   unsigned long __pad[4];
505 };
506 #define IOCTL_KGSL_GPUMEM_GET_INFO _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info)
507 struct kgsl_gpumem_sync_cache {
508   unsigned long gpuaddr;
509   unsigned int id;
510   unsigned int op;
511   size_t offset;
512   size_t length;
513 };
514 #define KGSL_GPUMEM_CACHE_CLEAN (1 << 0)
515 #define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN
516 #define KGSL_GPUMEM_CACHE_INV (1 << 1)
517 #define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV
518 #define KGSL_GPUMEM_CACHE_FLUSH (KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV)
519 #define KGSL_GPUMEM_CACHE_RANGE (1 << 31U)
520 #define IOCTL_KGSL_GPUMEM_SYNC_CACHE _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache)
521 struct kgsl_perfcounter_get {
522   unsigned int groupid;
523   unsigned int countable;
524   unsigned int offset;
525   unsigned int offset_hi;
526   unsigned int __pad;
527 };
528 #define IOCTL_KGSL_PERFCOUNTER_GET _IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get)
529 struct kgsl_perfcounter_put {
530   unsigned int groupid;
531   unsigned int countable;
532   unsigned int __pad[2];
533 };
534 #define IOCTL_KGSL_PERFCOUNTER_PUT _IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put)
535 struct kgsl_perfcounter_query {
536   unsigned int groupid;
537   unsigned int * countables;
538   unsigned int count;
539   unsigned int max_counters;
540   unsigned int __pad[2];
541 };
542 #define IOCTL_KGSL_PERFCOUNTER_QUERY _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query)
543 struct kgsl_perfcounter_read_group {
544   unsigned int groupid;
545   unsigned int countable;
546   unsigned long long value;
547 };
548 struct kgsl_perfcounter_read {
549   struct kgsl_perfcounter_read_group * reads;
550   unsigned int count;
551   unsigned int __pad[2];
552 };
553 #define IOCTL_KGSL_PERFCOUNTER_READ _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read)
554 struct kgsl_gpumem_sync_cache_bulk {
555   unsigned int * id_list;
556   unsigned int count;
557   unsigned int op;
558   unsigned int __pad[2];
559 };
560 #define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk)
561 struct kgsl_cmd_syncpoint_timestamp {
562   unsigned int context_id;
563   unsigned int timestamp;
564 };
565 struct kgsl_cmd_syncpoint_fence {
566   int fd;
567 };
568 struct kgsl_cmd_syncpoint_timeline {
569   __u64 timelines;
570   __u32 count;
571   __u32 timelines_size;
572 };
573 struct kgsl_cmd_syncpoint {
574   int type;
575   void * priv;
576   size_t size;
577 };
578 #define KGSL_IBDESC_MEMLIST 0x1
579 #define KGSL_IBDESC_PROFILING_BUFFER 0x2
580 struct kgsl_submit_commands {
581   unsigned int context_id;
582   unsigned int flags;
583   struct kgsl_ibdesc * cmdlist;
584   unsigned int numcmds;
585   struct kgsl_cmd_syncpoint * synclist;
586   unsigned int numsyncs;
587   unsigned int timestamp;
588   unsigned int __pad[4];
589 };
590 #define IOCTL_KGSL_SUBMIT_COMMANDS _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands)
591 struct kgsl_device_constraint {
592   unsigned int type;
593   unsigned int context_id;
594   void * data;
595   size_t size;
596 };
597 #define KGSL_CONSTRAINT_NONE 0
598 #define KGSL_CONSTRAINT_PWRLEVEL 1
599 #define KGSL_CONSTRAINT_L3_NONE 2
600 #define KGSL_CONSTRAINT_L3_PWRLEVEL 3
601 #define KGSL_CONSTRAINT_PWR_MIN 0
602 #define KGSL_CONSTRAINT_PWR_MAX 1
603 struct kgsl_device_constraint_pwrlevel {
604   unsigned int level;
605 };
606 struct kgsl_syncsource_create {
607   unsigned int id;
608   unsigned int __pad[3];
609 };
610 #define IOCTL_KGSL_SYNCSOURCE_CREATE _IOWR(KGSL_IOC_TYPE, 0x40, struct kgsl_syncsource_create)
611 struct kgsl_syncsource_destroy {
612   unsigned int id;
613   unsigned int __pad[3];
614 };
615 #define IOCTL_KGSL_SYNCSOURCE_DESTROY _IOWR(KGSL_IOC_TYPE, 0x41, struct kgsl_syncsource_destroy)
616 struct kgsl_syncsource_create_fence {
617   unsigned int id;
618   int fence_fd;
619   unsigned int __pad[4];
620 };
621 #define IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE _IOWR(KGSL_IOC_TYPE, 0x42, struct kgsl_syncsource_create_fence)
622 struct kgsl_syncsource_signal_fence {
623   unsigned int id;
624   int fence_fd;
625   unsigned int __pad[4];
626 };
627 #define IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE _IOWR(KGSL_IOC_TYPE, 0x43, struct kgsl_syncsource_signal_fence)
628 struct kgsl_cff_sync_gpuobj {
629   uint64_t offset;
630   uint64_t length;
631   unsigned int id;
632 };
633 #define IOCTL_KGSL_CFF_SYNC_GPUOBJ _IOW(KGSL_IOC_TYPE, 0x44, struct kgsl_cff_sync_gpuobj)
634 struct kgsl_gpuobj_alloc {
635   uint64_t size;
636   uint64_t flags;
637   uint64_t va_len;
638   uint64_t mmapsize;
639   unsigned int id;
640   unsigned int metadata_len;
641   uint64_t metadata;
642 };
643 #define KGSL_GPUOBJ_ALLOC_METADATA_MAX 64
644 #define IOCTL_KGSL_GPUOBJ_ALLOC _IOWR(KGSL_IOC_TYPE, 0x45, struct kgsl_gpuobj_alloc)
645 struct kgsl_gpuobj_free {
646   uint64_t flags;
647   uint64_t priv;
648   unsigned int id;
649   unsigned int type;
650   unsigned int len;
651 };
652 #define KGSL_GPUOBJ_FREE_ON_EVENT 1
653 #define KGSL_GPU_EVENT_TIMESTAMP 1
654 #define KGSL_GPU_EVENT_FENCE 2
655 struct kgsl_gpu_event_timestamp {
656   unsigned int context_id;
657   unsigned int timestamp;
658 };
659 struct kgsl_gpu_event_fence {
660   int fd;
661 };
662 #define IOCTL_KGSL_GPUOBJ_FREE _IOW(KGSL_IOC_TYPE, 0x46, struct kgsl_gpuobj_free)
663 struct kgsl_gpuobj_info {
664   uint64_t gpuaddr;
665   uint64_t flags;
666   uint64_t size;
667   uint64_t va_len;
668   uint64_t va_addr;
669   unsigned int id;
670 };
671 #define IOCTL_KGSL_GPUOBJ_INFO _IOWR(KGSL_IOC_TYPE, 0x47, struct kgsl_gpuobj_info)
672 struct kgsl_gpuobj_import {
673   uint64_t priv;
674   uint64_t priv_len;
675   uint64_t flags;
676   unsigned int type;
677   unsigned int id;
678 };
679 struct kgsl_gpuobj_import_dma_buf {
680   int fd;
681 };
682 struct kgsl_gpuobj_import_useraddr {
683   uint64_t virtaddr;
684 };
685 #define IOCTL_KGSL_GPUOBJ_IMPORT _IOWR(KGSL_IOC_TYPE, 0x48, struct kgsl_gpuobj_import)
686 struct kgsl_gpuobj_sync_obj {
687   uint64_t offset;
688   uint64_t length;
689   unsigned int id;
690   unsigned int op;
691 };
692 struct kgsl_gpuobj_sync {
693   uint64_t objs;
694   unsigned int obj_len;
695   unsigned int count;
696 };
697 #define IOCTL_KGSL_GPUOBJ_SYNC _IOW(KGSL_IOC_TYPE, 0x49, struct kgsl_gpuobj_sync)
698 struct kgsl_command_object {
699   uint64_t offset;
700   uint64_t gpuaddr;
701   uint64_t size;
702   unsigned int flags;
703   unsigned int id;
704 };
705 struct kgsl_command_syncpoint {
706   uint64_t priv;
707   uint64_t size;
708   unsigned int type;
709 };
710 struct kgsl_gpu_command {
711   uint64_t flags;
712   uint64_t cmdlist;
713   unsigned int cmdsize;
714   unsigned int numcmds;
715   uint64_t objlist;
716   unsigned int objsize;
717   unsigned int numobjs;
718   uint64_t synclist;
719   unsigned int syncsize;
720   unsigned int numsyncs;
721   unsigned int context_id;
722   unsigned int timestamp;
723 };
724 #define IOCTL_KGSL_GPU_COMMAND _IOWR(KGSL_IOC_TYPE, 0x4A, struct kgsl_gpu_command)
725 struct kgsl_preemption_counters_query {
726   uint64_t counters;
727   unsigned int size_user;
728   unsigned int size_priority_level;
729   unsigned int max_priority_level;
730 };
731 #define IOCTL_KGSL_PREEMPTIONCOUNTER_QUERY _IOWR(KGSL_IOC_TYPE, 0x4B, struct kgsl_preemption_counters_query)
732 #define KGSL_GPUOBJ_SET_INFO_METADATA (1 << 0)
733 #define KGSL_GPUOBJ_SET_INFO_TYPE (1 << 1)
734 struct kgsl_gpuobj_set_info {
735   uint64_t flags;
736   uint64_t metadata;
737   unsigned int id;
738   unsigned int metadata_len;
739   unsigned int type;
740 };
741 #define IOCTL_KGSL_GPUOBJ_SET_INFO _IOW(KGSL_IOC_TYPE, 0x4C, struct kgsl_gpuobj_set_info)
742 struct kgsl_sparse_phys_alloc {
743   uint64_t size;
744   uint64_t pagesize;
745   uint64_t flags;
746   unsigned int id;
747 };
748 #define IOCTL_KGSL_SPARSE_PHYS_ALLOC _IOWR(KGSL_IOC_TYPE, 0x50, struct kgsl_sparse_phys_alloc)
749 struct kgsl_sparse_phys_free {
750   unsigned int id;
751 };
752 #define IOCTL_KGSL_SPARSE_PHYS_FREE _IOW(KGSL_IOC_TYPE, 0x51, struct kgsl_sparse_phys_free)
753 struct kgsl_sparse_virt_alloc {
754   uint64_t size;
755   uint64_t pagesize;
756   uint64_t flags;
757   uint64_t gpuaddr;
758   unsigned int id;
759 };
760 #define IOCTL_KGSL_SPARSE_VIRT_ALLOC _IOWR(KGSL_IOC_TYPE, 0x52, struct kgsl_sparse_virt_alloc)
761 struct kgsl_sparse_virt_free {
762   unsigned int id;
763 };
764 #define IOCTL_KGSL_SPARSE_VIRT_FREE _IOW(KGSL_IOC_TYPE, 0x53, struct kgsl_sparse_virt_free)
765 struct kgsl_sparse_binding_object {
766   uint64_t virtoffset;
767   uint64_t physoffset;
768   uint64_t size;
769   uint64_t flags;
770   unsigned int id;
771 };
772 struct kgsl_sparse_bind {
773   uint64_t list;
774   unsigned int id;
775   unsigned int size;
776   unsigned int count;
777 };
778 #define IOCTL_KGSL_SPARSE_BIND _IOW(KGSL_IOC_TYPE, 0x54, struct kgsl_sparse_bind)
779 struct kgsl_gpu_sparse_command {
780   uint64_t flags;
781   uint64_t sparselist;
782   uint64_t synclist;
783   unsigned int sparsesize;
784   unsigned int numsparse;
785   unsigned int syncsize;
786   unsigned int numsyncs;
787   unsigned int context_id;
788   unsigned int timestamp;
789   unsigned int id;
790 };
791 #define IOCTL_KGSL_GPU_SPARSE_COMMAND _IOWR(KGSL_IOC_TYPE, 0x55, struct kgsl_gpu_sparse_command)
792 #define KGSL_GPU_AUX_COMMAND_TIMELINE (1 << 1)
793 #define KGSL_GPU_AUX_COMMAND_SYNC KGSL_CMDBATCH_SYNC
794 struct kgsl_gpu_aux_command_generic {
795   __u64 priv;
796   __u64 size;
797   __u32 type;
798   __u32 padding;
799 };
800 struct kgsl_gpu_aux_command {
801   __u64 flags;
802   __u64 cmdlist;
803   __u32 cmdsize;
804   __u32 numcmds;
805   __u64 synclist;
806   __u32 syncsize;
807   __u32 numsyncs;
808   __u32 context_id;
809   __u32 timestamp;
810 };
811 #define IOCTL_KGSL_GPU_AUX_COMMAND _IOWR(KGSL_IOC_TYPE, 0x57, struct kgsl_gpu_aux_command)
812 struct kgsl_timeline_create {
813   __u64 seqno;
814   __u32 id;
815   __u32 padding;
816 };
817 #define IOCTL_KGSL_TIMELINE_CREATE _IOWR(KGSL_IOC_TYPE, 0x58, struct kgsl_timeline_create)
818 struct kgsl_timeline_val {
819   __u64 seqno;
820   __u32 timeline;
821   __u32 padding;
822 };
823 #define KGSL_TIMELINE_WAIT_ALL 1
824 #define KGSL_TIMELINE_WAIT_ANY 2
825 struct kgsl_timeline_wait {
826   __s64 tv_sec;
827   __s64 tv_nsec;
828   __u64 timelines;
829   __u32 count;
830   __u32 timelines_size;
831   __u32 flags;
832   __u32 padding;
833 };
834 #define IOCTL_KGSL_TIMELINE_WAIT _IOW(KGSL_IOC_TYPE, 0x59, struct kgsl_timeline_wait)
835 #define IOCTL_KGSL_TIMELINE_QUERY _IOWR(KGSL_IOC_TYPE, 0x5A, struct kgsl_timeline_val)
836 struct kgsl_timeline_signal {
837   __u64 timelines;
838   __u32 count;
839   __u32 timelines_size;
840 };
841 #define IOCTL_KGSL_TIMELINE_SIGNAL _IOW(KGSL_IOC_TYPE, 0x5B, struct kgsl_timeline_signal)
842 struct kgsl_timeline_fence_get {
843   __u64 seqno;
844   __u32 timeline;
845   int handle;
846 };
847 #define IOCTL_KGSL_TIMELINE_FENCE_GET _IOWR(KGSL_IOC_TYPE, 0x5C, struct kgsl_timeline_fence_get)
848 #define IOCTL_KGSL_TIMELINE_DESTROY _IOW(KGSL_IOC_TYPE, 0x5D, __u32)
849 struct kgsl_gpu_aux_command_timeline {
850   __u64 timelines;
851   __u32 count;
852   __u32 timelines_size;
853 };
854 #endif
855