1*61046927SAndroid Build Coastguard Worker #ifndef _UAPI_MSM_KGSL_H 2*61046927SAndroid Build Coastguard Worker #define _UAPI_MSM_KGSL_H 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard Worker #include <linux/types.h> 5*61046927SAndroid Build Coastguard Worker #include <linux/ioctl.h> 6*61046927SAndroid Build Coastguard Worker 7*61046927SAndroid Build Coastguard Worker /* 8*61046927SAndroid Build Coastguard Worker * The KGSL version has proven not to be very useful in userspace if features 9*61046927SAndroid Build Coastguard Worker * are cherry picked into other trees out of order so it is frozen as of 3.14. 10*61046927SAndroid Build Coastguard Worker * It is left here for backwards compatabilty and as a reminder that 11*61046927SAndroid Build Coastguard Worker * software releases are never linear. Also, I like pie. 12*61046927SAndroid Build Coastguard Worker */ 13*61046927SAndroid Build Coastguard Worker 14*61046927SAndroid Build Coastguard Worker #define KGSL_VERSION_MAJOR 3 15*61046927SAndroid Build Coastguard Worker #define KGSL_VERSION_MINOR 14 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker /* 18*61046927SAndroid Build Coastguard Worker * We have traditionally mixed context and issueibcmds / command batch flags 19*61046927SAndroid Build Coastguard Worker * together into a big flag stew. This worked fine until we started adding a 20*61046927SAndroid Build Coastguard Worker * lot more command batch flags and we started running out of bits. Turns out 21*61046927SAndroid Build Coastguard Worker * we have a bit of room in the context type / priority mask that we could use 22*61046927SAndroid Build Coastguard Worker * for command batches, but that means we need to split out the flags into two 23*61046927SAndroid Build Coastguard Worker * coherent sets. 24*61046927SAndroid Build Coastguard Worker * 25*61046927SAndroid Build Coastguard Worker * If any future definitions are for both context and cmdbatch add both defines 26*61046927SAndroid Build Coastguard Worker * and link the cmdbatch to the context define as we do below. Otherwise feel 27*61046927SAndroid Build Coastguard Worker * free to add exclusive bits to either set. 28*61046927SAndroid Build Coastguard Worker */ 29*61046927SAndroid Build Coastguard Worker 30*61046927SAndroid Build Coastguard Worker /* --- context flags --- */ 31*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_SAVE_GMEM 0x00000001 32*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002 33*61046927SAndroid Build Coastguard Worker /* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 34*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004 35*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_CTX_SWITCH 0x00000008 36*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PREAMBLE 0x00000010 37*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TRASH_STATE 0x00000020 38*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040 39*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080 40*61046927SAndroid Build Coastguard Worker /* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 41*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_END_OF_FRAME 0x00000100 42*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200 43*61046927SAndroid Build Coastguard Worker /* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 44*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_SYNC 0x00000400 45*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PWR_CONSTRAINT 0x00000800 46*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PRIORITY_MASK 0x0000F000 47*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PRIORITY_SHIFT 12 48*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PRIORITY_UNDEF 0 49*61046927SAndroid Build Coastguard Worker 50*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_IFH_NOP 0x00010000 51*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_SECURE 0x00020000 52*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_NO_SNAPSHOT 0x00040000 53*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_SPARSE 0x00080000 54*61046927SAndroid Build Coastguard Worker 55*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PREEMPT_STYLE_MASK 0x0E000000 56*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PREEMPT_STYLE_SHIFT 25 57*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PREEMPT_STYLE_DEFAULT 0x0 58*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PREEMPT_STYLE_RINGBUFFER 0x1 59*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PREEMPT_STYLE_FINEGRAIN 0x2 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_MASK 0x01F00000 62*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_SHIFT 20 63*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_ANY 0 64*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_GL 1 65*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_CL 2 66*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_C2D 3 67*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_RS 4 68*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_VK 5 69*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_TYPE_UNKNOWN 0x1E 70*61046927SAndroid Build Coastguard Worker 71*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_INVALIDATE_ON_FAULT 0x10000000 72*61046927SAndroid Build Coastguard Worker 73*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_INVALID 0xffffffff 74*61046927SAndroid Build Coastguard Worker 75*61046927SAndroid Build Coastguard Worker /* 76*61046927SAndroid Build Coastguard Worker * --- command batch flags --- 77*61046927SAndroid Build Coastguard Worker * The bits that are linked to a KGSL_CONTEXT equivalent are either legacy 78*61046927SAndroid Build Coastguard Worker * definitions or bits that are valid for both contexts and cmdbatches. To be 79*61046927SAndroid Build Coastguard Worker * safe the other 8 bits that are still available in the context field should be 80*61046927SAndroid Build Coastguard Worker * omitted here in case we need to share - the other bits are available for 81*61046927SAndroid Build Coastguard Worker * cmdbatch only flags as needed 82*61046927SAndroid Build Coastguard Worker */ 83*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_MEMLIST 0x00000001 84*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_MARKER 0x00000002 85*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_SUBMIT_IB_LIST KGSL_CONTEXT_SUBMIT_IB_LIST /* 0x004 */ 86*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_CTX_SWITCH KGSL_CONTEXT_CTX_SWITCH /* 0x008 */ 87*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_PROFILING 0x00000010 88*61046927SAndroid Build Coastguard Worker /* 89*61046927SAndroid Build Coastguard Worker * KGSL_CMDBATCH_PROFILING must also be set for KGSL_CMDBATCH_PROFILING_KTIME 90*61046927SAndroid Build Coastguard Worker * to take effect, as the latter only affects the time data returned. 91*61046927SAndroid Build Coastguard Worker */ 92*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_PROFILING_KTIME 0x00000020 93*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_END_OF_FRAME KGSL_CONTEXT_END_OF_FRAME /* 0x100 */ 94*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_SYNC KGSL_CONTEXT_SYNC /* 0x400 */ 95*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_PWR_CONSTRAINT KGSL_CONTEXT_PWR_CONSTRAINT /* 0x800 */ 96*61046927SAndroid Build Coastguard Worker #define KGSL_CMDBATCH_SPARSE 0x1000 /* 0x1000 */ 97*61046927SAndroid Build Coastguard Worker 98*61046927SAndroid Build Coastguard Worker /* 99*61046927SAndroid Build Coastguard Worker * Reserve bits [16:19] and bits [28:31] for possible bits shared between 100*61046927SAndroid Build Coastguard Worker * contexts and command batches. Update this comment as new flags are added. 101*61046927SAndroid Build Coastguard Worker */ 102*61046927SAndroid Build Coastguard Worker 103*61046927SAndroid Build Coastguard Worker /* 104*61046927SAndroid Build Coastguard Worker * gpu_command_object flags - these flags communicate the type of command or 105*61046927SAndroid Build Coastguard Worker * memory object being submitted for a GPU command 106*61046927SAndroid Build Coastguard Worker */ 107*61046927SAndroid Build Coastguard Worker 108*61046927SAndroid Build Coastguard Worker /* Flags for GPU command objects */ 109*61046927SAndroid Build Coastguard Worker #define KGSL_CMDLIST_IB 0x00000001U 110*61046927SAndroid Build Coastguard Worker #define KGSL_CMDLIST_CTXTSWITCH_PREAMBLE 0x00000002U 111*61046927SAndroid Build Coastguard Worker #define KGSL_CMDLIST_IB_PREAMBLE 0x00000004U 112*61046927SAndroid Build Coastguard Worker 113*61046927SAndroid Build Coastguard Worker /* Flags for GPU command memory objects */ 114*61046927SAndroid Build Coastguard Worker #define KGSL_OBJLIST_MEMOBJ 0x00000008U 115*61046927SAndroid Build Coastguard Worker #define KGSL_OBJLIST_PROFILE 0x00000010U 116*61046927SAndroid Build Coastguard Worker 117*61046927SAndroid Build Coastguard Worker /* Flags for GPU command sync points */ 118*61046927SAndroid Build Coastguard Worker #define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0 119*61046927SAndroid Build Coastguard Worker #define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1 120*61046927SAndroid Build Coastguard Worker 121*61046927SAndroid Build Coastguard Worker /* --- Memory allocation flags --- */ 122*61046927SAndroid Build Coastguard Worker 123*61046927SAndroid Build Coastguard Worker /* General allocation hints */ 124*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_SECURE 0x00000008ULL 125*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_GPUREADONLY 0x01000000U 126*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_GPUWRITEONLY 0x02000000U 127*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_FORCE_32BIT 0x100000000ULL 128*61046927SAndroid Build Coastguard Worker 129*61046927SAndroid Build Coastguard Worker /* Flag for binding all the virt range to single phys data */ 130*61046927SAndroid Build Coastguard Worker #define KGSL_SPARSE_BIND_MULTIPLE_TO_PHYS 0x400000000ULL 131*61046927SAndroid Build Coastguard Worker #define KGSL_SPARSE_BIND 0x1ULL 132*61046927SAndroid Build Coastguard Worker #define KGSL_SPARSE_UNBIND 0x2ULL 133*61046927SAndroid Build Coastguard Worker 134*61046927SAndroid Build Coastguard Worker /* Memory caching hints */ 135*61046927SAndroid Build Coastguard Worker #define KGSL_CACHEMODE_MASK 0x0C000000U 136*61046927SAndroid Build Coastguard Worker #define KGSL_CACHEMODE_SHIFT 26 137*61046927SAndroid Build Coastguard Worker 138*61046927SAndroid Build Coastguard Worker #define KGSL_CACHEMODE_WRITECOMBINE 0 139*61046927SAndroid Build Coastguard Worker #define KGSL_CACHEMODE_UNCACHED 1 140*61046927SAndroid Build Coastguard Worker #define KGSL_CACHEMODE_WRITETHROUGH 2 141*61046927SAndroid Build Coastguard Worker #define KGSL_CACHEMODE_WRITEBACK 3 142*61046927SAndroid Build Coastguard Worker 143*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000ULL 144*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_SPARSE_PHYS 0x20000000ULL 145*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_SPARSE_VIRT 0x40000000ULL 146*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_IOCOHERENT 0x80000000ULL 147*61046927SAndroid Build Coastguard Worker 148*61046927SAndroid Build Coastguard Worker /* Memory types for which allocations are made */ 149*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_MASK 0x0000FF00 150*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_SHIFT 8 151*61046927SAndroid Build Coastguard Worker 152*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_OBJECTANY 0 153*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_FRAMEBUFFER 1 154*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_RENDERBUFFER 2 155*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_ARRAYBUFFER 3 156*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4 157*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5 158*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_TEXTURE 6 159*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_SURFACE 7 160*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_EGL_SURFACE 8 161*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_GL 9 162*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_CL 10 163*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_CL_BUFFER_MAP 11 164*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12 165*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_CL_IMAGE_MAP 13 166*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14 167*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_CL_KERNEL_STACK 15 168*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_COMMAND 16 169*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_2D 17 170*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_EGL_IMAGE 18 171*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_EGL_SHADOW 19 172*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_MULTISAMPLE 20 173*61046927SAndroid Build Coastguard Worker #define KGSL_MEMTYPE_KERNEL 255 174*61046927SAndroid Build Coastguard Worker 175*61046927SAndroid Build Coastguard Worker /* 176*61046927SAndroid Build Coastguard Worker * Alignment hint, passed as the power of 2 exponent. 177*61046927SAndroid Build Coastguard Worker * i.e 4k (2^12) would be 12, 64k (2^16)would be 16. 178*61046927SAndroid Build Coastguard Worker */ 179*61046927SAndroid Build Coastguard Worker #define KGSL_MEMALIGN_MASK 0x00FF0000 180*61046927SAndroid Build Coastguard Worker #define KGSL_MEMALIGN_SHIFT 16 181*61046927SAndroid Build Coastguard Worker 182*61046927SAndroid Build Coastguard Worker enum kgsl_user_mem_type { 183*61046927SAndroid Build Coastguard Worker KGSL_USER_MEM_TYPE_PMEM = 0x00000000, 184*61046927SAndroid Build Coastguard Worker KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001, 185*61046927SAndroid Build Coastguard Worker KGSL_USER_MEM_TYPE_ADDR = 0x00000002, 186*61046927SAndroid Build Coastguard Worker KGSL_USER_MEM_TYPE_ION = 0x00000003, 187*61046927SAndroid Build Coastguard Worker /* 188*61046927SAndroid Build Coastguard Worker * ION type is retained for backwards compatibility but Ion buffers are 189*61046927SAndroid Build Coastguard Worker * dma-bufs so try to use that naming if we can 190*61046927SAndroid Build Coastguard Worker */ 191*61046927SAndroid Build Coastguard Worker KGSL_USER_MEM_TYPE_DMABUF = 0x00000003, 192*61046927SAndroid Build Coastguard Worker KGSL_USER_MEM_TYPE_MAX = 0x00000007, 193*61046927SAndroid Build Coastguard Worker }; 194*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_USERMEM_MASK 0x000000e0 195*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_USERMEM_SHIFT 5 196*61046927SAndroid Build Coastguard Worker 197*61046927SAndroid Build Coastguard Worker /* 198*61046927SAndroid Build Coastguard Worker * Unfortunately, enum kgsl_user_mem_type starts at 0 which does not 199*61046927SAndroid Build Coastguard Worker * leave a good value for allocated memory. In the flags we use 200*61046927SAndroid Build Coastguard Worker * 0 to indicate allocated memory and thus need to add 1 to the enum 201*61046927SAndroid Build Coastguard Worker * values. 202*61046927SAndroid Build Coastguard Worker */ 203*61046927SAndroid Build Coastguard Worker #define KGSL_USERMEM_FLAG(x) (((x) + 1) << KGSL_MEMFLAGS_USERMEM_SHIFT) 204*61046927SAndroid Build Coastguard Worker 205*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_NOT_USERMEM 0 206*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_USERMEM_PMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_PMEM) 207*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_USERMEM_ASHMEM \ 208*61046927SAndroid Build Coastguard Worker KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ASHMEM) 209*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_USERMEM_ADDR KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ADDR) 210*61046927SAndroid Build Coastguard Worker #define KGSL_MEMFLAGS_USERMEM_ION KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ION) 211*61046927SAndroid Build Coastguard Worker 212*61046927SAndroid Build Coastguard Worker /* --- generic KGSL flag values --- */ 213*61046927SAndroid Build Coastguard Worker 214*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_NORMALMODE 0x00000000 215*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_SAFEMODE 0x00000001 216*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_INITIALIZED0 0x00000002 217*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_INITIALIZED 0x00000004 218*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_STARTED 0x00000008 219*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_ACTIVE 0x00000010 220*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_RESERVED0 0x00000020 221*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_RESERVED1 0x00000040 222*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_RESERVED2 0x00000080 223*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_SOFT_RESET 0x00000100 224*61046927SAndroid Build Coastguard Worker #define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200 225*61046927SAndroid Build Coastguard Worker 226*61046927SAndroid Build Coastguard Worker /* Server Side Sync Timeout in milliseconds */ 227*61046927SAndroid Build Coastguard Worker #define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000 228*61046927SAndroid Build Coastguard Worker 229*61046927SAndroid Build Coastguard Worker /* UBWC Modes */ 230*61046927SAndroid Build Coastguard Worker #define KGSL_UBWC_NONE 0 231*61046927SAndroid Build Coastguard Worker #define KGSL_UBWC_1_0 1 232*61046927SAndroid Build Coastguard Worker #define KGSL_UBWC_2_0 2 233*61046927SAndroid Build Coastguard Worker #define KGSL_UBWC_3_0 3 234*61046927SAndroid Build Coastguard Worker #define KGSL_UBWC_4_0 4 235*61046927SAndroid Build Coastguard Worker 236*61046927SAndroid Build Coastguard Worker /* 237*61046927SAndroid Build Coastguard Worker * Reset status values for context 238*61046927SAndroid Build Coastguard Worker */ 239*61046927SAndroid Build Coastguard Worker enum kgsl_ctx_reset_stat { 240*61046927SAndroid Build Coastguard Worker KGSL_CTX_STAT_NO_ERROR = 0x00000000, 241*61046927SAndroid Build Coastguard Worker KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001, 242*61046927SAndroid Build Coastguard Worker KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002, 243*61046927SAndroid Build Coastguard Worker KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003 244*61046927SAndroid Build Coastguard Worker }; 245*61046927SAndroid Build Coastguard Worker 246*61046927SAndroid Build Coastguard Worker #define KGSL_CONVERT_TO_MBPS(val) \ 247*61046927SAndroid Build Coastguard Worker (val*1000*1000U) 248*61046927SAndroid Build Coastguard Worker 249*61046927SAndroid Build Coastguard Worker struct kgsl_devinfo { 250*61046927SAndroid Build Coastguard Worker 251*61046927SAndroid Build Coastguard Worker unsigned int device_id; 252*61046927SAndroid Build Coastguard Worker /* 253*61046927SAndroid Build Coastguard Worker * chip revision id 254*61046927SAndroid Build Coastguard Worker * coreid:8 majorrev:8 minorrev:8 patch:8 255*61046927SAndroid Build Coastguard Worker */ 256*61046927SAndroid Build Coastguard Worker unsigned int chip_id; 257*61046927SAndroid Build Coastguard Worker unsigned int mmu_enabled; 258*61046927SAndroid Build Coastguard Worker unsigned long gmem_gpubaseaddr; 259*61046927SAndroid Build Coastguard Worker /* 260*61046927SAndroid Build Coastguard Worker * This field contains the adreno revision 261*61046927SAndroid Build Coastguard Worker * number 200, 205, 220, etc... 262*61046927SAndroid Build Coastguard Worker */ 263*61046927SAndroid Build Coastguard Worker unsigned int gpu_id; 264*61046927SAndroid Build Coastguard Worker size_t gmem_sizebytes; 265*61046927SAndroid Build Coastguard Worker }; 266*61046927SAndroid Build Coastguard Worker 267*61046927SAndroid Build Coastguard Worker /* 268*61046927SAndroid Build Coastguard Worker * struct kgsl_devmemstore - this structure defines the region of memory 269*61046927SAndroid Build Coastguard Worker * that can be mmap()ed from this driver. The timestamp fields are __volatile__ 270*61046927SAndroid Build Coastguard Worker * because they are written by the GPU 271*61046927SAndroid Build Coastguard Worker * @soptimestamp: Start of pipeline timestamp written by GPU before the 272*61046927SAndroid Build Coastguard Worker * commands in concern are processed 273*61046927SAndroid Build Coastguard Worker * @sbz: Unused, kept for 8 byte alignment 274*61046927SAndroid Build Coastguard Worker * @eoptimestamp: End of pipeline timestamp written by GPU after the 275*61046927SAndroid Build Coastguard Worker * commands in concern are processed 276*61046927SAndroid Build Coastguard Worker * @sbz2: Unused, kept for 8 byte alignment 277*61046927SAndroid Build Coastguard Worker * @preempted: Indicates if the context was preempted 278*61046927SAndroid Build Coastguard Worker * @sbz3: Unused, kept for 8 byte alignment 279*61046927SAndroid Build Coastguard Worker * @ref_wait_ts: Timestamp on which to generate interrupt, unused now. 280*61046927SAndroid Build Coastguard Worker * @sbz4: Unused, kept for 8 byte alignment 281*61046927SAndroid Build Coastguard Worker * @current_context: The current context the GPU is working on 282*61046927SAndroid Build Coastguard Worker * @sbz5: Unused, kept for 8 byte alignment 283*61046927SAndroid Build Coastguard Worker */ 284*61046927SAndroid Build Coastguard Worker struct kgsl_devmemstore { 285*61046927SAndroid Build Coastguard Worker __volatile__ unsigned int soptimestamp; 286*61046927SAndroid Build Coastguard Worker unsigned int sbz; 287*61046927SAndroid Build Coastguard Worker __volatile__ unsigned int eoptimestamp; 288*61046927SAndroid Build Coastguard Worker unsigned int sbz2; 289*61046927SAndroid Build Coastguard Worker __volatile__ unsigned int preempted; 290*61046927SAndroid Build Coastguard Worker unsigned int sbz3; 291*61046927SAndroid Build Coastguard Worker __volatile__ unsigned int ref_wait_ts; 292*61046927SAndroid Build Coastguard Worker unsigned int sbz4; 293*61046927SAndroid Build Coastguard Worker unsigned int current_context; 294*61046927SAndroid Build Coastguard Worker unsigned int sbz5; 295*61046927SAndroid Build Coastguard Worker }; 296*61046927SAndroid Build Coastguard Worker 297*61046927SAndroid Build Coastguard Worker #define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \ 298*61046927SAndroid Build Coastguard Worker ((ctxt_id)*sizeof(struct kgsl_devmemstore) + \ 299*61046927SAndroid Build Coastguard Worker offsetof(struct kgsl_devmemstore, field)) 300*61046927SAndroid Build Coastguard Worker 301*61046927SAndroid Build Coastguard Worker /* timestamp id*/ 302*61046927SAndroid Build Coastguard Worker enum kgsl_timestamp_type { 303*61046927SAndroid Build Coastguard Worker KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */ 304*61046927SAndroid Build Coastguard Worker KGSL_TIMESTAMP_RETIRED = 0x00000002, /* end-of-pipeline timestamp*/ 305*61046927SAndroid Build Coastguard Worker KGSL_TIMESTAMP_QUEUED = 0x00000003, 306*61046927SAndroid Build Coastguard Worker }; 307*61046927SAndroid Build Coastguard Worker 308*61046927SAndroid Build Coastguard Worker /* property types - used with kgsl_device_getproperty */ 309*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_DEVICE_INFO 0x1 310*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_DEVICE_SHADOW 0x2 311*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_DEVICE_POWER 0x3 312*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_SHMEM 0x4 313*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_SHMEM_APERTURES 0x5 314*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_MMU_ENABLE 0x6 315*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_INTERRUPT_WAITS 0x7 316*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_VERSION 0x8 317*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_GPU_RESET_STAT 0x9 318*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_PWRCTRL 0xE 319*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_PWR_CONSTRAINT 0x12 320*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_UCHE_GMEM_VADDR 0x13 321*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_SP_GENERIC_MEM 0x14 322*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_UCODE_VERSION 0x15 323*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_GPMU_VERSION 0x16 324*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_HIGHEST_BANK_BIT 0x17 325*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_DEVICE_BITNESS 0x18 326*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_DEVICE_QDSS_STM 0x19 327*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_MIN_ACCESS_LENGTH 0x1A 328*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_UBWC_MODE 0x1B 329*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_DEVICE_QTIMER 0x20 330*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_L3_PWR_CONSTRAINT 0x22 331*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_SECURE_BUFFER_ALIGNMENT 0x23 332*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_SECURE_CTXT_SUPPORT 0x24 333*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_SPEED_BIN 0x25 334*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_GAMING_BIN 0x26 335*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_QUERY_CAPABILITIES 0x27 336*61046927SAndroid Build Coastguard Worker #define KGSL_PROP_CONTEXT_PROPERTY 0x28 337*61046927SAndroid Build Coastguard Worker 338*61046927SAndroid Build Coastguard Worker /* 339*61046927SAndroid Build Coastguard Worker * kgsl_capabilties_properties returns a list of supported properties. 340*61046927SAndroid Build Coastguard Worker * If the user passes 0 for 'count' the kernel will set it to the number of 341*61046927SAndroid Build Coastguard Worker * supported properties. The list is expected to be 'count * sizeof(uint32_t)' 342*61046927SAndroid Build Coastguard Worker * bytes long. The kernel will return the actual number of entries copied into 343*61046927SAndroid Build Coastguard Worker * list via 'count'. 344*61046927SAndroid Build Coastguard Worker */ 345*61046927SAndroid Build Coastguard Worker struct kgsl_capabilities_properties { 346*61046927SAndroid Build Coastguard Worker __u64 list; 347*61046927SAndroid Build Coastguard Worker __u32 count; 348*61046927SAndroid Build Coastguard Worker }; 349*61046927SAndroid Build Coastguard Worker 350*61046927SAndroid Build Coastguard Worker /* 351*61046927SAndroid Build Coastguard Worker * KGSL_QUERY_CAPS_PROPERTIES returns a list of the valid properties in the 352*61046927SAndroid Build Coastguard Worker * kernel. The subtype data should be struct kgsl_capabilities_properties 353*61046927SAndroid Build Coastguard Worker */ 354*61046927SAndroid Build Coastguard Worker #define KGSL_QUERY_CAPS_PROPERTIES 1 355*61046927SAndroid Build Coastguard Worker 356*61046927SAndroid Build Coastguard Worker /* 357*61046927SAndroid Build Coastguard Worker * kgsl_capabilities allows the user to query kernel capabiilties. The 'data' 358*61046927SAndroid Build Coastguard Worker * type should be set appropriately for the querytype (see above). Pass 0 to 359*61046927SAndroid Build Coastguard Worker * 'size' and the kernel will set it to the expected size of 'data' that is 360*61046927SAndroid Build Coastguard Worker * appropriate for querytype (in bytes). 361*61046927SAndroid Build Coastguard Worker */ 362*61046927SAndroid Build Coastguard Worker struct kgsl_capabilities { 363*61046927SAndroid Build Coastguard Worker __u64 data; 364*61046927SAndroid Build Coastguard Worker __u64 size; 365*61046927SAndroid Build Coastguard Worker __u32 querytype; 366*61046927SAndroid Build Coastguard Worker }; 367*61046927SAndroid Build Coastguard Worker 368*61046927SAndroid Build Coastguard Worker struct kgsl_shadowprop { 369*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 370*61046927SAndroid Build Coastguard Worker size_t size; 371*61046927SAndroid Build Coastguard Worker unsigned int flags; /* contains KGSL_FLAGS_ values */ 372*61046927SAndroid Build Coastguard Worker }; 373*61046927SAndroid Build Coastguard Worker 374*61046927SAndroid Build Coastguard Worker struct kgsl_qdss_stm_prop { 375*61046927SAndroid Build Coastguard Worker uint64_t gpuaddr; 376*61046927SAndroid Build Coastguard Worker uint64_t size; 377*61046927SAndroid Build Coastguard Worker }; 378*61046927SAndroid Build Coastguard Worker 379*61046927SAndroid Build Coastguard Worker struct kgsl_qtimer_prop { 380*61046927SAndroid Build Coastguard Worker uint64_t gpuaddr; 381*61046927SAndroid Build Coastguard Worker uint64_t size; 382*61046927SAndroid Build Coastguard Worker }; 383*61046927SAndroid Build Coastguard Worker 384*61046927SAndroid Build Coastguard Worker struct kgsl_version { 385*61046927SAndroid Build Coastguard Worker unsigned int drv_major; 386*61046927SAndroid Build Coastguard Worker unsigned int drv_minor; 387*61046927SAndroid Build Coastguard Worker unsigned int dev_major; 388*61046927SAndroid Build Coastguard Worker unsigned int dev_minor; 389*61046927SAndroid Build Coastguard Worker }; 390*61046927SAndroid Build Coastguard Worker 391*61046927SAndroid Build Coastguard Worker struct kgsl_sp_generic_mem { 392*61046927SAndroid Build Coastguard Worker uint64_t local; 393*61046927SAndroid Build Coastguard Worker uint64_t pvt; 394*61046927SAndroid Build Coastguard Worker }; 395*61046927SAndroid Build Coastguard Worker 396*61046927SAndroid Build Coastguard Worker struct kgsl_ucode_version { 397*61046927SAndroid Build Coastguard Worker unsigned int pfp; 398*61046927SAndroid Build Coastguard Worker unsigned int pm4; 399*61046927SAndroid Build Coastguard Worker }; 400*61046927SAndroid Build Coastguard Worker 401*61046927SAndroid Build Coastguard Worker struct kgsl_gpmu_version { 402*61046927SAndroid Build Coastguard Worker unsigned int major; 403*61046927SAndroid Build Coastguard Worker unsigned int minor; 404*61046927SAndroid Build Coastguard Worker unsigned int features; 405*61046927SAndroid Build Coastguard Worker }; 406*61046927SAndroid Build Coastguard Worker 407*61046927SAndroid Build Coastguard Worker struct kgsl_context_property { 408*61046927SAndroid Build Coastguard Worker __u64 data; 409*61046927SAndroid Build Coastguard Worker __u32 size; 410*61046927SAndroid Build Coastguard Worker __u32 type; 411*61046927SAndroid Build Coastguard Worker __u32 contextid; 412*61046927SAndroid Build Coastguard Worker }; 413*61046927SAndroid Build Coastguard Worker 414*61046927SAndroid Build Coastguard Worker struct kgsl_context_property_fault { 415*61046927SAndroid Build Coastguard Worker __s32 faults; 416*61046927SAndroid Build Coastguard Worker __u32 timestamp; 417*61046927SAndroid Build Coastguard Worker }; 418*61046927SAndroid Build Coastguard Worker 419*61046927SAndroid Build Coastguard Worker /* Context property sub types */ 420*61046927SAndroid Build Coastguard Worker #define KGSL_CONTEXT_PROP_FAULTS 1 421*61046927SAndroid Build Coastguard Worker 422*61046927SAndroid Build Coastguard Worker /* Performance counter groups */ 423*61046927SAndroid Build Coastguard Worker 424*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_CP 0x0 425*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_RBBM 0x1 426*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_PC 0x2 427*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_VFD 0x3 428*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4 429*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_VPC 0x5 430*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_TSE 0x6 431*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_RAS 0x7 432*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_UCHE 0x8 433*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_TP 0x9 434*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_SP 0xA 435*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_RB 0xB 436*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_PWR 0xC 437*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_VBIF 0xD 438*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE 439*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_MH 0xF 440*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_PA_SU 0x10 441*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_SQ 0x11 442*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_SX 0x12 443*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_TCF 0x13 444*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_TCM 0x14 445*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_TCR 0x15 446*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_L2 0x16 447*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_VSC 0x17 448*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_CCU 0x18 449*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_LRZ 0x19 450*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_CMP 0x1A 451*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_ALWAYSON 0x1B 452*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_SP_PWR 0x1C 453*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_TP_PWR 0x1D 454*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_RB_PWR 0x1E 455*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_CCU_PWR 0x1F 456*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_UCHE_PWR 0x20 457*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_CP_PWR 0x21 458*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_GPMU_PWR 0x22 459*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_ALWAYSON_PWR 0x23 460*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_GLC 0x24 461*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_FCHE 0x25 462*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_MHUB 0x26 463*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_GROUP_MAX 0x27 464*61046927SAndroid Build Coastguard Worker 465*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF 466*61046927SAndroid Build Coastguard Worker #define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE 467*61046927SAndroid Build Coastguard Worker 468*61046927SAndroid Build Coastguard Worker /* structure holds list of ibs */ 469*61046927SAndroid Build Coastguard Worker struct kgsl_ibdesc { 470*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 471*61046927SAndroid Build Coastguard Worker unsigned long __pad; 472*61046927SAndroid Build Coastguard Worker size_t sizedwords; 473*61046927SAndroid Build Coastguard Worker unsigned int ctrl; 474*61046927SAndroid Build Coastguard Worker }; 475*61046927SAndroid Build Coastguard Worker 476*61046927SAndroid Build Coastguard Worker /** 477*61046927SAndroid Build Coastguard Worker * struct kgsl_cmdbatch_profiling_buffer 478*61046927SAndroid Build Coastguard Worker * @wall_clock_s: Ringbuffer submission time (seconds). 479*61046927SAndroid Build Coastguard Worker * If KGSL_CMDBATCH_PROFILING_KTIME is set, time is provided 480*61046927SAndroid Build Coastguard Worker * in kernel clocks, otherwise wall clock time is used. 481*61046927SAndroid Build Coastguard Worker * @wall_clock_ns: Ringbuffer submission time (nanoseconds). 482*61046927SAndroid Build Coastguard Worker * If KGSL_CMDBATCH_PROFILING_KTIME is set time is provided 483*61046927SAndroid Build Coastguard Worker * in kernel clocks, otherwise wall clock time is used. 484*61046927SAndroid Build Coastguard Worker * @gpu_ticks_queued: GPU ticks at ringbuffer submission 485*61046927SAndroid Build Coastguard Worker * @gpu_ticks_submitted: GPU ticks when starting cmdbatch execution 486*61046927SAndroid Build Coastguard Worker * @gpu_ticks_retired: GPU ticks when finishing cmdbatch execution 487*61046927SAndroid Build Coastguard Worker * 488*61046927SAndroid Build Coastguard Worker * This structure defines the profiling buffer used to measure cmdbatch 489*61046927SAndroid Build Coastguard Worker * execution time 490*61046927SAndroid Build Coastguard Worker */ 491*61046927SAndroid Build Coastguard Worker struct kgsl_cmdbatch_profiling_buffer { 492*61046927SAndroid Build Coastguard Worker uint64_t wall_clock_s; 493*61046927SAndroid Build Coastguard Worker uint64_t wall_clock_ns; 494*61046927SAndroid Build Coastguard Worker uint64_t gpu_ticks_queued; 495*61046927SAndroid Build Coastguard Worker uint64_t gpu_ticks_submitted; 496*61046927SAndroid Build Coastguard Worker uint64_t gpu_ticks_retired; 497*61046927SAndroid Build Coastguard Worker }; 498*61046927SAndroid Build Coastguard Worker 499*61046927SAndroid Build Coastguard Worker /* ioctls */ 500*61046927SAndroid Build Coastguard Worker #define KGSL_IOC_TYPE 0x09 501*61046927SAndroid Build Coastguard Worker 502*61046927SAndroid Build Coastguard Worker /* 503*61046927SAndroid Build Coastguard Worker * get misc info about the GPU 504*61046927SAndroid Build Coastguard Worker * type should be a value from enum kgsl_property_type 505*61046927SAndroid Build Coastguard Worker * value points to a structure that varies based on type 506*61046927SAndroid Build Coastguard Worker * sizebytes is sizeof() that structure 507*61046927SAndroid Build Coastguard Worker * for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo 508*61046927SAndroid Build Coastguard Worker * this structure contaings hardware versioning info. 509*61046927SAndroid Build Coastguard Worker * for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop 510*61046927SAndroid Build Coastguard Worker * this is used to find mmap() offset and sizes for mapping 511*61046927SAndroid Build Coastguard Worker * struct kgsl_memstore into userspace. 512*61046927SAndroid Build Coastguard Worker */ 513*61046927SAndroid Build Coastguard Worker struct kgsl_device_getproperty { 514*61046927SAndroid Build Coastguard Worker unsigned int type; 515*61046927SAndroid Build Coastguard Worker void *value; 516*61046927SAndroid Build Coastguard Worker size_t sizebytes; 517*61046927SAndroid Build Coastguard Worker }; 518*61046927SAndroid Build Coastguard Worker 519*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_DEVICE_GETPROPERTY \ 520*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty) 521*61046927SAndroid Build Coastguard Worker 522*61046927SAndroid Build Coastguard Worker /* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012 523*61046927SAndroid Build Coastguard Worker */ 524*61046927SAndroid Build Coastguard Worker 525*61046927SAndroid Build Coastguard Worker /* block until the GPU has executed past a given timestamp 526*61046927SAndroid Build Coastguard Worker * timeout is in milliseconds. 527*61046927SAndroid Build Coastguard Worker */ 528*61046927SAndroid Build Coastguard Worker struct kgsl_device_waittimestamp { 529*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 530*61046927SAndroid Build Coastguard Worker unsigned int timeout; 531*61046927SAndroid Build Coastguard Worker }; 532*61046927SAndroid Build Coastguard Worker 533*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \ 534*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp) 535*61046927SAndroid Build Coastguard Worker 536*61046927SAndroid Build Coastguard Worker struct kgsl_device_waittimestamp_ctxtid { 537*61046927SAndroid Build Coastguard Worker unsigned int context_id; 538*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 539*61046927SAndroid Build Coastguard Worker unsigned int timeout; 540*61046927SAndroid Build Coastguard Worker }; 541*61046927SAndroid Build Coastguard Worker 542*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \ 543*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid) 544*61046927SAndroid Build Coastguard Worker 545*61046927SAndroid Build Coastguard Worker /* DEPRECATED: issue indirect commands to the GPU. 546*61046927SAndroid Build Coastguard Worker * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE 547*61046927SAndroid Build Coastguard Worker * ibaddr and sizedwords must specify a subset of a buffer created 548*61046927SAndroid Build Coastguard Worker * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM 549*61046927SAndroid Build Coastguard Worker * flags may be a mask of KGSL_CONTEXT_ values 550*61046927SAndroid Build Coastguard Worker * timestamp is a returned counter value which can be passed to 551*61046927SAndroid Build Coastguard Worker * other ioctls to determine when the commands have been executed by 552*61046927SAndroid Build Coastguard Worker * the GPU. 553*61046927SAndroid Build Coastguard Worker * 554*61046927SAndroid Build Coastguard Worker * This function is deprecated - consider using IOCTL_KGSL_SUBMIT_COMMANDS 555*61046927SAndroid Build Coastguard Worker * instead 556*61046927SAndroid Build Coastguard Worker */ 557*61046927SAndroid Build Coastguard Worker struct kgsl_ringbuffer_issueibcmds { 558*61046927SAndroid Build Coastguard Worker unsigned int drawctxt_id; 559*61046927SAndroid Build Coastguard Worker unsigned long ibdesc_addr; 560*61046927SAndroid Build Coastguard Worker unsigned int numibs; 561*61046927SAndroid Build Coastguard Worker unsigned int timestamp; /*output param */ 562*61046927SAndroid Build Coastguard Worker unsigned int flags; 563*61046927SAndroid Build Coastguard Worker }; 564*61046927SAndroid Build Coastguard Worker 565*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \ 566*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds) 567*61046927SAndroid Build Coastguard Worker 568*61046927SAndroid Build Coastguard Worker /* read the most recently executed timestamp value 569*61046927SAndroid Build Coastguard Worker * type should be a value from enum kgsl_timestamp_type 570*61046927SAndroid Build Coastguard Worker */ 571*61046927SAndroid Build Coastguard Worker struct kgsl_cmdstream_readtimestamp { 572*61046927SAndroid Build Coastguard Worker unsigned int type; 573*61046927SAndroid Build Coastguard Worker unsigned int timestamp; /*output param */ 574*61046927SAndroid Build Coastguard Worker }; 575*61046927SAndroid Build Coastguard Worker 576*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \ 577*61046927SAndroid Build Coastguard Worker _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 578*61046927SAndroid Build Coastguard Worker 579*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \ 580*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 581*61046927SAndroid Build Coastguard Worker 582*61046927SAndroid Build Coastguard Worker /* free memory when the GPU reaches a given timestamp. 583*61046927SAndroid Build Coastguard Worker * gpuaddr specify a memory region created by a 584*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call 585*61046927SAndroid Build Coastguard Worker * type should be a value from enum kgsl_timestamp_type 586*61046927SAndroid Build Coastguard Worker */ 587*61046927SAndroid Build Coastguard Worker struct kgsl_cmdstream_freememontimestamp { 588*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 589*61046927SAndroid Build Coastguard Worker unsigned int type; 590*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 591*61046927SAndroid Build Coastguard Worker }; 592*61046927SAndroid Build Coastguard Worker 593*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \ 594*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 595*61046927SAndroid Build Coastguard Worker 596*61046927SAndroid Build Coastguard Worker /* 597*61046927SAndroid Build Coastguard Worker * Previous versions of this header had incorrectly defined 598*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead 599*61046927SAndroid Build Coastguard Worker * of a write only ioctl. To ensure binary compatibility, the following 600*61046927SAndroid Build Coastguard Worker * #define will be used to intercept the incorrect ioctl 601*61046927SAndroid Build Coastguard Worker */ 602*61046927SAndroid Build Coastguard Worker 603*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \ 604*61046927SAndroid Build Coastguard Worker _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 605*61046927SAndroid Build Coastguard Worker 606*61046927SAndroid Build Coastguard Worker /* create a draw context, which is used to preserve GPU state. 607*61046927SAndroid Build Coastguard Worker * The flags field may contain a mask KGSL_CONTEXT_* values 608*61046927SAndroid Build Coastguard Worker */ 609*61046927SAndroid Build Coastguard Worker struct kgsl_drawctxt_create { 610*61046927SAndroid Build Coastguard Worker unsigned int flags; 611*61046927SAndroid Build Coastguard Worker unsigned int drawctxt_id; /*output param */ 612*61046927SAndroid Build Coastguard Worker }; 613*61046927SAndroid Build Coastguard Worker 614*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_DRAWCTXT_CREATE \ 615*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create) 616*61046927SAndroid Build Coastguard Worker 617*61046927SAndroid Build Coastguard Worker /* destroy a draw context */ 618*61046927SAndroid Build Coastguard Worker struct kgsl_drawctxt_destroy { 619*61046927SAndroid Build Coastguard Worker unsigned int drawctxt_id; 620*61046927SAndroid Build Coastguard Worker }; 621*61046927SAndroid Build Coastguard Worker 622*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_DRAWCTXT_DESTROY \ 623*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy) 624*61046927SAndroid Build Coastguard Worker 625*61046927SAndroid Build Coastguard Worker /* 626*61046927SAndroid Build Coastguard Worker * add a block of pmem, fb, ashmem or user allocated address 627*61046927SAndroid Build Coastguard Worker * into the GPU address space 628*61046927SAndroid Build Coastguard Worker */ 629*61046927SAndroid Build Coastguard Worker struct kgsl_map_user_mem { 630*61046927SAndroid Build Coastguard Worker int fd; 631*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; /*output param */ 632*61046927SAndroid Build Coastguard Worker size_t len; 633*61046927SAndroid Build Coastguard Worker size_t offset; 634*61046927SAndroid Build Coastguard Worker unsigned long hostptr; /*input param */ 635*61046927SAndroid Build Coastguard Worker enum kgsl_user_mem_type memtype; 636*61046927SAndroid Build Coastguard Worker unsigned int flags; 637*61046927SAndroid Build Coastguard Worker }; 638*61046927SAndroid Build Coastguard Worker 639*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_MAP_USER_MEM \ 640*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem) 641*61046927SAndroid Build Coastguard Worker 642*61046927SAndroid Build Coastguard Worker struct kgsl_cmdstream_readtimestamp_ctxtid { 643*61046927SAndroid Build Coastguard Worker unsigned int context_id; 644*61046927SAndroid Build Coastguard Worker unsigned int type; 645*61046927SAndroid Build Coastguard Worker unsigned int timestamp; /*output param */ 646*61046927SAndroid Build Coastguard Worker }; 647*61046927SAndroid Build Coastguard Worker 648*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \ 649*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid) 650*61046927SAndroid Build Coastguard Worker 651*61046927SAndroid Build Coastguard Worker struct kgsl_cmdstream_freememontimestamp_ctxtid { 652*61046927SAndroid Build Coastguard Worker unsigned int context_id; 653*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 654*61046927SAndroid Build Coastguard Worker unsigned int type; 655*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 656*61046927SAndroid Build Coastguard Worker }; 657*61046927SAndroid Build Coastguard Worker 658*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \ 659*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x17, \ 660*61046927SAndroid Build Coastguard Worker struct kgsl_cmdstream_freememontimestamp_ctxtid) 661*61046927SAndroid Build Coastguard Worker 662*61046927SAndroid Build Coastguard Worker /* add a block of pmem or fb into the GPU address space */ 663*61046927SAndroid Build Coastguard Worker struct kgsl_sharedmem_from_pmem { 664*61046927SAndroid Build Coastguard Worker int pmem_fd; 665*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; /*output param */ 666*61046927SAndroid Build Coastguard Worker unsigned int len; 667*61046927SAndroid Build Coastguard Worker unsigned int offset; 668*61046927SAndroid Build Coastguard Worker }; 669*61046927SAndroid Build Coastguard Worker 670*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \ 671*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem) 672*61046927SAndroid Build Coastguard Worker 673*61046927SAndroid Build Coastguard Worker /* remove memory from the GPU's address space */ 674*61046927SAndroid Build Coastguard Worker struct kgsl_sharedmem_free { 675*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 676*61046927SAndroid Build Coastguard Worker }; 677*61046927SAndroid Build Coastguard Worker 678*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SHAREDMEM_FREE \ 679*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free) 680*61046927SAndroid Build Coastguard Worker 681*61046927SAndroid Build Coastguard Worker struct kgsl_cff_user_event { 682*61046927SAndroid Build Coastguard Worker unsigned char cff_opcode; 683*61046927SAndroid Build Coastguard Worker unsigned int op1; 684*61046927SAndroid Build Coastguard Worker unsigned int op2; 685*61046927SAndroid Build Coastguard Worker unsigned int op3; 686*61046927SAndroid Build Coastguard Worker unsigned int op4; 687*61046927SAndroid Build Coastguard Worker unsigned int op5; 688*61046927SAndroid Build Coastguard Worker unsigned int __pad[2]; 689*61046927SAndroid Build Coastguard Worker }; 690*61046927SAndroid Build Coastguard Worker 691*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CFF_USER_EVENT \ 692*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event) 693*61046927SAndroid Build Coastguard Worker 694*61046927SAndroid Build Coastguard Worker struct kgsl_gmem_desc { 695*61046927SAndroid Build Coastguard Worker unsigned int x; 696*61046927SAndroid Build Coastguard Worker unsigned int y; 697*61046927SAndroid Build Coastguard Worker unsigned int width; 698*61046927SAndroid Build Coastguard Worker unsigned int height; 699*61046927SAndroid Build Coastguard Worker unsigned int pitch; 700*61046927SAndroid Build Coastguard Worker }; 701*61046927SAndroid Build Coastguard Worker 702*61046927SAndroid Build Coastguard Worker struct kgsl_buffer_desc { 703*61046927SAndroid Build Coastguard Worker void *hostptr; 704*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 705*61046927SAndroid Build Coastguard Worker int size; 706*61046927SAndroid Build Coastguard Worker unsigned int format; 707*61046927SAndroid Build Coastguard Worker unsigned int pitch; 708*61046927SAndroid Build Coastguard Worker unsigned int enabled; 709*61046927SAndroid Build Coastguard Worker }; 710*61046927SAndroid Build Coastguard Worker 711*61046927SAndroid Build Coastguard Worker struct kgsl_bind_gmem_shadow { 712*61046927SAndroid Build Coastguard Worker unsigned int drawctxt_id; 713*61046927SAndroid Build Coastguard Worker struct kgsl_gmem_desc gmem_desc; 714*61046927SAndroid Build Coastguard Worker unsigned int shadow_x; 715*61046927SAndroid Build Coastguard Worker unsigned int shadow_y; 716*61046927SAndroid Build Coastguard Worker struct kgsl_buffer_desc shadow_buffer; 717*61046927SAndroid Build Coastguard Worker unsigned int buffer_id; 718*61046927SAndroid Build Coastguard Worker }; 719*61046927SAndroid Build Coastguard Worker 720*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \ 721*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow) 722*61046927SAndroid Build Coastguard Worker 723*61046927SAndroid Build Coastguard Worker /* add a block of memory into the GPU address space */ 724*61046927SAndroid Build Coastguard Worker 725*61046927SAndroid Build Coastguard Worker /* 726*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012 727*61046927SAndroid Build Coastguard Worker * use IOCTL_KGSL_GPUMEM_ALLOC instead 728*61046927SAndroid Build Coastguard Worker */ 729*61046927SAndroid Build Coastguard Worker 730*61046927SAndroid Build Coastguard Worker struct kgsl_sharedmem_from_vmalloc { 731*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; /*output param */ 732*61046927SAndroid Build Coastguard Worker unsigned int hostptr; 733*61046927SAndroid Build Coastguard Worker unsigned int flags; 734*61046927SAndroid Build Coastguard Worker }; 735*61046927SAndroid Build Coastguard Worker 736*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \ 737*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc) 738*61046927SAndroid Build Coastguard Worker 739*61046927SAndroid Build Coastguard Worker /* 740*61046927SAndroid Build Coastguard Worker * This is being deprecated in favor of IOCTL_KGSL_GPUMEM_CACHE_SYNC which 741*61046927SAndroid Build Coastguard Worker * supports both directions (flush and invalidate). This code will still 742*61046927SAndroid Build Coastguard Worker * work, but by definition it will do a flush of the cache which might not be 743*61046927SAndroid Build Coastguard Worker * what you want to have happen on a buffer following a GPU operation. It is 744*61046927SAndroid Build Coastguard Worker * safer to go with IOCTL_KGSL_GPUMEM_CACHE_SYNC 745*61046927SAndroid Build Coastguard Worker */ 746*61046927SAndroid Build Coastguard Worker 747*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \ 748*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free) 749*61046927SAndroid Build Coastguard Worker 750*61046927SAndroid Build Coastguard Worker struct kgsl_drawctxt_set_bin_base_offset { 751*61046927SAndroid Build Coastguard Worker unsigned int drawctxt_id; 752*61046927SAndroid Build Coastguard Worker unsigned int offset; 753*61046927SAndroid Build Coastguard Worker }; 754*61046927SAndroid Build Coastguard Worker 755*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \ 756*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset) 757*61046927SAndroid Build Coastguard Worker 758*61046927SAndroid Build Coastguard Worker enum kgsl_cmdwindow_type { 759*61046927SAndroid Build Coastguard Worker KGSL_CMDWINDOW_MIN = 0x00000000, 760*61046927SAndroid Build Coastguard Worker KGSL_CMDWINDOW_2D = 0x00000000, 761*61046927SAndroid Build Coastguard Worker KGSL_CMDWINDOW_3D = 0x00000001, /* legacy */ 762*61046927SAndroid Build Coastguard Worker KGSL_CMDWINDOW_MMU = 0x00000002, 763*61046927SAndroid Build Coastguard Worker KGSL_CMDWINDOW_ARBITER = 0x000000FF, 764*61046927SAndroid Build Coastguard Worker KGSL_CMDWINDOW_MAX = 0x000000FF, 765*61046927SAndroid Build Coastguard Worker }; 766*61046927SAndroid Build Coastguard Worker 767*61046927SAndroid Build Coastguard Worker /* write to the command window */ 768*61046927SAndroid Build Coastguard Worker struct kgsl_cmdwindow_write { 769*61046927SAndroid Build Coastguard Worker enum kgsl_cmdwindow_type target; 770*61046927SAndroid Build Coastguard Worker unsigned int addr; 771*61046927SAndroid Build Coastguard Worker unsigned int data; 772*61046927SAndroid Build Coastguard Worker }; 773*61046927SAndroid Build Coastguard Worker 774*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CMDWINDOW_WRITE \ 775*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write) 776*61046927SAndroid Build Coastguard Worker 777*61046927SAndroid Build Coastguard Worker struct kgsl_gpumem_alloc { 778*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; /* output param */ 779*61046927SAndroid Build Coastguard Worker size_t size; 780*61046927SAndroid Build Coastguard Worker unsigned int flags; 781*61046927SAndroid Build Coastguard Worker }; 782*61046927SAndroid Build Coastguard Worker 783*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUMEM_ALLOC \ 784*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc) 785*61046927SAndroid Build Coastguard Worker 786*61046927SAndroid Build Coastguard Worker struct kgsl_cff_syncmem { 787*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 788*61046927SAndroid Build Coastguard Worker size_t len; 789*61046927SAndroid Build Coastguard Worker unsigned int __pad[2]; /* For future binary compatibility */ 790*61046927SAndroid Build Coastguard Worker }; 791*61046927SAndroid Build Coastguard Worker 792*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CFF_SYNCMEM \ 793*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem) 794*61046927SAndroid Build Coastguard Worker 795*61046927SAndroid Build Coastguard Worker /* 796*61046927SAndroid Build Coastguard Worker * A timestamp event allows the user space to register an action following an 797*61046927SAndroid Build Coastguard Worker * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to 798*61046927SAndroid Build Coastguard Worker * _IOWR to support fences which need to return a fd for the priv parameter. 799*61046927SAndroid Build Coastguard Worker */ 800*61046927SAndroid Build Coastguard Worker 801*61046927SAndroid Build Coastguard Worker struct kgsl_timestamp_event { 802*61046927SAndroid Build Coastguard Worker int type; /* Type of event (see list below) */ 803*61046927SAndroid Build Coastguard Worker unsigned int timestamp; /* Timestamp to trigger event on */ 804*61046927SAndroid Build Coastguard Worker unsigned int context_id; /* Context for the timestamp */ 805*61046927SAndroid Build Coastguard Worker void *priv; /* Pointer to the event specific blob */ 806*61046927SAndroid Build Coastguard Worker size_t len; /* Size of the event specific blob */ 807*61046927SAndroid Build Coastguard Worker }; 808*61046927SAndroid Build Coastguard Worker 809*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \ 810*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event) 811*61046927SAndroid Build Coastguard Worker 812*61046927SAndroid Build Coastguard Worker /* A genlock timestamp event releases an existing lock on timestamp expire */ 813*61046927SAndroid Build Coastguard Worker 814*61046927SAndroid Build Coastguard Worker #define KGSL_TIMESTAMP_EVENT_GENLOCK 1 815*61046927SAndroid Build Coastguard Worker 816*61046927SAndroid Build Coastguard Worker struct kgsl_timestamp_event_genlock { 817*61046927SAndroid Build Coastguard Worker int handle; /* Handle of the genlock lock to release */ 818*61046927SAndroid Build Coastguard Worker }; 819*61046927SAndroid Build Coastguard Worker 820*61046927SAndroid Build Coastguard Worker /* A fence timestamp event releases an existing lock on timestamp expire */ 821*61046927SAndroid Build Coastguard Worker 822*61046927SAndroid Build Coastguard Worker #define KGSL_TIMESTAMP_EVENT_FENCE 2 823*61046927SAndroid Build Coastguard Worker 824*61046927SAndroid Build Coastguard Worker struct kgsl_timestamp_event_fence { 825*61046927SAndroid Build Coastguard Worker int fence_fd; /* Fence to signal */ 826*61046927SAndroid Build Coastguard Worker }; 827*61046927SAndroid Build Coastguard Worker 828*61046927SAndroid Build Coastguard Worker /* 829*61046927SAndroid Build Coastguard Worker * Set a property within the kernel. Uses the same structure as 830*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_GETPROPERTY 831*61046927SAndroid Build Coastguard Worker */ 832*61046927SAndroid Build Coastguard Worker 833*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SETPROPERTY \ 834*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty) 835*61046927SAndroid Build Coastguard Worker 836*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_TIMESTAMP_EVENT \ 837*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event) 838*61046927SAndroid Build Coastguard Worker 839*61046927SAndroid Build Coastguard Worker /** 840*61046927SAndroid Build Coastguard Worker * struct kgsl_gpumem_alloc_id - argument to IOCTL_KGSL_GPUMEM_ALLOC_ID 841*61046927SAndroid Build Coastguard Worker * @id: returned id value for this allocation. 842*61046927SAndroid Build Coastguard Worker * @flags: mask of KGSL_MEM* values requested and actual flags on return. 843*61046927SAndroid Build Coastguard Worker * @size: requested size of the allocation and actual size on return. 844*61046927SAndroid Build Coastguard Worker * @mmapsize: returned size to pass to mmap() which may be larger than 'size' 845*61046927SAndroid Build Coastguard Worker * @gpuaddr: returned GPU address for the allocation 846*61046927SAndroid Build Coastguard Worker * 847*61046927SAndroid Build Coastguard Worker * Allocate memory for access by the GPU. The flags and size fields are echoed 848*61046927SAndroid Build Coastguard Worker * back by the kernel, so that the caller can know if the request was 849*61046927SAndroid Build Coastguard Worker * adjusted. 850*61046927SAndroid Build Coastguard Worker * 851*61046927SAndroid Build Coastguard Worker * Supported flags: 852*61046927SAndroid Build Coastguard Worker * KGSL_MEMFLAGS_GPUREADONLY: the GPU will be unable to write to the buffer 853*61046927SAndroid Build Coastguard Worker * KGSL_MEMTYPE*: usage hint for debugging aid 854*61046927SAndroid Build Coastguard Worker * KGSL_MEMALIGN*: alignment hint, may be ignored or adjusted by the kernel. 855*61046927SAndroid Build Coastguard Worker * KGSL_MEMFLAGS_USE_CPU_MAP: If set on call and return, the returned GPU 856*61046927SAndroid Build Coastguard Worker * address will be 0. Calling mmap() will set the GPU address. 857*61046927SAndroid Build Coastguard Worker */ 858*61046927SAndroid Build Coastguard Worker struct kgsl_gpumem_alloc_id { 859*61046927SAndroid Build Coastguard Worker unsigned int id; 860*61046927SAndroid Build Coastguard Worker unsigned int flags; 861*61046927SAndroid Build Coastguard Worker size_t size; 862*61046927SAndroid Build Coastguard Worker size_t mmapsize; 863*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 864*61046927SAndroid Build Coastguard Worker /* private: reserved for future use*/ 865*61046927SAndroid Build Coastguard Worker unsigned long __pad[2]; 866*61046927SAndroid Build Coastguard Worker }; 867*61046927SAndroid Build Coastguard Worker 868*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUMEM_ALLOC_ID \ 869*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id) 870*61046927SAndroid Build Coastguard Worker 871*61046927SAndroid Build Coastguard Worker /** 872*61046927SAndroid Build Coastguard Worker * struct kgsl_gpumem_free_id - argument to IOCTL_KGSL_GPUMEM_FREE_ID 873*61046927SAndroid Build Coastguard Worker * @id: GPU allocation id to free 874*61046927SAndroid Build Coastguard Worker * 875*61046927SAndroid Build Coastguard Worker * Free an allocation by id, in case a GPU address has not been assigned or 876*61046927SAndroid Build Coastguard Worker * is unknown. Freeing an allocation by id with this ioctl or by GPU address 877*61046927SAndroid Build Coastguard Worker * with IOCTL_KGSL_SHAREDMEM_FREE are equivalent. 878*61046927SAndroid Build Coastguard Worker */ 879*61046927SAndroid Build Coastguard Worker struct kgsl_gpumem_free_id { 880*61046927SAndroid Build Coastguard Worker unsigned int id; 881*61046927SAndroid Build Coastguard Worker /* private: reserved for future use*/ 882*61046927SAndroid Build Coastguard Worker unsigned int __pad; 883*61046927SAndroid Build Coastguard Worker }; 884*61046927SAndroid Build Coastguard Worker 885*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUMEM_FREE_ID \ 886*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id) 887*61046927SAndroid Build Coastguard Worker 888*61046927SAndroid Build Coastguard Worker /** 889*61046927SAndroid Build Coastguard Worker * struct kgsl_gpumem_get_info - argument to IOCTL_KGSL_GPUMEM_GET_INFO 890*61046927SAndroid Build Coastguard Worker * @gpuaddr: GPU address to query. Also set on return. 891*61046927SAndroid Build Coastguard Worker * @id: GPU allocation id to query. Also set on return. 892*61046927SAndroid Build Coastguard Worker * @flags: returned mask of KGSL_MEM* values. 893*61046927SAndroid Build Coastguard Worker * @size: returned size of the allocation. 894*61046927SAndroid Build Coastguard Worker * @mmapsize: returned size to pass mmap(), which may be larger than 'size' 895*61046927SAndroid Build Coastguard Worker * @useraddr: returned address of the userspace mapping for this buffer 896*61046927SAndroid Build Coastguard Worker * 897*61046927SAndroid Build Coastguard Worker * This ioctl allows querying of all user visible attributes of an existing 898*61046927SAndroid Build Coastguard Worker * allocation, by either the GPU address or the id returned by a previous 899*61046927SAndroid Build Coastguard Worker * call to IOCTL_KGSL_GPUMEM_ALLOC_ID. Legacy allocation ioctls may not 900*61046927SAndroid Build Coastguard Worker * return all attributes so this ioctl can be used to look them up if needed. 901*61046927SAndroid Build Coastguard Worker * 902*61046927SAndroid Build Coastguard Worker */ 903*61046927SAndroid Build Coastguard Worker struct kgsl_gpumem_get_info { 904*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 905*61046927SAndroid Build Coastguard Worker unsigned int id; 906*61046927SAndroid Build Coastguard Worker unsigned int flags; 907*61046927SAndroid Build Coastguard Worker size_t size; 908*61046927SAndroid Build Coastguard Worker size_t mmapsize; 909*61046927SAndroid Build Coastguard Worker unsigned long useraddr; 910*61046927SAndroid Build Coastguard Worker /* private: reserved for future use*/ 911*61046927SAndroid Build Coastguard Worker unsigned long __pad[4]; 912*61046927SAndroid Build Coastguard Worker }; 913*61046927SAndroid Build Coastguard Worker 914*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUMEM_GET_INFO\ 915*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info) 916*61046927SAndroid Build Coastguard Worker 917*61046927SAndroid Build Coastguard Worker /** 918*61046927SAndroid Build Coastguard Worker * struct kgsl_gpumem_sync_cache - argument to IOCTL_KGSL_GPUMEM_SYNC_CACHE 919*61046927SAndroid Build Coastguard Worker * @gpuaddr: GPU address of the buffer to sync. 920*61046927SAndroid Build Coastguard Worker * @id: id of the buffer to sync. Either gpuaddr or id is sufficient. 921*61046927SAndroid Build Coastguard Worker * @op: a mask of KGSL_GPUMEM_CACHE_* values 922*61046927SAndroid Build Coastguard Worker * @offset: offset into the buffer 923*61046927SAndroid Build Coastguard Worker * @length: number of bytes starting from offset to perform 924*61046927SAndroid Build Coastguard Worker * the cache operation on 925*61046927SAndroid Build Coastguard Worker * 926*61046927SAndroid Build Coastguard Worker * Sync the L2 cache for memory headed to and from the GPU - this replaces 927*61046927SAndroid Build Coastguard Worker * KGSL_SHAREDMEM_FLUSH_CACHE since it can handle cache management for both 928*61046927SAndroid Build Coastguard Worker * directions 929*61046927SAndroid Build Coastguard Worker * 930*61046927SAndroid Build Coastguard Worker */ 931*61046927SAndroid Build Coastguard Worker struct kgsl_gpumem_sync_cache { 932*61046927SAndroid Build Coastguard Worker unsigned long gpuaddr; 933*61046927SAndroid Build Coastguard Worker unsigned int id; 934*61046927SAndroid Build Coastguard Worker unsigned int op; 935*61046927SAndroid Build Coastguard Worker size_t offset; 936*61046927SAndroid Build Coastguard Worker size_t length; 937*61046927SAndroid Build Coastguard Worker }; 938*61046927SAndroid Build Coastguard Worker 939*61046927SAndroid Build Coastguard Worker #define KGSL_GPUMEM_CACHE_CLEAN (1 << 0) 940*61046927SAndroid Build Coastguard Worker #define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN 941*61046927SAndroid Build Coastguard Worker 942*61046927SAndroid Build Coastguard Worker #define KGSL_GPUMEM_CACHE_INV (1 << 1) 943*61046927SAndroid Build Coastguard Worker #define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV 944*61046927SAndroid Build Coastguard Worker 945*61046927SAndroid Build Coastguard Worker #define KGSL_GPUMEM_CACHE_FLUSH \ 946*61046927SAndroid Build Coastguard Worker (KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV) 947*61046927SAndroid Build Coastguard Worker 948*61046927SAndroid Build Coastguard Worker /* Flag to ensure backwards compatibility of kgsl_gpumem_sync_cache struct */ 949*61046927SAndroid Build Coastguard Worker #define KGSL_GPUMEM_CACHE_RANGE (1 << 31U) 950*61046927SAndroid Build Coastguard Worker 951*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUMEM_SYNC_CACHE \ 952*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache) 953*61046927SAndroid Build Coastguard Worker 954*61046927SAndroid Build Coastguard Worker /** 955*61046927SAndroid Build Coastguard Worker * struct kgsl_perfcounter_get - argument to IOCTL_KGSL_PERFCOUNTER_GET 956*61046927SAndroid Build Coastguard Worker * @groupid: Performance counter group ID 957*61046927SAndroid Build Coastguard Worker * @countable: Countable to select within the group 958*61046927SAndroid Build Coastguard Worker * @offset: Return offset of the reserved LO counter 959*61046927SAndroid Build Coastguard Worker * @offset_hi: Return offset of the reserved HI counter 960*61046927SAndroid Build Coastguard Worker * 961*61046927SAndroid Build Coastguard Worker * Get an available performance counter from a specified groupid. The offset 962*61046927SAndroid Build Coastguard Worker * of the performance counter will be returned after successfully assigning 963*61046927SAndroid Build Coastguard Worker * the countable to the counter for the specified group. An error will be 964*61046927SAndroid Build Coastguard Worker * returned and an offset of 0 if the groupid is invalid or there are no 965*61046927SAndroid Build Coastguard Worker * more counters left. After successfully getting a perfcounter, the user 966*61046927SAndroid Build Coastguard Worker * must call kgsl_perfcounter_put(groupid, contable) when finished with 967*61046927SAndroid Build Coastguard Worker * the perfcounter to clear up perfcounter resources. 968*61046927SAndroid Build Coastguard Worker * 969*61046927SAndroid Build Coastguard Worker */ 970*61046927SAndroid Build Coastguard Worker struct kgsl_perfcounter_get { 971*61046927SAndroid Build Coastguard Worker unsigned int groupid; 972*61046927SAndroid Build Coastguard Worker unsigned int countable; 973*61046927SAndroid Build Coastguard Worker unsigned int offset; 974*61046927SAndroid Build Coastguard Worker unsigned int offset_hi; 975*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 976*61046927SAndroid Build Coastguard Worker unsigned int __pad; /* For future binary compatibility */ 977*61046927SAndroid Build Coastguard Worker }; 978*61046927SAndroid Build Coastguard Worker 979*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_PERFCOUNTER_GET \ 980*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get) 981*61046927SAndroid Build Coastguard Worker 982*61046927SAndroid Build Coastguard Worker /** 983*61046927SAndroid Build Coastguard Worker * struct kgsl_perfcounter_put - argument to IOCTL_KGSL_PERFCOUNTER_PUT 984*61046927SAndroid Build Coastguard Worker * @groupid: Performance counter group ID 985*61046927SAndroid Build Coastguard Worker * @countable: Countable to release within the group 986*61046927SAndroid Build Coastguard Worker * 987*61046927SAndroid Build Coastguard Worker * Put an allocated performance counter to allow others to have access to the 988*61046927SAndroid Build Coastguard Worker * resource that was previously taken. This is only to be called after 989*61046927SAndroid Build Coastguard Worker * successfully getting a performance counter from kgsl_perfcounter_get(). 990*61046927SAndroid Build Coastguard Worker * 991*61046927SAndroid Build Coastguard Worker */ 992*61046927SAndroid Build Coastguard Worker struct kgsl_perfcounter_put { 993*61046927SAndroid Build Coastguard Worker unsigned int groupid; 994*61046927SAndroid Build Coastguard Worker unsigned int countable; 995*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 996*61046927SAndroid Build Coastguard Worker unsigned int __pad[2]; /* For future binary compatibility */ 997*61046927SAndroid Build Coastguard Worker }; 998*61046927SAndroid Build Coastguard Worker 999*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_PERFCOUNTER_PUT \ 1000*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put) 1001*61046927SAndroid Build Coastguard Worker 1002*61046927SAndroid Build Coastguard Worker /** 1003*61046927SAndroid Build Coastguard Worker * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 1004*61046927SAndroid Build Coastguard Worker * @groupid: Performance counter group ID 1005*61046927SAndroid Build Coastguard Worker * @countable: Return active countables array 1006*61046927SAndroid Build Coastguard Worker * @size: Size of active countables array 1007*61046927SAndroid Build Coastguard Worker * @max_counters: Return total number counters for the group ID 1008*61046927SAndroid Build Coastguard Worker * 1009*61046927SAndroid Build Coastguard Worker * Query the available performance counters given a groupid. The array 1010*61046927SAndroid Build Coastguard Worker * *countables is used to return the current active countables in counters. 1011*61046927SAndroid Build Coastguard Worker * The size of the array is passed in so the kernel will only write at most 1012*61046927SAndroid Build Coastguard Worker * size or counter->size for the group id. The total number of available 1013*61046927SAndroid Build Coastguard Worker * counters for the group ID is returned in max_counters. 1014*61046927SAndroid Build Coastguard Worker * If the array or size passed in are invalid, then only the maximum number 1015*61046927SAndroid Build Coastguard Worker * of counters will be returned, no data will be written to *countables. 1016*61046927SAndroid Build Coastguard Worker * If the groupid is invalid an error code will be returned. 1017*61046927SAndroid Build Coastguard Worker * 1018*61046927SAndroid Build Coastguard Worker */ 1019*61046927SAndroid Build Coastguard Worker struct kgsl_perfcounter_query { 1020*61046927SAndroid Build Coastguard Worker unsigned int groupid; 1021*61046927SAndroid Build Coastguard Worker /* Array to return the current countable for up to size counters */ 1022*61046927SAndroid Build Coastguard Worker unsigned int *countables; 1023*61046927SAndroid Build Coastguard Worker unsigned int count; 1024*61046927SAndroid Build Coastguard Worker unsigned int max_counters; 1025*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1026*61046927SAndroid Build Coastguard Worker unsigned int __pad[2]; /* For future binary compatibility */ 1027*61046927SAndroid Build Coastguard Worker }; 1028*61046927SAndroid Build Coastguard Worker 1029*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_PERFCOUNTER_QUERY \ 1030*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query) 1031*61046927SAndroid Build Coastguard Worker 1032*61046927SAndroid Build Coastguard Worker /** 1033*61046927SAndroid Build Coastguard Worker * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 1034*61046927SAndroid Build Coastguard Worker * @groupid: Performance counter group IDs 1035*61046927SAndroid Build Coastguard Worker * @countable: Performance counter countable IDs 1036*61046927SAndroid Build Coastguard Worker * @value: Return performance counter reads 1037*61046927SAndroid Build Coastguard Worker * @size: Size of all arrays (groupid/countable pair and return value) 1038*61046927SAndroid Build Coastguard Worker * 1039*61046927SAndroid Build Coastguard Worker * Read in the current value of a performance counter given by the groupid 1040*61046927SAndroid Build Coastguard Worker * and countable. 1041*61046927SAndroid Build Coastguard Worker * 1042*61046927SAndroid Build Coastguard Worker */ 1043*61046927SAndroid Build Coastguard Worker 1044*61046927SAndroid Build Coastguard Worker struct kgsl_perfcounter_read_group { 1045*61046927SAndroid Build Coastguard Worker unsigned int groupid; 1046*61046927SAndroid Build Coastguard Worker unsigned int countable; 1047*61046927SAndroid Build Coastguard Worker unsigned long long value; 1048*61046927SAndroid Build Coastguard Worker }; 1049*61046927SAndroid Build Coastguard Worker 1050*61046927SAndroid Build Coastguard Worker struct kgsl_perfcounter_read { 1051*61046927SAndroid Build Coastguard Worker struct kgsl_perfcounter_read_group *reads; 1052*61046927SAndroid Build Coastguard Worker unsigned int count; 1053*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1054*61046927SAndroid Build Coastguard Worker unsigned int __pad[2]; /* For future binary compatibility */ 1055*61046927SAndroid Build Coastguard Worker }; 1056*61046927SAndroid Build Coastguard Worker 1057*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_PERFCOUNTER_READ \ 1058*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read) 1059*61046927SAndroid Build Coastguard Worker /* 1060*61046927SAndroid Build Coastguard Worker * struct kgsl_gpumem_sync_cache_bulk - argument to 1061*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK 1062*61046927SAndroid Build Coastguard Worker * @id_list: list of GPU buffer ids of the buffers to sync 1063*61046927SAndroid Build Coastguard Worker * @count: number of GPU buffer ids in id_list 1064*61046927SAndroid Build Coastguard Worker * @op: a mask of KGSL_GPUMEM_CACHE_* values 1065*61046927SAndroid Build Coastguard Worker * 1066*61046927SAndroid Build Coastguard Worker * Sync the cache for memory headed to and from the GPU. Certain 1067*61046927SAndroid Build Coastguard Worker * optimizations can be made on the cache operation based on the total 1068*61046927SAndroid Build Coastguard Worker * size of the working set of memory to be managed. 1069*61046927SAndroid Build Coastguard Worker */ 1070*61046927SAndroid Build Coastguard Worker struct kgsl_gpumem_sync_cache_bulk { 1071*61046927SAndroid Build Coastguard Worker unsigned int *id_list; 1072*61046927SAndroid Build Coastguard Worker unsigned int count; 1073*61046927SAndroid Build Coastguard Worker unsigned int op; 1074*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1075*61046927SAndroid Build Coastguard Worker unsigned int __pad[2]; /* For future binary compatibility */ 1076*61046927SAndroid Build Coastguard Worker }; 1077*61046927SAndroid Build Coastguard Worker 1078*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK \ 1079*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk) 1080*61046927SAndroid Build Coastguard Worker 1081*61046927SAndroid Build Coastguard Worker /* 1082*61046927SAndroid Build Coastguard Worker * struct kgsl_cmd_syncpoint_timestamp 1083*61046927SAndroid Build Coastguard Worker * @context_id: ID of a KGSL context 1084*61046927SAndroid Build Coastguard Worker * @timestamp: GPU timestamp 1085*61046927SAndroid Build Coastguard Worker * 1086*61046927SAndroid Build Coastguard Worker * This structure defines a syncpoint comprising a context/timestamp pair. A 1087*61046927SAndroid Build Coastguard Worker * list of these may be passed by IOCTL_KGSL_SUBMIT_COMMANDS to define 1088*61046927SAndroid Build Coastguard Worker * dependencies that must be met before the command can be submitted to the 1089*61046927SAndroid Build Coastguard Worker * hardware 1090*61046927SAndroid Build Coastguard Worker */ 1091*61046927SAndroid Build Coastguard Worker struct kgsl_cmd_syncpoint_timestamp { 1092*61046927SAndroid Build Coastguard Worker unsigned int context_id; 1093*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 1094*61046927SAndroid Build Coastguard Worker }; 1095*61046927SAndroid Build Coastguard Worker 1096*61046927SAndroid Build Coastguard Worker struct kgsl_cmd_syncpoint_fence { 1097*61046927SAndroid Build Coastguard Worker int fd; 1098*61046927SAndroid Build Coastguard Worker }; 1099*61046927SAndroid Build Coastguard Worker 1100*61046927SAndroid Build Coastguard Worker /** 1101*61046927SAndroid Build Coastguard Worker * struct kgsl_cmd_syncpoint - Define a sync point for a command batch 1102*61046927SAndroid Build Coastguard Worker * @type: type of sync point defined here 1103*61046927SAndroid Build Coastguard Worker * @priv: Pointer to the type specific buffer 1104*61046927SAndroid Build Coastguard Worker * @size: Size of the type specific buffer 1105*61046927SAndroid Build Coastguard Worker * 1106*61046927SAndroid Build Coastguard Worker * This structure contains pointers defining a specific command sync point. 1107*61046927SAndroid Build Coastguard Worker * The pointer and size should point to a type appropriate structure. 1108*61046927SAndroid Build Coastguard Worker */ 1109*61046927SAndroid Build Coastguard Worker struct kgsl_cmd_syncpoint { 1110*61046927SAndroid Build Coastguard Worker int type; 1111*61046927SAndroid Build Coastguard Worker void *priv; 1112*61046927SAndroid Build Coastguard Worker size_t size; 1113*61046927SAndroid Build Coastguard Worker }; 1114*61046927SAndroid Build Coastguard Worker 1115*61046927SAndroid Build Coastguard Worker /* Flag to indicate that the cmdlist may contain memlists */ 1116*61046927SAndroid Build Coastguard Worker #define KGSL_IBDESC_MEMLIST 0x1 1117*61046927SAndroid Build Coastguard Worker 1118*61046927SAndroid Build Coastguard Worker /* Flag to point out the cmdbatch profiling buffer in the memlist */ 1119*61046927SAndroid Build Coastguard Worker #define KGSL_IBDESC_PROFILING_BUFFER 0x2 1120*61046927SAndroid Build Coastguard Worker 1121*61046927SAndroid Build Coastguard Worker /** 1122*61046927SAndroid Build Coastguard Worker * struct kgsl_submit_commands - Argument to IOCTL_KGSL_SUBMIT_COMMANDS 1123*61046927SAndroid Build Coastguard Worker * @context_id: KGSL context ID that owns the commands 1124*61046927SAndroid Build Coastguard Worker * @flags: 1125*61046927SAndroid Build Coastguard Worker * @cmdlist: User pointer to a list of kgsl_ibdesc structures 1126*61046927SAndroid Build Coastguard Worker * @numcmds: Number of commands listed in cmdlist 1127*61046927SAndroid Build Coastguard Worker * @synclist: User pointer to a list of kgsl_cmd_syncpoint structures 1128*61046927SAndroid Build Coastguard Worker * @numsyncs: Number of sync points listed in synclist 1129*61046927SAndroid Build Coastguard Worker * @timestamp: On entry the a user defined timestamp, on exist the timestamp 1130*61046927SAndroid Build Coastguard Worker * assigned to the command batch 1131*61046927SAndroid Build Coastguard Worker * 1132*61046927SAndroid Build Coastguard Worker * This structure specifies a command to send to the GPU hardware. This is 1133*61046927SAndroid Build Coastguard Worker * similar to kgsl_issueibcmds expect that it doesn't support the legacy way to 1134*61046927SAndroid Build Coastguard Worker * submit IB lists and it adds sync points to block the IB until the 1135*61046927SAndroid Build Coastguard Worker * dependencies are satisified. This entry point is the new and preferred way 1136*61046927SAndroid Build Coastguard Worker * to submit commands to the GPU. The memory list can be used to specify all 1137*61046927SAndroid Build Coastguard Worker * memory that is referrenced in the current set of commands. 1138*61046927SAndroid Build Coastguard Worker */ 1139*61046927SAndroid Build Coastguard Worker 1140*61046927SAndroid Build Coastguard Worker struct kgsl_submit_commands { 1141*61046927SAndroid Build Coastguard Worker unsigned int context_id; 1142*61046927SAndroid Build Coastguard Worker unsigned int flags; 1143*61046927SAndroid Build Coastguard Worker struct kgsl_ibdesc *cmdlist; 1144*61046927SAndroid Build Coastguard Worker unsigned int numcmds; 1145*61046927SAndroid Build Coastguard Worker struct kgsl_cmd_syncpoint *synclist; 1146*61046927SAndroid Build Coastguard Worker unsigned int numsyncs; 1147*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 1148*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1149*61046927SAndroid Build Coastguard Worker unsigned int __pad[4]; 1150*61046927SAndroid Build Coastguard Worker }; 1151*61046927SAndroid Build Coastguard Worker 1152*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SUBMIT_COMMANDS \ 1153*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands) 1154*61046927SAndroid Build Coastguard Worker 1155*61046927SAndroid Build Coastguard Worker /** 1156*61046927SAndroid Build Coastguard Worker * struct kgsl_device_constraint - device constraint argument 1157*61046927SAndroid Build Coastguard Worker * @context_id: KGSL context ID 1158*61046927SAndroid Build Coastguard Worker * @type: type of constraint i.e pwrlevel/none 1159*61046927SAndroid Build Coastguard Worker * @data: constraint data 1160*61046927SAndroid Build Coastguard Worker * @size: size of the constraint data 1161*61046927SAndroid Build Coastguard Worker */ 1162*61046927SAndroid Build Coastguard Worker struct kgsl_device_constraint { 1163*61046927SAndroid Build Coastguard Worker unsigned int type; 1164*61046927SAndroid Build Coastguard Worker unsigned int context_id; 1165*61046927SAndroid Build Coastguard Worker void *data; 1166*61046927SAndroid Build Coastguard Worker size_t size; 1167*61046927SAndroid Build Coastguard Worker }; 1168*61046927SAndroid Build Coastguard Worker 1169*61046927SAndroid Build Coastguard Worker /* Constraint Type*/ 1170*61046927SAndroid Build Coastguard Worker #define KGSL_CONSTRAINT_NONE 0 1171*61046927SAndroid Build Coastguard Worker #define KGSL_CONSTRAINT_PWRLEVEL 1 1172*61046927SAndroid Build Coastguard Worker 1173*61046927SAndroid Build Coastguard Worker /* L3 constraint Type */ 1174*61046927SAndroid Build Coastguard Worker #define KGSL_CONSTRAINT_L3_NONE 2 1175*61046927SAndroid Build Coastguard Worker #define KGSL_CONSTRAINT_L3_PWRLEVEL 3 1176*61046927SAndroid Build Coastguard Worker 1177*61046927SAndroid Build Coastguard Worker /* PWRLEVEL constraint level*/ 1178*61046927SAndroid Build Coastguard Worker /* set to min frequency */ 1179*61046927SAndroid Build Coastguard Worker #define KGSL_CONSTRAINT_PWR_MIN 0 1180*61046927SAndroid Build Coastguard Worker /* set to max frequency */ 1181*61046927SAndroid Build Coastguard Worker #define KGSL_CONSTRAINT_PWR_MAX 1 1182*61046927SAndroid Build Coastguard Worker 1183*61046927SAndroid Build Coastguard Worker struct kgsl_device_constraint_pwrlevel { 1184*61046927SAndroid Build Coastguard Worker unsigned int level; 1185*61046927SAndroid Build Coastguard Worker }; 1186*61046927SAndroid Build Coastguard Worker 1187*61046927SAndroid Build Coastguard Worker /** 1188*61046927SAndroid Build Coastguard Worker * struct kgsl_syncsource_create - Argument to IOCTL_KGSL_SYNCSOURCE_CREATE 1189*61046927SAndroid Build Coastguard Worker * @id: returned id for the syncsource that was created. 1190*61046927SAndroid Build Coastguard Worker * 1191*61046927SAndroid Build Coastguard Worker * This ioctl creates a userspace sync timeline. 1192*61046927SAndroid Build Coastguard Worker */ 1193*61046927SAndroid Build Coastguard Worker 1194*61046927SAndroid Build Coastguard Worker struct kgsl_syncsource_create { 1195*61046927SAndroid Build Coastguard Worker unsigned int id; 1196*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1197*61046927SAndroid Build Coastguard Worker unsigned int __pad[3]; 1198*61046927SAndroid Build Coastguard Worker }; 1199*61046927SAndroid Build Coastguard Worker 1200*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SYNCSOURCE_CREATE \ 1201*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x40, struct kgsl_syncsource_create) 1202*61046927SAndroid Build Coastguard Worker 1203*61046927SAndroid Build Coastguard Worker /** 1204*61046927SAndroid Build Coastguard Worker * struct kgsl_syncsource_destroy - Argument to IOCTL_KGSL_SYNCSOURCE_DESTROY 1205*61046927SAndroid Build Coastguard Worker * @id: syncsource id to destroy 1206*61046927SAndroid Build Coastguard Worker * 1207*61046927SAndroid Build Coastguard Worker * This ioctl creates a userspace sync timeline. 1208*61046927SAndroid Build Coastguard Worker */ 1209*61046927SAndroid Build Coastguard Worker 1210*61046927SAndroid Build Coastguard Worker struct kgsl_syncsource_destroy { 1211*61046927SAndroid Build Coastguard Worker unsigned int id; 1212*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1213*61046927SAndroid Build Coastguard Worker unsigned int __pad[3]; 1214*61046927SAndroid Build Coastguard Worker }; 1215*61046927SAndroid Build Coastguard Worker 1216*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SYNCSOURCE_DESTROY \ 1217*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x41, struct kgsl_syncsource_destroy) 1218*61046927SAndroid Build Coastguard Worker 1219*61046927SAndroid Build Coastguard Worker /** 1220*61046927SAndroid Build Coastguard Worker * struct kgsl_syncsource_create_fence - Argument to 1221*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 1222*61046927SAndroid Build Coastguard Worker * @id: syncsource id 1223*61046927SAndroid Build Coastguard Worker * @fence_fd: returned sync_fence fd 1224*61046927SAndroid Build Coastguard Worker * 1225*61046927SAndroid Build Coastguard Worker * Create a fence that may be signaled by userspace by calling 1226*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE. There are no order dependencies between 1227*61046927SAndroid Build Coastguard Worker * these fences. 1228*61046927SAndroid Build Coastguard Worker */ 1229*61046927SAndroid Build Coastguard Worker struct kgsl_syncsource_create_fence { 1230*61046927SAndroid Build Coastguard Worker unsigned int id; 1231*61046927SAndroid Build Coastguard Worker int fence_fd; 1232*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1233*61046927SAndroid Build Coastguard Worker unsigned int __pad[4]; 1234*61046927SAndroid Build Coastguard Worker }; 1235*61046927SAndroid Build Coastguard Worker 1236*61046927SAndroid Build Coastguard Worker /** 1237*61046927SAndroid Build Coastguard Worker * struct kgsl_syncsource_signal_fence - Argument to 1238*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE 1239*61046927SAndroid Build Coastguard Worker * @id: syncsource id 1240*61046927SAndroid Build Coastguard Worker * @fence_fd: sync_fence fd to signal 1241*61046927SAndroid Build Coastguard Worker * 1242*61046927SAndroid Build Coastguard Worker * Signal a fence that was created by a IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 1243*61046927SAndroid Build Coastguard Worker * call using the same syncsource id. This allows a fence to be shared 1244*61046927SAndroid Build Coastguard Worker * to other processes but only signaled by the process owning the fd 1245*61046927SAndroid Build Coastguard Worker * used to create the fence. 1246*61046927SAndroid Build Coastguard Worker */ 1247*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE \ 1248*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x42, struct kgsl_syncsource_create_fence) 1249*61046927SAndroid Build Coastguard Worker 1250*61046927SAndroid Build Coastguard Worker struct kgsl_syncsource_signal_fence { 1251*61046927SAndroid Build Coastguard Worker unsigned int id; 1252*61046927SAndroid Build Coastguard Worker int fence_fd; 1253*61046927SAndroid Build Coastguard Worker /* private: reserved for future use */ 1254*61046927SAndroid Build Coastguard Worker unsigned int __pad[4]; 1255*61046927SAndroid Build Coastguard Worker }; 1256*61046927SAndroid Build Coastguard Worker 1257*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE \ 1258*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x43, struct kgsl_syncsource_signal_fence) 1259*61046927SAndroid Build Coastguard Worker 1260*61046927SAndroid Build Coastguard Worker /** 1261*61046927SAndroid Build Coastguard Worker * struct kgsl_cff_sync_gpuobj - Argument to IOCTL_KGSL_CFF_SYNC_GPUOBJ 1262*61046927SAndroid Build Coastguard Worker * @offset: Offset into the GPU object to sync 1263*61046927SAndroid Build Coastguard Worker * @length: Number of bytes to sync 1264*61046927SAndroid Build Coastguard Worker * @id: ID of the GPU object to sync 1265*61046927SAndroid Build Coastguard Worker */ 1266*61046927SAndroid Build Coastguard Worker struct kgsl_cff_sync_gpuobj { 1267*61046927SAndroid Build Coastguard Worker uint64_t offset; 1268*61046927SAndroid Build Coastguard Worker uint64_t length; 1269*61046927SAndroid Build Coastguard Worker unsigned int id; 1270*61046927SAndroid Build Coastguard Worker }; 1271*61046927SAndroid Build Coastguard Worker 1272*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_CFF_SYNC_GPUOBJ \ 1273*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x44, struct kgsl_cff_sync_gpuobj) 1274*61046927SAndroid Build Coastguard Worker 1275*61046927SAndroid Build Coastguard Worker /** 1276*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_alloc - Argument to IOCTL_KGSL_GPUOBJ_ALLOC 1277*61046927SAndroid Build Coastguard Worker * @size: Size in bytes of the object to allocate 1278*61046927SAndroid Build Coastguard Worker * @flags: mask of KGSL_MEMFLAG_* bits 1279*61046927SAndroid Build Coastguard Worker * @va_len: Size in bytes of the virtual region to allocate 1280*61046927SAndroid Build Coastguard Worker * @mmapsize: Returns the mmap() size of the object 1281*61046927SAndroid Build Coastguard Worker * @id: Returns the GPU object ID of the new object 1282*61046927SAndroid Build Coastguard Worker * @metadata_len: Length of the metdata to copy from the user 1283*61046927SAndroid Build Coastguard Worker * @metadata: Pointer to the user specified metadata to store for the object 1284*61046927SAndroid Build Coastguard Worker */ 1285*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_alloc { 1286*61046927SAndroid Build Coastguard Worker uint64_t size; 1287*61046927SAndroid Build Coastguard Worker uint64_t flags; 1288*61046927SAndroid Build Coastguard Worker uint64_t va_len; 1289*61046927SAndroid Build Coastguard Worker uint64_t mmapsize; 1290*61046927SAndroid Build Coastguard Worker unsigned int id; 1291*61046927SAndroid Build Coastguard Worker unsigned int metadata_len; 1292*61046927SAndroid Build Coastguard Worker uint64_t metadata; 1293*61046927SAndroid Build Coastguard Worker }; 1294*61046927SAndroid Build Coastguard Worker 1295*61046927SAndroid Build Coastguard Worker /* Let the user know that this header supports the gpuobj metadata */ 1296*61046927SAndroid Build Coastguard Worker #define KGSL_GPUOBJ_ALLOC_METADATA_MAX 64 1297*61046927SAndroid Build Coastguard Worker 1298*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUOBJ_ALLOC \ 1299*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x45, struct kgsl_gpuobj_alloc) 1300*61046927SAndroid Build Coastguard Worker 1301*61046927SAndroid Build Coastguard Worker /** 1302*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_free - Argument to IOCTL_KGLS_GPUOBJ_FREE 1303*61046927SAndroid Build Coastguard Worker * @flags: Mask of: KGSL_GUPOBJ_FREE_ON_EVENT 1304*61046927SAndroid Build Coastguard Worker * @priv: Pointer to the private object if KGSL_GPUOBJ_FREE_ON_EVENT is 1305*61046927SAndroid Build Coastguard Worker * specified 1306*61046927SAndroid Build Coastguard Worker * @id: ID of the GPU object to free 1307*61046927SAndroid Build Coastguard Worker * @type: If KGSL_GPUOBJ_FREE_ON_EVENT is specified, the type of asynchronous 1308*61046927SAndroid Build Coastguard Worker * event to free on 1309*61046927SAndroid Build Coastguard Worker * @len: Length of the data passed in priv 1310*61046927SAndroid Build Coastguard Worker */ 1311*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_free { 1312*61046927SAndroid Build Coastguard Worker uint64_t flags; 1313*61046927SAndroid Build Coastguard Worker uint64_t priv; 1314*61046927SAndroid Build Coastguard Worker unsigned int id; 1315*61046927SAndroid Build Coastguard Worker unsigned int type; 1316*61046927SAndroid Build Coastguard Worker unsigned int len; 1317*61046927SAndroid Build Coastguard Worker }; 1318*61046927SAndroid Build Coastguard Worker 1319*61046927SAndroid Build Coastguard Worker #define KGSL_GPUOBJ_FREE_ON_EVENT 1 1320*61046927SAndroid Build Coastguard Worker 1321*61046927SAndroid Build Coastguard Worker #define KGSL_GPU_EVENT_TIMESTAMP 1 1322*61046927SAndroid Build Coastguard Worker #define KGSL_GPU_EVENT_FENCE 2 1323*61046927SAndroid Build Coastguard Worker 1324*61046927SAndroid Build Coastguard Worker /** 1325*61046927SAndroid Build Coastguard Worker * struct kgsl_gpu_event_timestamp - Specifies a timestamp event to free a GPU 1326*61046927SAndroid Build Coastguard Worker * object on 1327*61046927SAndroid Build Coastguard Worker * @context_id: ID of the timestamp event to wait for 1328*61046927SAndroid Build Coastguard Worker * @timestamp: Timestamp of the timestamp event to wait for 1329*61046927SAndroid Build Coastguard Worker */ 1330*61046927SAndroid Build Coastguard Worker struct kgsl_gpu_event_timestamp { 1331*61046927SAndroid Build Coastguard Worker unsigned int context_id; 1332*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 1333*61046927SAndroid Build Coastguard Worker }; 1334*61046927SAndroid Build Coastguard Worker 1335*61046927SAndroid Build Coastguard Worker /** 1336*61046927SAndroid Build Coastguard Worker * struct kgsl_gpu_event_fence - Specifies a fence ID to to free a GPU object on 1337*61046927SAndroid Build Coastguard Worker * @fd: File descriptor for the fence 1338*61046927SAndroid Build Coastguard Worker */ 1339*61046927SAndroid Build Coastguard Worker struct kgsl_gpu_event_fence { 1340*61046927SAndroid Build Coastguard Worker int fd; 1341*61046927SAndroid Build Coastguard Worker }; 1342*61046927SAndroid Build Coastguard Worker 1343*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUOBJ_FREE \ 1344*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x46, struct kgsl_gpuobj_free) 1345*61046927SAndroid Build Coastguard Worker 1346*61046927SAndroid Build Coastguard Worker /** 1347*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_info - argument to IOCTL_KGSL_GPUOBJ_INFO 1348*61046927SAndroid Build Coastguard Worker * @gpuaddr: GPU address of the object 1349*61046927SAndroid Build Coastguard Worker * @flags: Current flags for the object 1350*61046927SAndroid Build Coastguard Worker * @size: Size of the object 1351*61046927SAndroid Build Coastguard Worker * @va_len: VA size of the object 1352*61046927SAndroid Build Coastguard Worker * @va_addr: Virtual address of the object (if it is mapped) 1353*61046927SAndroid Build Coastguard Worker * id - GPU object ID of the object to query 1354*61046927SAndroid Build Coastguard Worker */ 1355*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_info { 1356*61046927SAndroid Build Coastguard Worker uint64_t gpuaddr; 1357*61046927SAndroid Build Coastguard Worker uint64_t flags; 1358*61046927SAndroid Build Coastguard Worker uint64_t size; 1359*61046927SAndroid Build Coastguard Worker uint64_t va_len; 1360*61046927SAndroid Build Coastguard Worker uint64_t va_addr; 1361*61046927SAndroid Build Coastguard Worker unsigned int id; 1362*61046927SAndroid Build Coastguard Worker }; 1363*61046927SAndroid Build Coastguard Worker 1364*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUOBJ_INFO \ 1365*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x47, struct kgsl_gpuobj_info) 1366*61046927SAndroid Build Coastguard Worker 1367*61046927SAndroid Build Coastguard Worker /** 1368*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_import - argument to IOCTL_KGSL_GPUOBJ_IMPORT 1369*61046927SAndroid Build Coastguard Worker * @priv: Pointer to the private data for the import type 1370*61046927SAndroid Build Coastguard Worker * @priv_len: Length of the private data 1371*61046927SAndroid Build Coastguard Worker * @flags: Mask of KGSL_MEMFLAG_ flags 1372*61046927SAndroid Build Coastguard Worker * @type: Type of the import (KGSL_USER_MEM_TYPE_*) 1373*61046927SAndroid Build Coastguard Worker * @id: Returns the ID of the new GPU object 1374*61046927SAndroid Build Coastguard Worker */ 1375*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_import { 1376*61046927SAndroid Build Coastguard Worker uint64_t priv; 1377*61046927SAndroid Build Coastguard Worker uint64_t priv_len; 1378*61046927SAndroid Build Coastguard Worker uint64_t flags; 1379*61046927SAndroid Build Coastguard Worker unsigned int type; 1380*61046927SAndroid Build Coastguard Worker unsigned int id; 1381*61046927SAndroid Build Coastguard Worker }; 1382*61046927SAndroid Build Coastguard Worker 1383*61046927SAndroid Build Coastguard Worker /** 1384*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_import_dma_buf - import a dmabuf object 1385*61046927SAndroid Build Coastguard Worker * @fd: File descriptor for the dma-buf object 1386*61046927SAndroid Build Coastguard Worker */ 1387*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_import_dma_buf { 1388*61046927SAndroid Build Coastguard Worker int fd; 1389*61046927SAndroid Build Coastguard Worker }; 1390*61046927SAndroid Build Coastguard Worker 1391*61046927SAndroid Build Coastguard Worker /** 1392*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_import_useraddr - import an object based on a useraddr 1393*61046927SAndroid Build Coastguard Worker * @virtaddr: Virtual address of the object to import 1394*61046927SAndroid Build Coastguard Worker */ 1395*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_import_useraddr { 1396*61046927SAndroid Build Coastguard Worker uint64_t virtaddr; 1397*61046927SAndroid Build Coastguard Worker }; 1398*61046927SAndroid Build Coastguard Worker 1399*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUOBJ_IMPORT \ 1400*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x48, struct kgsl_gpuobj_import) 1401*61046927SAndroid Build Coastguard Worker 1402*61046927SAndroid Build Coastguard Worker /** 1403*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_sync_obj - Individual GPU object to sync 1404*61046927SAndroid Build Coastguard Worker * @offset: Offset within the GPU object to sync 1405*61046927SAndroid Build Coastguard Worker * @length: Number of bytes to sync 1406*61046927SAndroid Build Coastguard Worker * @id: ID of the GPU object to sync 1407*61046927SAndroid Build Coastguard Worker * @op: Cache operation to execute 1408*61046927SAndroid Build Coastguard Worker */ 1409*61046927SAndroid Build Coastguard Worker 1410*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_sync_obj { 1411*61046927SAndroid Build Coastguard Worker uint64_t offset; 1412*61046927SAndroid Build Coastguard Worker uint64_t length; 1413*61046927SAndroid Build Coastguard Worker unsigned int id; 1414*61046927SAndroid Build Coastguard Worker unsigned int op; 1415*61046927SAndroid Build Coastguard Worker }; 1416*61046927SAndroid Build Coastguard Worker 1417*61046927SAndroid Build Coastguard Worker /** 1418*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_sync - Argument for IOCTL_KGSL_GPUOBJ_SYNC 1419*61046927SAndroid Build Coastguard Worker * @objs: Pointer to an array of kgsl_gpuobj_sync_obj structs 1420*61046927SAndroid Build Coastguard Worker * @obj_len: Size of each item in the array 1421*61046927SAndroid Build Coastguard Worker * @count: Number of items in the array 1422*61046927SAndroid Build Coastguard Worker */ 1423*61046927SAndroid Build Coastguard Worker 1424*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_sync { 1425*61046927SAndroid Build Coastguard Worker uint64_t objs; 1426*61046927SAndroid Build Coastguard Worker unsigned int obj_len; 1427*61046927SAndroid Build Coastguard Worker unsigned int count; 1428*61046927SAndroid Build Coastguard Worker }; 1429*61046927SAndroid Build Coastguard Worker 1430*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUOBJ_SYNC \ 1431*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x49, struct kgsl_gpuobj_sync) 1432*61046927SAndroid Build Coastguard Worker 1433*61046927SAndroid Build Coastguard Worker /** 1434*61046927SAndroid Build Coastguard Worker * struct kgsl_command_object - GPU command object 1435*61046927SAndroid Build Coastguard Worker * @offset: GPU address offset of the object 1436*61046927SAndroid Build Coastguard Worker * @gpuaddr: GPU address of the object 1437*61046927SAndroid Build Coastguard Worker * @size: Size of the object 1438*61046927SAndroid Build Coastguard Worker * @flags: Current flags for the object 1439*61046927SAndroid Build Coastguard Worker * @id - GPU command object ID 1440*61046927SAndroid Build Coastguard Worker */ 1441*61046927SAndroid Build Coastguard Worker struct kgsl_command_object { 1442*61046927SAndroid Build Coastguard Worker uint64_t offset; 1443*61046927SAndroid Build Coastguard Worker uint64_t gpuaddr; 1444*61046927SAndroid Build Coastguard Worker uint64_t size; 1445*61046927SAndroid Build Coastguard Worker unsigned int flags; 1446*61046927SAndroid Build Coastguard Worker unsigned int id; 1447*61046927SAndroid Build Coastguard Worker }; 1448*61046927SAndroid Build Coastguard Worker 1449*61046927SAndroid Build Coastguard Worker /** 1450*61046927SAndroid Build Coastguard Worker * struct kgsl_command_syncpoint - GPU syncpoint object 1451*61046927SAndroid Build Coastguard Worker * @priv: Pointer to the type specific buffer 1452*61046927SAndroid Build Coastguard Worker * @size: Size of the type specific buffer 1453*61046927SAndroid Build Coastguard Worker * @type: type of sync point defined here 1454*61046927SAndroid Build Coastguard Worker */ 1455*61046927SAndroid Build Coastguard Worker struct kgsl_command_syncpoint { 1456*61046927SAndroid Build Coastguard Worker uint64_t priv; 1457*61046927SAndroid Build Coastguard Worker uint64_t size; 1458*61046927SAndroid Build Coastguard Worker unsigned int type; 1459*61046927SAndroid Build Coastguard Worker }; 1460*61046927SAndroid Build Coastguard Worker 1461*61046927SAndroid Build Coastguard Worker /** 1462*61046927SAndroid Build Coastguard Worker * struct kgsl_command_object - Argument for IOCTL_KGSL_GPU_COMMAND 1463*61046927SAndroid Build Coastguard Worker * @flags: Current flags for the object 1464*61046927SAndroid Build Coastguard Worker * @cmdlist: List of kgsl_command_objects for submission 1465*61046927SAndroid Build Coastguard Worker * @cmd_size: Size of kgsl_command_objects structure 1466*61046927SAndroid Build Coastguard Worker * @numcmds: Number of kgsl_command_objects in command list 1467*61046927SAndroid Build Coastguard Worker * @objlist: List of kgsl_command_objects for tracking 1468*61046927SAndroid Build Coastguard Worker * @obj_size: Size of kgsl_command_objects structure 1469*61046927SAndroid Build Coastguard Worker * @numobjs: Number of kgsl_command_objects in object list 1470*61046927SAndroid Build Coastguard Worker * @synclist: List of kgsl_command_syncpoints 1471*61046927SAndroid Build Coastguard Worker * @sync_size: Size of kgsl_command_syncpoint structure 1472*61046927SAndroid Build Coastguard Worker * @numsyncs: Number of kgsl_command_syncpoints in syncpoint list 1473*61046927SAndroid Build Coastguard Worker * @context_id: Context ID submittin ghte kgsl_gpu_command 1474*61046927SAndroid Build Coastguard Worker * @timestamp: Timestamp for the submitted commands 1475*61046927SAndroid Build Coastguard Worker */ 1476*61046927SAndroid Build Coastguard Worker struct kgsl_gpu_command { 1477*61046927SAndroid Build Coastguard Worker uint64_t flags; 1478*61046927SAndroid Build Coastguard Worker uint64_t cmdlist; 1479*61046927SAndroid Build Coastguard Worker unsigned int cmdsize; 1480*61046927SAndroid Build Coastguard Worker unsigned int numcmds; 1481*61046927SAndroid Build Coastguard Worker uint64_t objlist; 1482*61046927SAndroid Build Coastguard Worker unsigned int objsize; 1483*61046927SAndroid Build Coastguard Worker unsigned int numobjs; 1484*61046927SAndroid Build Coastguard Worker uint64_t synclist; 1485*61046927SAndroid Build Coastguard Worker unsigned int syncsize; 1486*61046927SAndroid Build Coastguard Worker unsigned int numsyncs; 1487*61046927SAndroid Build Coastguard Worker unsigned int context_id; 1488*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 1489*61046927SAndroid Build Coastguard Worker }; 1490*61046927SAndroid Build Coastguard Worker 1491*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPU_COMMAND \ 1492*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x4A, struct kgsl_gpu_command) 1493*61046927SAndroid Build Coastguard Worker 1494*61046927SAndroid Build Coastguard Worker /** 1495*61046927SAndroid Build Coastguard Worker * struct kgsl_preemption_counters_query - argument to 1496*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_PREEMPTIONCOUNTER_QUERY 1497*61046927SAndroid Build Coastguard Worker * @counters: Return preemption counters array 1498*61046927SAndroid Build Coastguard Worker * @size_user: Size allocated by userspace 1499*61046927SAndroid Build Coastguard Worker * @size_priority_level: Size of preemption counters for each 1500*61046927SAndroid Build Coastguard Worker * priority level 1501*61046927SAndroid Build Coastguard Worker * @max_priority_level: Return max number of priority levels 1502*61046927SAndroid Build Coastguard Worker * 1503*61046927SAndroid Build Coastguard Worker * Query the available preemption counters. The array counters 1504*61046927SAndroid Build Coastguard Worker * is used to return preemption counters. The size of the array 1505*61046927SAndroid Build Coastguard Worker * is passed in so the kernel will only write at most size_user 1506*61046927SAndroid Build Coastguard Worker * or max available preemption counters. The total number of 1507*61046927SAndroid Build Coastguard Worker * preemption counters is returned in max_priority_level. If the 1508*61046927SAndroid Build Coastguard Worker * array or size passed in are invalid, then an error is 1509*61046927SAndroid Build Coastguard Worker * returned back. 1510*61046927SAndroid Build Coastguard Worker */ 1511*61046927SAndroid Build Coastguard Worker struct kgsl_preemption_counters_query { 1512*61046927SAndroid Build Coastguard Worker uint64_t counters; 1513*61046927SAndroid Build Coastguard Worker unsigned int size_user; 1514*61046927SAndroid Build Coastguard Worker unsigned int size_priority_level; 1515*61046927SAndroid Build Coastguard Worker unsigned int max_priority_level; 1516*61046927SAndroid Build Coastguard Worker }; 1517*61046927SAndroid Build Coastguard Worker 1518*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_PREEMPTIONCOUNTER_QUERY \ 1519*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x4B, struct kgsl_preemption_counters_query) 1520*61046927SAndroid Build Coastguard Worker 1521*61046927SAndroid Build Coastguard Worker /** 1522*61046927SAndroid Build Coastguard Worker * struct kgsl_gpuobj_set_info - argument for IOCTL_KGSL_GPUOBJ_SET_INFO 1523*61046927SAndroid Build Coastguard Worker * @flags: Flags to indicate which parameters to change 1524*61046927SAndroid Build Coastguard Worker * @metadata: If KGSL_GPUOBJ_SET_INFO_METADATA is set, a pointer to the new 1525*61046927SAndroid Build Coastguard Worker * metadata 1526*61046927SAndroid Build Coastguard Worker * @id: GPU memory object ID to change 1527*61046927SAndroid Build Coastguard Worker * @metadata_len: If KGSL_GPUOBJ_SET_INFO_METADATA is set, the length of the 1528*61046927SAndroid Build Coastguard Worker * new metadata string 1529*61046927SAndroid Build Coastguard Worker * @type: If KGSL_GPUOBJ_SET_INFO_TYPE is set, the new type of the memory object 1530*61046927SAndroid Build Coastguard Worker */ 1531*61046927SAndroid Build Coastguard Worker 1532*61046927SAndroid Build Coastguard Worker #define KGSL_GPUOBJ_SET_INFO_METADATA (1 << 0) 1533*61046927SAndroid Build Coastguard Worker #define KGSL_GPUOBJ_SET_INFO_TYPE (1 << 1) 1534*61046927SAndroid Build Coastguard Worker 1535*61046927SAndroid Build Coastguard Worker struct kgsl_gpuobj_set_info { 1536*61046927SAndroid Build Coastguard Worker uint64_t flags; 1537*61046927SAndroid Build Coastguard Worker uint64_t metadata; 1538*61046927SAndroid Build Coastguard Worker unsigned int id; 1539*61046927SAndroid Build Coastguard Worker unsigned int metadata_len; 1540*61046927SAndroid Build Coastguard Worker unsigned int type; 1541*61046927SAndroid Build Coastguard Worker }; 1542*61046927SAndroid Build Coastguard Worker 1543*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPUOBJ_SET_INFO \ 1544*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x4C, struct kgsl_gpuobj_set_info) 1545*61046927SAndroid Build Coastguard Worker 1546*61046927SAndroid Build Coastguard Worker /** 1547*61046927SAndroid Build Coastguard Worker * struct kgsl_sparse_phys_alloc - Argument for IOCTL_KGSL_SPARSE_PHYS_ALLOC 1548*61046927SAndroid Build Coastguard Worker * @size: Size in bytes to back 1549*61046927SAndroid Build Coastguard Worker * @pagesize: Pagesize alignment required 1550*61046927SAndroid Build Coastguard Worker * @flags: Flags for this allocation 1551*61046927SAndroid Build Coastguard Worker * @id: Returned ID for this allocation 1552*61046927SAndroid Build Coastguard Worker */ 1553*61046927SAndroid Build Coastguard Worker struct kgsl_sparse_phys_alloc { 1554*61046927SAndroid Build Coastguard Worker uint64_t size; 1555*61046927SAndroid Build Coastguard Worker uint64_t pagesize; 1556*61046927SAndroid Build Coastguard Worker uint64_t flags; 1557*61046927SAndroid Build Coastguard Worker unsigned int id; 1558*61046927SAndroid Build Coastguard Worker }; 1559*61046927SAndroid Build Coastguard Worker 1560*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SPARSE_PHYS_ALLOC \ 1561*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x50, struct kgsl_sparse_phys_alloc) 1562*61046927SAndroid Build Coastguard Worker 1563*61046927SAndroid Build Coastguard Worker /** 1564*61046927SAndroid Build Coastguard Worker * struct kgsl_sparse_phys_free - Argument for IOCTL_KGSL_SPARSE_PHYS_FREE 1565*61046927SAndroid Build Coastguard Worker * @id: ID to free 1566*61046927SAndroid Build Coastguard Worker */ 1567*61046927SAndroid Build Coastguard Worker struct kgsl_sparse_phys_free { 1568*61046927SAndroid Build Coastguard Worker unsigned int id; 1569*61046927SAndroid Build Coastguard Worker }; 1570*61046927SAndroid Build Coastguard Worker 1571*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SPARSE_PHYS_FREE \ 1572*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x51, struct kgsl_sparse_phys_free) 1573*61046927SAndroid Build Coastguard Worker 1574*61046927SAndroid Build Coastguard Worker /** 1575*61046927SAndroid Build Coastguard Worker * struct kgsl_sparse_virt_alloc - Argument for IOCTL_KGSL_SPARSE_VIRT_ALLOC 1576*61046927SAndroid Build Coastguard Worker * @size: Size in bytes to reserve 1577*61046927SAndroid Build Coastguard Worker * @pagesize: Pagesize alignment required 1578*61046927SAndroid Build Coastguard Worker * @flags: Flags for this allocation 1579*61046927SAndroid Build Coastguard Worker * @id: Returned ID for this allocation 1580*61046927SAndroid Build Coastguard Worker * @gpuaddr: Returned GPU address for this allocation 1581*61046927SAndroid Build Coastguard Worker */ 1582*61046927SAndroid Build Coastguard Worker struct kgsl_sparse_virt_alloc { 1583*61046927SAndroid Build Coastguard Worker uint64_t size; 1584*61046927SAndroid Build Coastguard Worker uint64_t pagesize; 1585*61046927SAndroid Build Coastguard Worker uint64_t flags; 1586*61046927SAndroid Build Coastguard Worker uint64_t gpuaddr; 1587*61046927SAndroid Build Coastguard Worker unsigned int id; 1588*61046927SAndroid Build Coastguard Worker }; 1589*61046927SAndroid Build Coastguard Worker 1590*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SPARSE_VIRT_ALLOC \ 1591*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x52, struct kgsl_sparse_virt_alloc) 1592*61046927SAndroid Build Coastguard Worker 1593*61046927SAndroid Build Coastguard Worker /** 1594*61046927SAndroid Build Coastguard Worker * struct kgsl_sparse_virt_free - Argument for IOCTL_KGSL_SPARSE_VIRT_FREE 1595*61046927SAndroid Build Coastguard Worker * @id: ID to free 1596*61046927SAndroid Build Coastguard Worker */ 1597*61046927SAndroid Build Coastguard Worker struct kgsl_sparse_virt_free { 1598*61046927SAndroid Build Coastguard Worker unsigned int id; 1599*61046927SAndroid Build Coastguard Worker }; 1600*61046927SAndroid Build Coastguard Worker 1601*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SPARSE_VIRT_FREE \ 1602*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x53, struct kgsl_sparse_virt_free) 1603*61046927SAndroid Build Coastguard Worker 1604*61046927SAndroid Build Coastguard Worker /** 1605*61046927SAndroid Build Coastguard Worker * struct kgsl_sparse_binding_object - Argument for kgsl_sparse_bind 1606*61046927SAndroid Build Coastguard Worker * @virtoffset: Offset into the virtual ID 1607*61046927SAndroid Build Coastguard Worker * @physoffset: Offset into the physical ID (bind only) 1608*61046927SAndroid Build Coastguard Worker * @size: Size in bytes to reserve 1609*61046927SAndroid Build Coastguard Worker * @flags: Flags for this kgsl_sparse_binding_object 1610*61046927SAndroid Build Coastguard Worker * @id: Physical ID to bind (bind only) 1611*61046927SAndroid Build Coastguard Worker */ 1612*61046927SAndroid Build Coastguard Worker struct kgsl_sparse_binding_object { 1613*61046927SAndroid Build Coastguard Worker uint64_t virtoffset; 1614*61046927SAndroid Build Coastguard Worker uint64_t physoffset; 1615*61046927SAndroid Build Coastguard Worker uint64_t size; 1616*61046927SAndroid Build Coastguard Worker uint64_t flags; 1617*61046927SAndroid Build Coastguard Worker unsigned int id; 1618*61046927SAndroid Build Coastguard Worker }; 1619*61046927SAndroid Build Coastguard Worker 1620*61046927SAndroid Build Coastguard Worker /** 1621*61046927SAndroid Build Coastguard Worker * struct kgsl_sparse_bind - Argument for IOCTL_KGSL_SPARSE_BIND 1622*61046927SAndroid Build Coastguard Worker * @list: List of kgsl_sparse_bind_objects to bind/unbind 1623*61046927SAndroid Build Coastguard Worker * @id: Virtual ID to bind/unbind 1624*61046927SAndroid Build Coastguard Worker * @size: Size of kgsl_sparse_bind_object 1625*61046927SAndroid Build Coastguard Worker * @count: Number of elements in list 1626*61046927SAndroid Build Coastguard Worker * 1627*61046927SAndroid Build Coastguard Worker */ 1628*61046927SAndroid Build Coastguard Worker struct kgsl_sparse_bind { 1629*61046927SAndroid Build Coastguard Worker uint64_t list; 1630*61046927SAndroid Build Coastguard Worker unsigned int id; 1631*61046927SAndroid Build Coastguard Worker unsigned int size; 1632*61046927SAndroid Build Coastguard Worker unsigned int count; 1633*61046927SAndroid Build Coastguard Worker }; 1634*61046927SAndroid Build Coastguard Worker 1635*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_SPARSE_BIND \ 1636*61046927SAndroid Build Coastguard Worker _IOW(KGSL_IOC_TYPE, 0x54, struct kgsl_sparse_bind) 1637*61046927SAndroid Build Coastguard Worker 1638*61046927SAndroid Build Coastguard Worker /** 1639*61046927SAndroid Build Coastguard Worker * struct kgsl_gpu_sparse_command - Argument for 1640*61046927SAndroid Build Coastguard Worker * IOCTL_KGSL_GPU_SPARSE_COMMAND 1641*61046927SAndroid Build Coastguard Worker * @flags: Current flags for the object 1642*61046927SAndroid Build Coastguard Worker * @sparselist: List of kgsl_sparse_binding_object to bind/unbind 1643*61046927SAndroid Build Coastguard Worker * @synclist: List of kgsl_command_syncpoints 1644*61046927SAndroid Build Coastguard Worker * @sparsesize: Size of kgsl_sparse_binding_object 1645*61046927SAndroid Build Coastguard Worker * @numsparse: Number of elements in list 1646*61046927SAndroid Build Coastguard Worker * @sync_size: Size of kgsl_command_syncpoint structure 1647*61046927SAndroid Build Coastguard Worker * @numsyncs: Number of kgsl_command_syncpoints in syncpoint list 1648*61046927SAndroid Build Coastguard Worker * @context_id: Context ID submitting the kgsl_gpu_command 1649*61046927SAndroid Build Coastguard Worker * @timestamp: Timestamp for the submitted commands 1650*61046927SAndroid Build Coastguard Worker * @id: Virtual ID to bind/unbind 1651*61046927SAndroid Build Coastguard Worker */ 1652*61046927SAndroid Build Coastguard Worker struct kgsl_gpu_sparse_command { 1653*61046927SAndroid Build Coastguard Worker uint64_t flags; 1654*61046927SAndroid Build Coastguard Worker uint64_t sparselist; 1655*61046927SAndroid Build Coastguard Worker uint64_t synclist; 1656*61046927SAndroid Build Coastguard Worker unsigned int sparsesize; 1657*61046927SAndroid Build Coastguard Worker unsigned int numsparse; 1658*61046927SAndroid Build Coastguard Worker unsigned int syncsize; 1659*61046927SAndroid Build Coastguard Worker unsigned int numsyncs; 1660*61046927SAndroid Build Coastguard Worker unsigned int context_id; 1661*61046927SAndroid Build Coastguard Worker unsigned int timestamp; 1662*61046927SAndroid Build Coastguard Worker unsigned int id; 1663*61046927SAndroid Build Coastguard Worker }; 1664*61046927SAndroid Build Coastguard Worker 1665*61046927SAndroid Build Coastguard Worker #define IOCTL_KGSL_GPU_SPARSE_COMMAND \ 1666*61046927SAndroid Build Coastguard Worker _IOWR(KGSL_IOC_TYPE, 0x55, struct kgsl_gpu_sparse_command) 1667*61046927SAndroid Build Coastguard Worker 1668*61046927SAndroid Build Coastguard Worker #endif /* _UAPI_MSM_KGSL_H */ 1669