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