1938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#ifndef _UAPI_MSM_KGSL_H 2938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define _UAPI_MSM_KGSL_H 3938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 4938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 5938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The KGSL version has proven not to be very useful in userspace if features 6938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * are cherry picked into other trees out of order so it is frozen as of 3.14. 7938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * It is left here for backwards compatabilty and as a reminder that 8938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * software releases are never linear. Also, I like pie. 9938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 10938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 11938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_VERSION_MAJOR 3 12938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_VERSION_MINOR 14 13938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 14da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* 15da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * We have traditionally mixed context and issueibcmds / command batch flags 16da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * together into a big flag stew. This worked fine until we started adding a 17da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * lot more command batch flags and we started running out of bits. Turns out 18da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * we have a bit of room in the context type / priority mask that we could use 19da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * for command batches, but that means we need to split out the flags into two 20da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * coherent sets. 21da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * 22da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * If any future definitions are for both context and cmdbatch add both defines 23da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * and link the cmdbatch to the context define as we do below. Otherwise feel 24da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * free to add exclusive bits to either set. 25da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 26da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 27da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* --- context flags --- */ 28938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_SAVE_GMEM 0x00000001 29938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002 30da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 31938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004 32938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_CTX_SWITCH 0x00000008 33938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PREAMBLE 0x00000010 34938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TRASH_STATE 0x00000020 35938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040 36938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080 37da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 38938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_END_OF_FRAME 0x00000100 39938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200 40da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 41938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_SYNC 0x00000400 42a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONTEXT_PWR_CONSTRAINT 0x00000800 43da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 44938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PRIORITY_MASK 0x0000F000 45938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PRIORITY_SHIFT 12 46938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PRIORITY_UNDEF 0 47938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 48da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CONTEXT_IFH_NOP 0x00010000 49da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CONTEXT_SECURE 0x00020000 50da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 51938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_MASK 0x01F00000 52938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_SHIFT 20 53938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_ANY 0 54938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_GL 1 55938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_CL 2 56938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_C2D 3 57938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_RS 4 58938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_UNKNOWN 0x1E 59938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 60938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_INVALID 0xffffffff 61938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 62da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* 63da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * --- command batch flags --- 64da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * The bits that are linked to a KGSL_CONTEXT equivalent are either legacy 65da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * definitions or bits that are valid for both contexts and cmdbatches. To be 66da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * safe the other 8 bits that are still available in the context field should be 67da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * omitted here in case we need to share - the other bits are available for 68da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * cmdbatch only flags as needed 69da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 70da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_MEMLIST 0x00000001 71da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_MARKER 0x00000002 72da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_SUBMIT_IB_LIST KGSL_CONTEXT_SUBMIT_IB_LIST /* 0x004 */ 73da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_CTX_SWITCH KGSL_CONTEXT_CTX_SWITCH /* 0x008 */ 74da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_PROFILING 0x00000010 75da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_END_OF_FRAME KGSL_CONTEXT_END_OF_FRAME /* 0x100 */ 76da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_SYNC KGSL_CONTEXT_SYNC /* 0x400 */ 77da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_PWR_CONSTRAINT KGSL_CONTEXT_PWR_CONSTRAINT /* 0x800 */ 78da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 79da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* 80da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * Reserve bits [16:19] and bits [28:31] for possible bits shared between 81da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * contexts and command batches. Update this comment as new flags are added. 82da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 83da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 84938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* --- Memory allocation flags --- */ 85938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 86938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* General allocation hints */ 87938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000 88938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000 89938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 90da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Memory is secure */ 91da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_MEMFLAGS_SECURE 0x00000008 92da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 93938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Memory caching hints */ 94938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_MASK 0x0C000000 95938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_SHIFT 26 96938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 97938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_WRITECOMBINE 0 98938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_UNCACHED 1 99938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_WRITETHROUGH 2 100938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_WRITEBACK 3 101938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 102938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Memory types for which allocations are made */ 103938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_MASK 0x0000FF00 104938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_SHIFT 8 105938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 106938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_OBJECTANY 0 107938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_FRAMEBUFFER 1 108938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_RENDERBUFFER 2 109938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_ARRAYBUFFER 3 110938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4 111938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5 112938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_TEXTURE 6 113938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_SURFACE 7 114938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_EGL_SURFACE 8 115938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_GL 9 116938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL 10 117938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_BUFFER_MAP 11 118938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12 119938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_IMAGE_MAP 13 120938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14 121938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_KERNEL_STACK 15 122938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_COMMAND 16 123938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_2D 17 124938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_EGL_IMAGE 18 125938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_EGL_SHADOW 19 126938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_MULTISAMPLE 20 127938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_KERNEL 255 128938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 129938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 130938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Alignment hint, passed as the power of 2 exponent. 131938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * i.e 4k (2^12) would be 12, 64k (2^16)would be 16. 132938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 133938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMALIGN_MASK 0x00FF0000 134938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMALIGN_SHIFT 16 135938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 136a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilsonenum kgsl_user_mem_type { 137a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson KGSL_USER_MEM_TYPE_PMEM = 0x00000000, 138a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001, 139a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson KGSL_USER_MEM_TYPE_ADDR = 0x00000002, 140a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson KGSL_USER_MEM_TYPE_ION = 0x00000003, 141da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson KGSL_USER_MEM_TYPE_MAX = 0x00000007, 142a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson}; 143a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_MASK 0x000000e0 144a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_SHIFT 5 145a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson 146a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* 147a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * Unfortunately, enum kgsl_user_mem_type starts at 0 which does not 148a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * leave a good value for allocated memory. In the flags we use 149a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * 0 to indicate allocated memory and thus need to add 1 to the enum 150a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * values. 151a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson */ 152a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_USERMEM_FLAG(x) (((x) + 1) << KGSL_MEMFLAGS_USERMEM_SHIFT) 153a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson 154a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_NOT_USERMEM 0 155a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_PMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_PMEM) 156a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_ASHMEM \ 157a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ASHMEM) 158a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_ADDR KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ADDR) 159a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_ION KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ION) 160a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson 161938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* --- generic KGSL flag values --- */ 162938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 163938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_NORMALMODE 0x00000000 164938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_SAFEMODE 0x00000001 165938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_INITIALIZED0 0x00000002 166938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_INITIALIZED 0x00000004 167938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_STARTED 0x00000008 168938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_ACTIVE 0x00000010 169938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_RESERVED0 0x00000020 170938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_RESERVED1 0x00000040 171938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_RESERVED2 0x00000080 172938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_SOFT_RESET 0x00000100 173938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200 174938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 175938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Clock flags to show which clocks should be controled by a given platform */ 176938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_SRC 0x00000001 177938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_CORE 0x00000002 178938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_IFACE 0x00000004 179938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_MEM 0x00000008 180938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_MEM_IFACE 0x00000010 181938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_AXI 0x00000020 182938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 183938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Server Side Sync Timeout in milliseconds */ 184938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000 185938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 186938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 187938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Reset status values for context 188938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 189938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_ctx_reset_stat { 190938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CTX_STAT_NO_ERROR = 0x00000000, 191938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001, 192938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002, 193938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003 194938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 195938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 196938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONVERT_TO_MBPS(val) \ 197938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby (val*1000*1000U) 198938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 199938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* device id */ 200938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_deviceid { 201938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_DEVICE_3D0 = 0x00000000, 202938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_DEVICE_2D0 = 0x00000001, 203938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_DEVICE_2D1 = 0x00000002, 204938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_DEVICE_MAX = 0x00000003 205938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 206938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 207938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_devinfo { 208938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 209938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int device_id; 210938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby /* chip revision id 211938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * coreid:8 majorrev:8 minorrev:8 patch:8 212938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 213938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int chip_id; 214938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int mmu_enabled; 215938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gmem_gpubaseaddr; 216938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby /* 217938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This field contains the adreno revision 218938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * number 200, 205, 220, etc... 219938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 220938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int gpu_id; 221938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t gmem_sizebytes; 222938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 223938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 224938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* this structure defines the region of memory that can be mmap()ed from this 225938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby driver. The timestamp fields are volatile because they are written by the 226938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby GPU 227938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby*/ 228938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_devmemstore { 229938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby volatile unsigned int soptimestamp; 230938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int sbz; 231938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby volatile unsigned int eoptimestamp; 232938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int sbz2; 233938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby volatile unsigned int ts_cmp_enable; 234938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int sbz3; 235938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby volatile unsigned int ref_wait_ts; 236938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int sbz4; 237938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int current_context; 238938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int sbz5; 239938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 240938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 241938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \ 242938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby ((ctxt_id)*sizeof(struct kgsl_devmemstore) + \ 243938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby offsetof(struct kgsl_devmemstore, field)) 244938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 245938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* timestamp id*/ 246938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_timestamp_type { 247938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */ 248938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_TIMESTAMP_RETIRED = 0x00000002, /* end-of-pipeline timestamp*/ 249938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_TIMESTAMP_QUEUED = 0x00000003, 250938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 251938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 252938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* property types - used with kgsl_device_getproperty */ 253938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_property_type { 254938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_DEVICE_INFO = 0x00000001, 255938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_DEVICE_SHADOW = 0x00000002, 256938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_DEVICE_POWER = 0x00000003, 257938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_SHMEM = 0x00000004, 258938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_SHMEM_APERTURES = 0x00000005, 259938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_MMU_ENABLE = 0x00000006, 260938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_INTERRUPT_WAITS = 0x00000007, 261938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_VERSION = 0x00000008, 262938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_GPU_RESET_STAT = 0x00000009, 263938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_PROP_PWRCTRL = 0x0000000E, 264a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson KGSL_PROP_PWR_CONSTRAINT = 0x00000012, 265938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 266938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 267938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_shadowprop { 268938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 269938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t size; 270938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; /* contains KGSL_FLAGS_ values */ 271938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 272938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 273938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_version { 274938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int drv_major; 275938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int drv_minor; 276938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int dev_major; 277938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int dev_minor; 278938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 279938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 280938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Performance counter groups */ 281938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 282938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_CP 0x0 283938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_RBBM 0x1 284938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_PC 0x2 285938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VFD 0x3 286938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4 287938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VPC 0x5 288938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TSE 0x6 289938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_RAS 0x7 290938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_UCHE 0x8 291938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TP 0x9 292938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_SP 0xA 293938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_RB 0xB 294938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_PWR 0xC 295938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VBIF 0xD 296938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE 297938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_MH 0xF 298938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_PA_SU 0x10 299938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_SQ 0x11 300938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_SX 0x12 301938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TCF 0x13 302938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TCM 0x14 303938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TCR 0x15 304938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_L2 0x16 305938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VSC 0x17 306938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_CCU 0x18 307938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_MAX 0x19 308938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 309938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF 310938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE 311938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 312938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* structure holds list of ibs */ 313938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_ibdesc { 314938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 315938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long __pad; 316938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t sizedwords; 317938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int ctrl; 318938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 319938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 320da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/** 321da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_cmdbatch_profiling_buffer 322da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @wall_clock_s: Wall clock at ringbuffer submission time (seconds) 323da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @wall_clock_ns: Wall clock at ringbuffer submission time (nanoseconds) 324da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @gpu_ticks_queued: GPU ticks at ringbuffer submission 325da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @gpu_ticks_submitted: GPU ticks when starting cmdbatch execution 326da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @gpu_ticks_retired: GPU ticks when finishing cmdbatch execution 327da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * 328da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * This structure defines the profiling buffer used to measure cmdbatch 329da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * execution time 330da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 331da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_cmdbatch_profiling_buffer { 332da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson uint64_t wall_clock_s; 333da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson uint64_t wall_clock_ns; 334da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson uint64_t gpu_ticks_queued; 335da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson uint64_t gpu_ticks_submitted; 336da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson uint64_t gpu_ticks_retired; 337da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson}; 338da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 339938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* ioctls */ 340938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_IOC_TYPE 0x09 341938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 342938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* get misc info about the GPU 343938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby type should be a value from enum kgsl_property_type 344938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby value points to a structure that varies based on type 345938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby sizebytes is sizeof() that structure 346938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo 347938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby this structure contaings hardware versioning info. 348938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop 349938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby this is used to find mmap() offset and sizes for mapping 350938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby struct kgsl_memstore into userspace. 351938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby*/ 352938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_device_getproperty { 353938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int type; 354938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby void __user *value; 355938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t sizebytes; 356938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 357938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 358938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DEVICE_GETPROPERTY \ 359938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty) 360938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 361938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012 362938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 363938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 364938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* block until the GPU has executed past a given timestamp 365938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * timeout is in milliseconds. 366938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 367938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_device_waittimestamp { 368938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; 369938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timeout; 370938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 371938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 372938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \ 373938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp) 374938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 375938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_device_waittimestamp_ctxtid { 376938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int context_id; 377938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; 378938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timeout; 379938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 380938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 381938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \ 382938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid) 383938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 384938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* DEPRECATED: issue indirect commands to the GPU. 385938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE 386938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * ibaddr and sizedwords must specify a subset of a buffer created 387938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM 388938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * flags may be a mask of KGSL_CONTEXT_ values 389938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * timestamp is a returned counter value which can be passed to 390938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * other ioctls to determine when the commands have been executed by 391938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * the GPU. 392938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 393938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This fucntion is deprecated - consider using IOCTL_KGSL_SUBMIT_COMMANDS 394938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * instead 395938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 396938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_ringbuffer_issueibcmds { 397938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int drawctxt_id; 398938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long ibdesc_addr; 399938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int numibs; 400938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; /*output param */ 401938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 402938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 403938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 404938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \ 405938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds) 406938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 407938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* read the most recently executed timestamp value 408938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * type should be a value from enum kgsl_timestamp_type 409938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 410938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_readtimestamp { 411938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int type; 412938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; /*output param */ 413938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 414938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 415938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \ 416938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 417938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 418938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \ 419938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 420938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 421938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* free memory when the GPU reaches a given timestamp. 422938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * gpuaddr specify a memory region created by a 423938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call 424938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * type should be a value from enum kgsl_timestamp_type 425938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 426938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_freememontimestamp { 427938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 428938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int type; 429938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; 430938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 431938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 432938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \ 433938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 434938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 435938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Previous versions of this header had incorrectly defined 436938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead 437938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby of a write only ioctl. To ensure binary compatability, the following 438938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby #define will be used to intercept the incorrect ioctl 439938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby*/ 440938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 441938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \ 442938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 443938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 444938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* create a draw context, which is used to preserve GPU state. 445938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The flags field may contain a mask KGSL_CONTEXT_* values 446938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 447938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_drawctxt_create { 448938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 449938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int drawctxt_id; /*output param */ 450938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 451938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 452938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_CREATE \ 453938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create) 454938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 455938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* destroy a draw context */ 456938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_drawctxt_destroy { 457938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int drawctxt_id; 458938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 459938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 460938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_DESTROY \ 461938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy) 462938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 463938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* add a block of pmem, fb, ashmem or user allocated address 464938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * into the GPU address space */ 465938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_map_user_mem { 466938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int fd; 467938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; /*output param */ 468938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t len; 469938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t offset; 470938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long hostptr; /*input param */ 471938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby enum kgsl_user_mem_type memtype; 472938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 473938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 474938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 475938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_MAP_USER_MEM \ 476938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem) 477938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 478938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_readtimestamp_ctxtid { 479938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int context_id; 480938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int type; 481938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; /*output param */ 482938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 483938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 484938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \ 485938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid) 486938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 487938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_freememontimestamp_ctxtid { 488938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int context_id; 489938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 490938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int type; 491938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; 492938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 493938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 494938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \ 495938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x17, \ 496938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby struct kgsl_cmdstream_freememontimestamp_ctxtid) 497938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 498938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* add a block of pmem or fb into the GPU address space */ 499938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_sharedmem_from_pmem { 500938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int pmem_fd; 501938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; /*output param */ 502938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int len; 503938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int offset; 504938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 505938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 506938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \ 507938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem) 508938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 509938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* remove memory from the GPU's address space */ 510938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_sharedmem_free { 511938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 512938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 513938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 514938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FREE \ 515938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free) 516938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 517938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cff_user_event { 518938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned char cff_opcode; 519938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int op1; 520938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int op2; 521938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int op3; 522938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int op4; 523938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int op5; 524938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad[2]; 525938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 526938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 527938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CFF_USER_EVENT \ 528938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event) 529938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 530938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gmem_desc { 531938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int x; 532938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int y; 533938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int width; 534938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int height; 535938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int pitch; 536938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 537938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 538938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_buffer_desc { 539938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby void *hostptr; 540938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 541938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int size; 542938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int format; 543938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int pitch; 544938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int enabled; 545938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 546938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 547938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_bind_gmem_shadow { 548938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int drawctxt_id; 549938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby struct kgsl_gmem_desc gmem_desc; 550938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int shadow_x; 551938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int shadow_y; 552938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby struct kgsl_buffer_desc shadow_buffer; 553938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int buffer_id; 554938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 555938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 556938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \ 557938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow) 558938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 559938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* add a block of memory into the GPU address space */ 560938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 561938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 562938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012 563938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * use IOCTL_KGSL_GPUMEM_ALLOC instead 564938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 565938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 566938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_sharedmem_from_vmalloc { 567938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; /*output param */ 568938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int hostptr; 569938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 570938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 571938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 572938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \ 573938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc) 574938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 575938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 576938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This is being deprecated in favor of IOCTL_KGSL_GPUMEM_CACHE_SYNC which 577938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * supports both directions (flush and invalidate). This code will still 578938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * work, but by definition it will do a flush of the cache which might not be 579938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * what you want to have happen on a buffer following a GPU operation. It is 580938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * safer to go with IOCTL_KGSL_GPUMEM_CACHE_SYNC 581938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 582938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 583938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \ 584938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free) 585938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 586938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_drawctxt_set_bin_base_offset { 587938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int drawctxt_id; 588938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int offset; 589938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 590938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 591938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \ 592938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset) 593938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 594938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_cmdwindow_type { 595938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CMDWINDOW_MIN = 0x00000000, 596938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CMDWINDOW_2D = 0x00000000, 597938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CMDWINDOW_3D = 0x00000001, /* legacy */ 598938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CMDWINDOW_MMU = 0x00000002, 599938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CMDWINDOW_ARBITER = 0x000000FF, 600938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby KGSL_CMDWINDOW_MAX = 0x000000FF, 601938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 602938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 603938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* write to the command window */ 604938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdwindow_write { 605938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby enum kgsl_cmdwindow_type target; 606938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int addr; 607938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int data; 608938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 609938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 610938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDWINDOW_WRITE \ 611938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write) 612938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 613938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_alloc { 614938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; /* output param */ 615938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t size; 616938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 617938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 618938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 619938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_ALLOC \ 620938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc) 621938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 622938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cff_syncmem { 623938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 624938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t len; 625938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad[2]; /* For future binary compatibility */ 626938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 627938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 628938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CFF_SYNCMEM \ 629938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem) 630938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 631938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 632938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * A timestamp event allows the user space to register an action following an 633938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to 634938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * _IOWR to support fences which need to return a fd for the priv parameter. 635938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 636938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 637938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_timestamp_event { 638938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int type; /* Type of event (see list below) */ 639938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; /* Timestamp to trigger event on */ 640938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int context_id; /* Context for the timestamp */ 641938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby void __user *priv; /* Pointer to the event specific blob */ 642938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t len; /* Size of the event specific blob */ 643938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 644938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 645938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \ 646938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event) 647938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 648938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* A genlock timestamp event releases an existing lock on timestamp expire */ 649938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 650938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_TIMESTAMP_EVENT_GENLOCK 1 651938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 652938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_timestamp_event_genlock { 653938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int handle; /* Handle of the genlock lock to release */ 654938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 655938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 656938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* A fence timestamp event releases an existing lock on timestamp expire */ 657938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 658938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_TIMESTAMP_EVENT_FENCE 2 659938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 660938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_timestamp_event_fence { 661938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int fence_fd; /* Fence to signal */ 662938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 663938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 664938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 665938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Set a property within the kernel. Uses the same structure as 666938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_GETPROPERTY 667938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 668938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 669938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SETPROPERTY \ 670938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty) 671938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 672938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_TIMESTAMP_EVENT \ 673938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event) 674938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 675938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 676938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_alloc_id - argument to IOCTL_KGSL_GPUMEM_ALLOC_ID 677938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: returned id value for this allocation. 678938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @flags: mask of KGSL_MEM* values requested and actual flags on return. 679938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: requested size of the allocation and actual size on return. 680938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @mmapsize: returned size to pass to mmap() which may be larger than 'size' 681938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @gpuaddr: returned GPU address for the allocation 682938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 683938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Allocate memory for access by the GPU. The flags and size fields are echoed 684938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * back by the kernel, so that the caller can know if the request was 685938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * adjusted. 686938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 687938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Supported flags: 688938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMFLAGS_GPUREADONLY: the GPU will be unable to write to the buffer 689938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMTYPE*: usage hint for debugging aid 690938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMALIGN*: alignment hint, may be ignored or adjusted by the kernel. 691938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMFLAGS_USE_CPU_MAP: If set on call and return, the returned GPU 692938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * address will be 0. Calling mmap() will set the GPU address. 693938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 694938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_alloc_id { 695938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int id; 696938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 697938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t size; 698938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t mmapsize; 699938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 700938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use*/ 701938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long __pad[2]; 702938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 703938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 704938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_ALLOC_ID \ 705938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id) 706938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 707938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 708938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_free_id - argument to IOCTL_KGSL_GPUMEM_FREE_ID 709938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: GPU allocation id to free 710938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 711938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Free an allocation by id, in case a GPU address has not been assigned or 712938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * is unknown. Freeing an allocation by id with this ioctl or by GPU address 713938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * with IOCTL_KGSL_SHAREDMEM_FREE are equivalent. 714938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 715938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_free_id { 716938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int id; 717938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use*/ 718938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad; 719938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 720938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 721938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_FREE_ID \ 722938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id) 723938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 724938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 725938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_get_info - argument to IOCTL_KGSL_GPUMEM_GET_INFO 726938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @gpuaddr: GPU address to query. Also set on return. 727938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: GPU allocation id to query. Also set on return. 728938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @flags: returned mask of KGSL_MEM* values. 729938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: returned size of the allocation. 730938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @mmapsize: returned size to pass mmap(), which may be larger than 'size' 731938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @useraddr: returned address of the userspace mapping for this buffer 732938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 733938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This ioctl allows querying of all user visible attributes of an existing 734938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * allocation, by either the GPU address or the id returned by a previous 735938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * call to IOCTL_KGSL_GPUMEM_ALLOC_ID. Legacy allocation ioctls may not 736938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * return all attributes so this ioctl can be used to look them up if needed. 737938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 738938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 739938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_get_info { 740938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 741938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int id; 742938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 743938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t size; 744938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t mmapsize; 745938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long useraddr; 746938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use*/ 747938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long __pad[4]; 748938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 749938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 750938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_GET_INFO\ 751938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info) 752938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 753938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 754938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_sync_cache - argument to IOCTL_KGSL_GPUMEM_SYNC_CACHE 755938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @gpuaddr: GPU address of the buffer to sync. 756938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: id of the buffer to sync. Either gpuaddr or id is sufficient. 757938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @op: a mask of KGSL_GPUMEM_CACHE_* values 758da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @offset: offset into the buffer 759da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @length: number of bytes starting from offset to perform 760da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * the cache operation on 761938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 762938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Sync the L2 cache for memory headed to and from the GPU - this replaces 763938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_SHAREDMEM_FLUSH_CACHE since it can handle cache management for both 764938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * directions 765938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 766938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 767938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_sync_cache { 768938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long gpuaddr; 769938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int id; 770938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int op; 771da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson size_t offset; 772da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson size_t length; 773938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 774938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 775938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_CLEAN (1 << 0) 776938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN 777938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 778938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_INV (1 << 1) 779938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV 780938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 781938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_FLUSH \ 782938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby (KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV) 783938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 784da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Flag to ensure backwards compatibility of kgsl_gpumem_sync_cache struct */ 785da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_GPUMEM_CACHE_RANGE (1 << 31U) 786da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 787938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_SYNC_CACHE \ 788938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache) 789938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 790938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 791938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_get - argument to IOCTL_KGSL_PERFCOUNTER_GET 792938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group ID 793938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Countable to select within the group 794938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @offset: Return offset of the reserved LO counter 795938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @offset_hi: Return offset of the reserved HI counter 796938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 797938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Get an available performance counter from a specified groupid. The offset 798938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * of the performance counter will be returned after successfully assigning 799938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * the countable to the counter for the specified group. An error will be 800938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * returned and an offset of 0 if the groupid is invalid or there are no 801938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * more counters left. After successfully getting a perfcounter, the user 802938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * must call kgsl_perfcounter_put(groupid, contable) when finished with 803938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * the perfcounter to clear up perfcounter resources. 804938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 805938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 806938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_get { 807938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int groupid; 808938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int countable; 809938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int offset; 810938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int offset_hi; 811938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */ 812938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad; /* For future binary compatibility */ 813938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 814938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 815938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_GET \ 816938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get) 817938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 818938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 819938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_put - argument to IOCTL_KGSL_PERFCOUNTER_PUT 820938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group ID 821938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Countable to release within the group 822938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 823938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Put an allocated performance counter to allow others to have access to the 824938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * resource that was previously taken. This is only to be called after 825938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * successfully getting a performance counter from kgsl_perfcounter_get(). 826938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 827938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 828938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_put { 829938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int groupid; 830938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int countable; 831938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */ 832938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad[2]; /* For future binary compatibility */ 833938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 834938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 835938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_PUT \ 836938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put) 837938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 838938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 839938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 840938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group ID 841938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Return active countables array 842938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: Size of active countables array 843938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @max_counters: Return total number counters for the group ID 844938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 845938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Query the available performance counters given a groupid. The array 846938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * *countables is used to return the current active countables in counters. 847938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The size of the array is passed in so the kernel will only write at most 848938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * size or counter->size for the group id. The total number of available 849938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * counters for the group ID is returned in max_counters. 850938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * If the array or size passed in are invalid, then only the maximum number 851938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * of counters will be returned, no data will be written to *countables. 852938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * If the groupid is invalid an error code will be returned. 853938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 854938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 855938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_query { 856938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int groupid; 857938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby /* Array to return the current countable for up to size counters */ 858938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __user *countables; 859938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int count; 860938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int max_counters; 861938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */ 862938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad[2]; /* For future binary compatibility */ 863938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 864938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 865938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_QUERY \ 866938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query) 867938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 868938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 869938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 870938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group IDs 871938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Performance counter countable IDs 872938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @value: Return performance counter reads 873938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: Size of all arrays (groupid/countable pair and return value) 874938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 875938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Read in the current value of a performance counter given by the groupid 876938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * and countable. 877938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 878938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 879938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 880938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_read_group { 881938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int groupid; 882938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int countable; 883938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned long long value; 884938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 885938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 886938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_read { 887938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby struct kgsl_perfcounter_read_group __user *reads; 888938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int count; 889938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */ 890938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad[2]; /* For future binary compatibility */ 891938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 892938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 893938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_READ \ 894938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read) 895938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 896938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_sync_cache_bulk - argument to 897938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK 898938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id_list: list of GPU buffer ids of the buffers to sync 899938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @count: number of GPU buffer ids in id_list 900938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @op: a mask of KGSL_GPUMEM_CACHE_* values 901938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 902938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Sync the cache for memory headed to and from the GPU. Certain 903938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * optimizations can be made on the cache operation based on the total 904938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * size of the working set of memory to be managed. 905938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 906938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_sync_cache_bulk { 907938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __user *id_list; 908938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int count; 909938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int op; 910938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */ 911938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad[2]; /* For future binary compatibility */ 912938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 913938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 914938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK \ 915938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk) 916938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 917938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* 918938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_cmd_syncpoint_timestamp 919938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @context_id: ID of a KGSL context 920938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @timestamp: GPU timestamp 921938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 922938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This structure defines a syncpoint comprising a context/timestamp pair. A 923938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * list of these may be passed by IOCTL_KGSL_SUBMIT_COMMANDS to define 924938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * dependencies that must be met before the command can be submitted to the 925938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * hardware 926938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 927938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmd_syncpoint_timestamp { 928938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int context_id; 929938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; 930938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 931938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 932938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0 933938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 934938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmd_syncpoint_fence { 935938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int fd; 936938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 937938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 938938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1 939938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 940938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 941938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_cmd_syncpoint - Define a sync point for a command batch 942938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @type: type of sync point defined here 943938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @priv: Pointer to the type specific buffer 944938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: Size of the type specific buffer 945938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 946938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This structure contains pointers defining a specific command sync point. 947938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The pointer and size should point to a type appropriate structure. 948938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 949938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmd_syncpoint { 950938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby int type; 951938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby void __user *priv; 952938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby size_t size; 953938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 954938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 955da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Flag to indicate that the cmdlist may contain memlists */ 956da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_IBDESC_MEMLIST 0x1 957da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 958da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Flag to point out the cmdbatch profiling buffer in the memlist */ 959da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_IBDESC_PROFILING_BUFFER 0x2 960da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 961938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/** 962938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_submit_commands - Argument to IOCTL_KGSL_SUBMIT_COMMANDS 963938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @context_id: KGSL context ID that owns the commands 964938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @flags: 965938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @cmdlist: User pointer to a list of kgsl_ibdesc structures 966938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @numcmds: Number of commands listed in cmdlist 967938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @synclist: User pointer to a list of kgsl_cmd_syncpoint structures 968938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @numsyncs: Number of sync points listed in synclist 969938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @timestamp: On entry the a user defined timestamp, on exist the timestamp 970938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * assigned to the command batch 971938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * 972938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This structure specifies a command to send to the GPU hardware. This is 973938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * similar to kgsl_issueibcmds expect that it doesn't support the legacy way to 974938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * submit IB lists and it adds sync points to block the IB until the 975938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * dependencies are satisified. This entry point is the new and preferred way 976da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * to submit commands to the GPU. The memory list can be used to specify all 977da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * memory that is referrenced in the current set of commands. 978938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */ 979938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 980938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_submit_commands { 981938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int context_id; 982938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int flags; 983938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby struct kgsl_ibdesc __user *cmdlist; 984938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int numcmds; 985938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby struct kgsl_cmd_syncpoint __user *synclist; 986938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int numsyncs; 987938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int timestamp; 988938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */ 989938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby unsigned int __pad[4]; 990938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby}; 991938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 992938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SUBMIT_COMMANDS \ 993938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands) 994938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby 995a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/** 996a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * struct kgsl_device_constraint - device constraint argument 997a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @context_id: KGSL context ID 998a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @type: type of constraint i.e pwrlevel/none 999a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @data: constraint data 1000a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @size: size of the constraint data 1001a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson */ 1002a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilsonstruct kgsl_device_constraint { 1003a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson unsigned int type; 1004a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson unsigned int context_id; 1005a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson void __user *data; 1006a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson size_t size; 1007a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson}; 1008a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson 1009a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* Constraint Type*/ 1010a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_NONE 0 1011a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_PWRLEVEL 1 1012a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson 1013a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* PWRLEVEL constraint level*/ 1014a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* set to min frequency */ 1015a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_PWR_MIN 0 1016a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* set to max frequency */ 1017a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_PWR_MAX 1 1018a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson 1019a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilsonstruct kgsl_device_constraint_pwrlevel { 1020a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson unsigned int level; 1021a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson}; 1022da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1023da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/** 1024da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_create - Argument to IOCTL_KGSL_SYNCSOURCE_CREATE 1025da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: returned id for the syncsource that was created. 1026da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * 1027da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * This ioctl creates a userspace sync timeline. 1028da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 1029da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1030da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_create { 1031da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int id; 1032da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */ 1033da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int __pad[3]; 1034da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson}; 1035da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1036da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_CREATE \ 1037da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson _IOWR(KGSL_IOC_TYPE, 0x40, struct kgsl_syncsource_create) 1038da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1039da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/** 1040da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_destroy - Argument to IOCTL_KGSL_SYNCSOURCE_DESTROY 1041da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: syncsource id to destroy 1042da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * 1043da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * This ioctl creates a userspace sync timeline. 1044da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 1045da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1046da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_destroy { 1047da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int id; 1048da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */ 1049da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int __pad[3]; 1050da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson}; 1051da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1052da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_DESTROY \ 1053da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson _IOWR(KGSL_IOC_TYPE, 0x41, struct kgsl_syncsource_destroy) 1054da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1055da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/** 1056da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_create_fence - Argument to 1057da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 1058da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: syncsource id 1059da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @fence_fd: returned sync_fence fd 1060da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * 1061da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * Create a fence that may be signaled by userspace by calling 1062da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE. There are no order dependencies between 1063da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * these fences. 1064da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 1065da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_create_fence { 1066da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int id; 1067da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson int fence_fd; 1068da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */ 1069da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int __pad[4]; 1070da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson}; 1071da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1072da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/** 1073da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_signal_fence - Argument to 1074da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE 1075da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: syncsource id 1076da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @fence_fd: sync_fence fd to signal 1077da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * 1078da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * Signal a fence that was created by a IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 1079da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * call using the same syncsource id. This allows a fence to be shared 1080da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * to other processes but only signaled by the process owning the fd 1081da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * used to create the fence. 1082da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */ 1083da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE \ 1084da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson _IOWR(KGSL_IOC_TYPE, 0x42, struct kgsl_syncsource_create_fence) 1085da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1086da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_signal_fence { 1087da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int id; 1088da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson int fence_fd; 1089da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */ 1090da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson unsigned int __pad[4]; 1091da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson}; 1092da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1093da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE \ 1094da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson _IOWR(KGSL_IOC_TYPE, 0x43, struct kgsl_syncsource_signal_fence) 1095da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson 1096938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#endif /* _UAPI_MSM_KGSL_H */ 1097