14d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#ifndef _UAPI_MSM_KGSL_H 24d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define _UAPI_MSM_KGSL_H 34d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 44d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 54d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * The KGSL version has proven not to be very useful in userspace if features 64d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * are cherry picked into other trees out of order so it is frozen as of 3.14. 74d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * It is left here for backwards compatabilty and as a reminder that 84d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * software releases are never linear. Also, I like pie. 94d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_VERSION_MAJOR 3 124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_VERSION_MINOR 14 134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * We have traditionally mixed context and issueibcmds / command batch flags 164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * together into a big flag stew. This worked fine until we started adding a 174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * lot more command batch flags and we started running out of bits. Turns out 184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * we have a bit of room in the context type / priority mask that we could use 194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * for command batches, but that means we need to split out the flags into two 204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * coherent sets. 214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * If any future definitions are for both context and cmdbatch add both defines 234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * and link the cmdbatch to the context define as we do below. Otherwise feel 244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * free to add exclusive bits to either set. 254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* --- context flags --- */ 284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_SAVE_GMEM 0x00000001 294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002 304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004 324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_CTX_SWITCH 0x00000008 334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_PREAMBLE 0x00000010 344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TRASH_STATE 0x00000020 354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040 364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080 374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_END_OF_FRAME 0x00000100 394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200 404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_SYNC 0x00000400 424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_PWR_CONSTRAINT 0x00000800 434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_PRIORITY_MASK 0x0000F000 454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_PRIORITY_SHIFT 12 464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_PRIORITY_UNDEF 0 474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_IFH_NOP 0x00010000 494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_SECURE 0x00020000 504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_MASK 0x01F00000 524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_SHIFT 20 534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_ANY 0 544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_GL 1 554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_CL 2 564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_C2D 3 574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_RS 4 584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_TYPE_UNKNOWN 0x1E 594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONTEXT_INVALID 0xffffffff 614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * --- command batch flags --- 644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * The bits that are linked to a KGSL_CONTEXT equivalent are either legacy 654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * definitions or bits that are valid for both contexts and cmdbatches. To be 664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * safe the other 8 bits that are still available in the context field should be 674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * omitted here in case we need to share - the other bits are available for 684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * cmdbatch only flags as needed 694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_MEMLIST 0x00000001 714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_MARKER 0x00000002 724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_SUBMIT_IB_LIST KGSL_CONTEXT_SUBMIT_IB_LIST /* 0x004 */ 734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_CTX_SWITCH KGSL_CONTEXT_CTX_SWITCH /* 0x008 */ 744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_PROFILING 0x00000010 754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_END_OF_FRAME KGSL_CONTEXT_END_OF_FRAME /* 0x100 */ 764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_SYNC KGSL_CONTEXT_SYNC /* 0x400 */ 774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMDBATCH_PWR_CONSTRAINT KGSL_CONTEXT_PWR_CONSTRAINT /* 0x800 */ 784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Reserve bits [16:19] and bits [28:31] for possible bits shared between 814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * contexts and command batches. Update this comment as new flags are added. 824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* --- Memory allocation flags --- */ 854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* General allocation hints */ 874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000 884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000 894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Memory is secure */ 914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_SECURE 0x00000008 924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Memory caching hints */ 944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CACHEMODE_MASK 0x0C000000 954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CACHEMODE_SHIFT 26 964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CACHEMODE_WRITECOMBINE 0 984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CACHEMODE_UNCACHED 1 994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CACHEMODE_WRITETHROUGH 2 1004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CACHEMODE_WRITEBACK 3 1014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Memory types for which allocations are made */ 1034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_MASK 0x0000FF00 1044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_SHIFT 8 1054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_OBJECTANY 0 1074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_FRAMEBUFFER 1 1084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_RENDERBUFFER 2 1094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_ARRAYBUFFER 3 1104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4 1114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5 1124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_TEXTURE 6 1134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_SURFACE 7 1144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_EGL_SURFACE 8 1154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_GL 9 1164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_CL 10 1174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_CL_BUFFER_MAP 11 1184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12 1194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_CL_IMAGE_MAP 13 1204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14 1214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_CL_KERNEL_STACK 15 1224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_COMMAND 16 1234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_2D 17 1244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_EGL_IMAGE 18 1254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_EGL_SHADOW 19 1264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_MULTISAMPLE 20 1274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMTYPE_KERNEL 255 1284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 1304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Alignment hint, passed as the power of 2 exponent. 1314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * i.e 4k (2^12) would be 12, 64k (2^16)would be 16. 1324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 1334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMALIGN_MASK 0x00FF0000 1344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMALIGN_SHIFT 16 1354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum kgsl_user_mem_type { 1374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_USER_MEM_TYPE_PMEM = 0x00000000, 1384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001, 1394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_USER_MEM_TYPE_ADDR = 0x00000002, 1404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_USER_MEM_TYPE_ION = 0x00000003, 1414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_USER_MEM_TYPE_MAX = 0x00000007, 1424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_MASK 0x000000e0 1444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_SHIFT 5 1454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 1474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Unfortunately, enum kgsl_user_mem_type starts at 0 which does not 1484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * leave a good value for allocated memory. In the flags we use 1494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 0 to indicate allocated memory and thus need to add 1 to the enum 1504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * values. 1514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 1524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_USERMEM_FLAG(x) (((x) + 1) << KGSL_MEMFLAGS_USERMEM_SHIFT) 1534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_NOT_USERMEM 0 1554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_PMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_PMEM) 1564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_ASHMEM \ 1574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ASHMEM) 1584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_ADDR KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ADDR) 1594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_ION KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ION) 1604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* --- generic KGSL flag values --- */ 1624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_NORMALMODE 0x00000000 1644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_SAFEMODE 0x00000001 1654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_INITIALIZED0 0x00000002 1664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_INITIALIZED 0x00000004 1674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_STARTED 0x00000008 1684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_ACTIVE 0x00000010 1694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_RESERVED0 0x00000020 1704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_RESERVED1 0x00000040 1714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_RESERVED2 0x00000080 1724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_SOFT_RESET 0x00000100 1734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200 1744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Clock flags to show which clocks should be controled by a given platform */ 1764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CLK_SRC 0x00000001 1774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CLK_CORE 0x00000002 1784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CLK_IFACE 0x00000004 1794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CLK_MEM 0x00000008 1804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CLK_MEM_IFACE 0x00000010 1814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CLK_AXI 0x00000020 1824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Server Side Sync Timeout in milliseconds */ 1844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000 1854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 1874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Reset status values for context 1884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 1894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum kgsl_ctx_reset_stat { 1904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CTX_STAT_NO_ERROR = 0x00000000, 1914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001, 1924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002, 1934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003 1944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONVERT_TO_MBPS(val) \ 1974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin (val*1000*1000U) 1984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* device id */ 2004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum kgsl_deviceid { 2014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_DEVICE_3D0 = 0x00000000, 2024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_DEVICE_2D0 = 0x00000001, 2034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_DEVICE_2D1 = 0x00000002, 2044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_DEVICE_MAX = 0x00000003 2054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_devinfo { 2084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int device_id; 2104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* chip revision id 2114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * coreid:8 majorrev:8 minorrev:8 patch:8 2124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 2134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int chip_id; 2144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int mmu_enabled; 2154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gmem_gpubaseaddr; 2164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* 2174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This field contains the adreno revision 2184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * number 200, 205, 220, etc... 2194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 2204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int gpu_id; 2214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t gmem_sizebytes; 2224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* this structure defines the region of memory that can be mmap()ed from this 2254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin driver. The timestamp fields are volatile because they are written by the 2264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin GPU 2274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin*/ 2284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_devmemstore { 2294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin volatile unsigned int soptimestamp; 2304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int sbz; 2314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin volatile unsigned int eoptimestamp; 2324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int sbz2; 2334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin volatile unsigned int ts_cmp_enable; 2344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int sbz3; 2354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin volatile unsigned int ref_wait_ts; 2364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int sbz4; 2374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int current_context; 2384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int sbz5; 2394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \ 2424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin ((ctxt_id)*sizeof(struct kgsl_devmemstore) + \ 2434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin offsetof(struct kgsl_devmemstore, field)) 2444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* timestamp id*/ 2464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum kgsl_timestamp_type { 2474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */ 2484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_TIMESTAMP_RETIRED = 0x00000002, /* end-of-pipeline timestamp*/ 2494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_TIMESTAMP_QUEUED = 0x00000003, 2504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* property types - used with kgsl_device_getproperty */ 2534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum kgsl_property_type { 2544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_DEVICE_INFO = 0x00000001, 2554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_DEVICE_SHADOW = 0x00000002, 2564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_DEVICE_POWER = 0x00000003, 2574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_SHMEM = 0x00000004, 2584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_SHMEM_APERTURES = 0x00000005, 2594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_MMU_ENABLE = 0x00000006, 2604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_INTERRUPT_WAITS = 0x00000007, 2614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_VERSION = 0x00000008, 2624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_GPU_RESET_STAT = 0x00000009, 2634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_PWRCTRL = 0x0000000E, 2644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_PROP_PWR_CONSTRAINT = 0x00000012, 2654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_shadowprop { 2684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 2694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t size; 2704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; /* contains KGSL_FLAGS_ values */ 2714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_version { 2744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int drv_major; 2754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int drv_minor; 2764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int dev_major; 2774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int dev_minor; 2784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Performance counter groups */ 2814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_CP 0x0 2834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_RBBM 0x1 2844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_PC 0x2 2854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VFD 0x3 2864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4 2874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VPC 0x5 2884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TSE 0x6 2894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_RAS 0x7 2904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_UCHE 0x8 2914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TP 0x9 2924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_SP 0xA 2934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_RB 0xB 2944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_PWR 0xC 2954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VBIF 0xD 2964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE 2974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_MH 0xF 2984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_PA_SU 0x10 2994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_SQ 0x11 3004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_SX 0x12 3014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TCF 0x13 3024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TCM 0x14 3034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TCR 0x15 3044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_L2 0x16 3054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VSC 0x17 3064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_CCU 0x18 3074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_ALWAYSON 0x1B 3084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_MAX 0x1C 3094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF 3114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE 3124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* structure holds list of ibs */ 3144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_ibdesc { 3154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 3164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long __pad; 3174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t sizedwords; 3184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int ctrl; 3194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 3224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_cmdbatch_profiling_buffer 3234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @wall_clock_s: Wall clock at ringbuffer submission time (seconds) 3244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @wall_clock_ns: Wall clock at ringbuffer submission time (nanoseconds) 3254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @gpu_ticks_queued: GPU ticks at ringbuffer submission 3264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @gpu_ticks_submitted: GPU ticks when starting cmdbatch execution 3274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @gpu_ticks_retired: GPU ticks when finishing cmdbatch execution 3284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 3294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This structure defines the profiling buffer used to measure cmdbatch 3304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * execution time 3314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmdbatch_profiling_buffer { 3334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin uint64_t wall_clock_s; 3344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin uint64_t wall_clock_ns; 3354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin uint64_t gpu_ticks_queued; 3364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin uint64_t gpu_ticks_submitted; 3374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin uint64_t gpu_ticks_retired; 3384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* ioctls */ 3414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_IOC_TYPE 0x09 3424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* get misc info about the GPU 3444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin type should be a value from enum kgsl_property_type 3454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin value points to a structure that varies based on type 3464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin sizebytes is sizeof() that structure 3474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo 3484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin this structure contaings hardware versioning info. 3494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop 3504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin this is used to find mmap() offset and sizes for mapping 3514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct kgsl_memstore into userspace. 3524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin*/ 3534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_device_getproperty { 3544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int type; 3554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin void __user *value; 3564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t sizebytes; 3574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_DEVICE_GETPROPERTY \ 3604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty) 3614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012 3634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* block until the GPU has executed past a given timestamp 3664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * timeout is in milliseconds. 3674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_device_waittimestamp { 3694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; 3704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timeout; 3714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \ 3744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp) 3754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_device_waittimestamp_ctxtid { 3774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int context_id; 3784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; 3794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timeout; 3804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \ 3834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid) 3844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* DEPRECATED: issue indirect commands to the GPU. 3864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE 3874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * ibaddr and sizedwords must specify a subset of a buffer created 3884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM 3894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * flags may be a mask of KGSL_CONTEXT_ values 3904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * timestamp is a returned counter value which can be passed to 3914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * other ioctls to determine when the commands have been executed by 3924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * the GPU. 3934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 3944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This fucntion is deprecated - consider using IOCTL_KGSL_SUBMIT_COMMANDS 3954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * instead 3964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_ringbuffer_issueibcmds { 3984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int drawctxt_id; 3994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long ibdesc_addr; 4004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int numibs; 4014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; /*output param */ 4024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 4034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \ 4064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds) 4074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* read the most recently executed timestamp value 4094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * type should be a value from enum kgsl_timestamp_type 4104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 4114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmdstream_readtimestamp { 4124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int type; 4134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; /*output param */ 4144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \ 4174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 4184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \ 4204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 4214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* free memory when the GPU reaches a given timestamp. 4234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * gpuaddr specify a memory region created by a 4244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call 4254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * type should be a value from enum kgsl_timestamp_type 4264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 4274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmdstream_freememontimestamp { 4284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 4294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int type; 4304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; 4314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \ 4344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 4354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Previous versions of this header had incorrectly defined 4374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead 4384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin of a write only ioctl. To ensure binary compatability, the following 4394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin #define will be used to intercept the incorrect ioctl 4404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin*/ 4414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \ 4434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 4444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* create a draw context, which is used to preserve GPU state. 4464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * The flags field may contain a mask KGSL_CONTEXT_* values 4474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 4484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_drawctxt_create { 4494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 4504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int drawctxt_id; /*output param */ 4514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_CREATE \ 4544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create) 4554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* destroy a draw context */ 4574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_drawctxt_destroy { 4584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int drawctxt_id; 4594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_DESTROY \ 4624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy) 4634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* add a block of pmem, fb, ashmem or user allocated address 4654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * into the GPU address space */ 4664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_map_user_mem { 4674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int fd; 4684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; /*output param */ 4694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t len; 4704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t offset; 4714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long hostptr; /*input param */ 4724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin enum kgsl_user_mem_type memtype; 4734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 4744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_MAP_USER_MEM \ 4774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem) 4784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmdstream_readtimestamp_ctxtid { 4804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int context_id; 4814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int type; 4824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; /*output param */ 4834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \ 4864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid) 4874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmdstream_freememontimestamp_ctxtid { 4894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int context_id; 4904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 4914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int type; 4924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; 4934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \ 4964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x17, \ 4974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct kgsl_cmdstream_freememontimestamp_ctxtid) 4984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* add a block of pmem or fb into the GPU address space */ 5004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_sharedmem_from_pmem { 5014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int pmem_fd; 5024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; /*output param */ 5034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int len; 5044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int offset; 5054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \ 5084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem) 5094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* remove memory from the GPU's address space */ 5114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_sharedmem_free { 5124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 5134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FREE \ 5164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free) 5174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cff_user_event { 5194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char cff_opcode; 5204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int op1; 5214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int op2; 5224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int op3; 5234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int op4; 5244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int op5; 5254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[2]; 5264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CFF_USER_EVENT \ 5294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event) 5304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_gmem_desc { 5324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int x; 5334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int y; 5344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int width; 5354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int height; 5364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int pitch; 5374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_buffer_desc { 5404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin void *hostptr; 5414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 5424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int size; 5434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int format; 5444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int pitch; 5454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int enabled; 5464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_bind_gmem_shadow { 5494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int drawctxt_id; 5504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct kgsl_gmem_desc gmem_desc; 5514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int shadow_x; 5524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int shadow_y; 5534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct kgsl_buffer_desc shadow_buffer; 5544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int buffer_id; 5554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \ 5584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow) 5594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* add a block of memory into the GPU address space */ 5614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 5634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012 5644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * use IOCTL_KGSL_GPUMEM_ALLOC instead 5654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 5664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_sharedmem_from_vmalloc { 5684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; /*output param */ 5694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int hostptr; 5704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 5714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \ 5744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc) 5754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 5774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This is being deprecated in favor of IOCTL_KGSL_GPUMEM_CACHE_SYNC which 5784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * supports both directions (flush and invalidate). This code will still 5794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * work, but by definition it will do a flush of the cache which might not be 5804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * what you want to have happen on a buffer following a GPU operation. It is 5814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * safer to go with IOCTL_KGSL_GPUMEM_CACHE_SYNC 5824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 5834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \ 5854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free) 5864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_drawctxt_set_bin_base_offset { 5884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int drawctxt_id; 5894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int offset; 5904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \ 5934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset) 5944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum kgsl_cmdwindow_type { 5964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CMDWINDOW_MIN = 0x00000000, 5974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CMDWINDOW_2D = 0x00000000, 5984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CMDWINDOW_3D = 0x00000001, /* legacy */ 5994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CMDWINDOW_MMU = 0x00000002, 6004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CMDWINDOW_ARBITER = 0x000000FF, 6014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin KGSL_CMDWINDOW_MAX = 0x000000FF, 6024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* write to the command window */ 6054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmdwindow_write { 6064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin enum kgsl_cmdwindow_type target; 6074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int addr; 6084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int data; 6094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CMDWINDOW_WRITE \ 6124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write) 6134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_gpumem_alloc { 6154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; /* output param */ 6164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t size; 6174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 6184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_GPUMEM_ALLOC \ 6214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc) 6224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cff_syncmem { 6244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 6254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t len; 6264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 6274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_CFF_SYNCMEM \ 6304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem) 6314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 6334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * A timestamp event allows the user space to register an action following an 6344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to 6354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * _IOWR to support fences which need to return a fd for the priv parameter. 6364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 6374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_timestamp_event { 6394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int type; /* Type of event (see list below) */ 6404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; /* Timestamp to trigger event on */ 6414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int context_id; /* Context for the timestamp */ 6424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin void __user *priv; /* Pointer to the event specific blob */ 6434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t len; /* Size of the event specific blob */ 6444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \ 6474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event) 6484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* A genlock timestamp event releases an existing lock on timestamp expire */ 6504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_TIMESTAMP_EVENT_GENLOCK 1 6524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_timestamp_event_genlock { 6544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int handle; /* Handle of the genlock lock to release */ 6554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* A fence timestamp event releases an existing lock on timestamp expire */ 6584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_TIMESTAMP_EVENT_FENCE 2 6604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_timestamp_event_fence { 6624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int fence_fd; /* Fence to signal */ 6634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 6664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Set a property within the kernel. Uses the same structure as 6674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * IOCTL_KGSL_GETPROPERTY 6684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 6694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SETPROPERTY \ 6714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty) 6724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_TIMESTAMP_EVENT \ 6744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event) 6754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 6774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_gpumem_alloc_id - argument to IOCTL_KGSL_GPUMEM_ALLOC_ID 6784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: returned id value for this allocation. 6794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @flags: mask of KGSL_MEM* values requested and actual flags on return. 6804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @size: requested size of the allocation and actual size on return. 6814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @mmapsize: returned size to pass to mmap() which may be larger than 'size' 6824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @gpuaddr: returned GPU address for the allocation 6834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 6844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Allocate memory for access by the GPU. The flags and size fields are echoed 6854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * back by the kernel, so that the caller can know if the request was 6864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * adjusted. 6874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 6884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Supported flags: 6894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * KGSL_MEMFLAGS_GPUREADONLY: the GPU will be unable to write to the buffer 6904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * KGSL_MEMTYPE*: usage hint for debugging aid 6914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * KGSL_MEMALIGN*: alignment hint, may be ignored or adjusted by the kernel. 6924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * KGSL_MEMFLAGS_USE_CPU_MAP: If set on call and return, the returned GPU 6934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * address will be 0. Calling mmap() will set the GPU address. 6944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 6954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_gpumem_alloc_id { 6964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 6974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 6984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t size; 6994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t mmapsize; 7004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 7014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use*/ 7024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long __pad[2]; 7034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_GPUMEM_ALLOC_ID \ 7064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id) 7074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 7094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_gpumem_free_id - argument to IOCTL_KGSL_GPUMEM_FREE_ID 7104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: GPU allocation id to free 7114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 7124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Free an allocation by id, in case a GPU address has not been assigned or 7134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * is unknown. Freeing an allocation by id with this ioctl or by GPU address 7144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * with IOCTL_KGSL_SHAREDMEM_FREE are equivalent. 7154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 7164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_gpumem_free_id { 7174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 7184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use*/ 7194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad; 7204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_GPUMEM_FREE_ID \ 7234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id) 7244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 7264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_gpumem_get_info - argument to IOCTL_KGSL_GPUMEM_GET_INFO 7274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @gpuaddr: GPU address to query. Also set on return. 7284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: GPU allocation id to query. Also set on return. 7294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @flags: returned mask of KGSL_MEM* values. 7304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @size: returned size of the allocation. 7314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @mmapsize: returned size to pass mmap(), which may be larger than 'size' 7324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @useraddr: returned address of the userspace mapping for this buffer 7334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 7344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This ioctl allows querying of all user visible attributes of an existing 7354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * allocation, by either the GPU address or the id returned by a previous 7364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * call to IOCTL_KGSL_GPUMEM_ALLOC_ID. Legacy allocation ioctls may not 7374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * return all attributes so this ioctl can be used to look them up if needed. 7384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 7394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 7404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_gpumem_get_info { 7414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 7424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 7434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 7444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t size; 7454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t mmapsize; 7464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long useraddr; 7474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use*/ 7484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long __pad[4]; 7494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_GPUMEM_GET_INFO\ 7524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info) 7534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 7554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_gpumem_sync_cache - argument to IOCTL_KGSL_GPUMEM_SYNC_CACHE 7564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @gpuaddr: GPU address of the buffer to sync. 7574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: id of the buffer to sync. Either gpuaddr or id is sufficient. 7584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @op: a mask of KGSL_GPUMEM_CACHE_* values 7594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @offset: offset into the buffer 7604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @length: number of bytes starting from offset to perform 7614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * the cache operation on 7624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 7634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Sync the L2 cache for memory headed to and from the GPU - this replaces 7644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * KGSL_SHAREDMEM_FLUSH_CACHE since it can handle cache management for both 7654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * directions 7664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 7674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 7684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_gpumem_sync_cache { 7694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long gpuaddr; 7704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 7714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int op; 7724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t offset; 7734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t length; 7744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_GPUMEM_CACHE_CLEAN (1 << 0) 7774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN 7784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_GPUMEM_CACHE_INV (1 << 1) 7804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV 7814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_GPUMEM_CACHE_FLUSH \ 7834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin (KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV) 7844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Flag to ensure backwards compatibility of kgsl_gpumem_sync_cache struct */ 7864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_GPUMEM_CACHE_RANGE (1 << 31U) 7874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_GPUMEM_SYNC_CACHE \ 7894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache) 7904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 7924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_perfcounter_get - argument to IOCTL_KGSL_PERFCOUNTER_GET 7934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @groupid: Performance counter group ID 7944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @countable: Countable to select within the group 7954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @offset: Return offset of the reserved LO counter 7964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @offset_hi: Return offset of the reserved HI counter 7974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 7984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Get an available performance counter from a specified groupid. The offset 7994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * of the performance counter will be returned after successfully assigning 8004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * the countable to the counter for the specified group. An error will be 8014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * returned and an offset of 0 if the groupid is invalid or there are no 8024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * more counters left. After successfully getting a perfcounter, the user 8034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * must call kgsl_perfcounter_put(groupid, contable) when finished with 8044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * the perfcounter to clear up perfcounter resources. 8054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 8064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 8074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_perfcounter_get { 8084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int groupid; 8094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int countable; 8104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int offset; 8114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int offset_hi; 8124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 8134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad; /* For future binary compatibility */ 8144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_GET \ 8174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get) 8184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 8204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_perfcounter_put - argument to IOCTL_KGSL_PERFCOUNTER_PUT 8214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @groupid: Performance counter group ID 8224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @countable: Countable to release within the group 8234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 8244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Put an allocated performance counter to allow others to have access to the 8254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * resource that was previously taken. This is only to be called after 8264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * successfully getting a performance counter from kgsl_perfcounter_get(). 8274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 8284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 8294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_perfcounter_put { 8304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int groupid; 8314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int countable; 8324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 8334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 8344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_PUT \ 8374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put) 8384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 8404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 8414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @groupid: Performance counter group ID 8424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @countable: Return active countables array 8434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @size: Size of active countables array 8444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @max_counters: Return total number counters for the group ID 8454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 8464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Query the available performance counters given a groupid. The array 8474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * *countables is used to return the current active countables in counters. 8484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * The size of the array is passed in so the kernel will only write at most 8494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * size or counter->size for the group id. The total number of available 8504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * counters for the group ID is returned in max_counters. 8514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * If the array or size passed in are invalid, then only the maximum number 8524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * of counters will be returned, no data will be written to *countables. 8534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * If the groupid is invalid an error code will be returned. 8544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 8554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 8564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_perfcounter_query { 8574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int groupid; 8584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* Array to return the current countable for up to size counters */ 8594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __user *countables; 8604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int count; 8614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int max_counters; 8624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 8634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 8644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_QUERY \ 8674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query) 8684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 8704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 8714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @groupid: Performance counter group IDs 8724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @countable: Performance counter countable IDs 8734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @value: Return performance counter reads 8744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @size: Size of all arrays (groupid/countable pair and return value) 8754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 8764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Read in the current value of a performance counter given by the groupid 8774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * and countable. 8784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 8794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 8804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_perfcounter_read_group { 8824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int groupid; 8834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int countable; 8844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long long value; 8854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_perfcounter_read { 8884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct kgsl_perfcounter_read_group __user *reads; 8894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int count; 8904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 8914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 8924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_READ \ 8954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read) 8964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 8974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_gpumem_sync_cache_bulk - argument to 8984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK 8994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id_list: list of GPU buffer ids of the buffers to sync 9004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @count: number of GPU buffer ids in id_list 9014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @op: a mask of KGSL_GPUMEM_CACHE_* values 9024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 9034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Sync the cache for memory headed to and from the GPU. Certain 9044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * optimizations can be made on the cache operation based on the total 9054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * size of the working set of memory to be managed. 9064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 9074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_gpumem_sync_cache_bulk { 9084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __user *id_list; 9094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int count; 9104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int op; 9114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 9124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 9134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK \ 9164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk) 9174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 9194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_cmd_syncpoint_timestamp 9204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @context_id: ID of a KGSL context 9214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @timestamp: GPU timestamp 9224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 9234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This structure defines a syncpoint comprising a context/timestamp pair. A 9244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * list of these may be passed by IOCTL_KGSL_SUBMIT_COMMANDS to define 9254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * dependencies that must be met before the command can be submitted to the 9264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * hardware 9274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 9284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmd_syncpoint_timestamp { 9294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int context_id; 9304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; 9314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0 9344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmd_syncpoint_fence { 9364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int fd; 9374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1 9404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 9424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_cmd_syncpoint - Define a sync point for a command batch 9434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @type: type of sync point defined here 9444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @priv: Pointer to the type specific buffer 9454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @size: Size of the type specific buffer 9464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 9474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This structure contains pointers defining a specific command sync point. 9484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * The pointer and size should point to a type appropriate structure. 9494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 9504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_cmd_syncpoint { 9514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int type; 9524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin void __user *priv; 9534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t size; 9544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Flag to indicate that the cmdlist may contain memlists */ 9574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_IBDESC_MEMLIST 0x1 9584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Flag to point out the cmdbatch profiling buffer in the memlist */ 9604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_IBDESC_PROFILING_BUFFER 0x2 9614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 9634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_submit_commands - Argument to IOCTL_KGSL_SUBMIT_COMMANDS 9644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @context_id: KGSL context ID that owns the commands 9654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @flags: 9664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @cmdlist: User pointer to a list of kgsl_ibdesc structures 9674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @numcmds: Number of commands listed in cmdlist 9684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @synclist: User pointer to a list of kgsl_cmd_syncpoint structures 9694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @numsyncs: Number of sync points listed in synclist 9704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @timestamp: On entry the a user defined timestamp, on exist the timestamp 9714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * assigned to the command batch 9724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 9734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This structure specifies a command to send to the GPU hardware. This is 9744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * similar to kgsl_issueibcmds expect that it doesn't support the legacy way to 9754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * submit IB lists and it adds sync points to block the IB until the 9764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * dependencies are satisified. This entry point is the new and preferred way 9774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * to submit commands to the GPU. The memory list can be used to specify all 9784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * memory that is referrenced in the current set of commands. 9794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 9804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_submit_commands { 9824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int context_id; 9834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 9844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct kgsl_ibdesc __user *cmdlist; 9854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int numcmds; 9864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct kgsl_cmd_syncpoint __user *synclist; 9874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int numsyncs; 9884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int timestamp; 9894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 9904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[4]; 9914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SUBMIT_COMMANDS \ 9944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands) 9954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 9974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_device_constraint - device constraint argument 9984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @context_id: KGSL context ID 9994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @type: type of constraint i.e pwrlevel/none 10004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @data: constraint data 10014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @size: size of the constraint data 10024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 10034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_device_constraint { 10044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int type; 10054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int context_id; 10064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin void __user *data; 10074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t size; 10084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 10094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Constraint Type*/ 10114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONSTRAINT_NONE 0 10124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONSTRAINT_PWRLEVEL 1 10134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* PWRLEVEL constraint level*/ 10154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* set to min frequency */ 10164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONSTRAINT_PWR_MIN 0 10174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* set to max frequency */ 10184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define KGSL_CONSTRAINT_PWR_MAX 1 10194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_device_constraint_pwrlevel { 10214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int level; 10224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 10234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 10254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_syncsource_create - Argument to IOCTL_KGSL_SYNCSOURCE_CREATE 10264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: returned id for the syncsource that was created. 10274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 10284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This ioctl creates a userspace sync timeline. 10294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 10304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_syncsource_create { 10324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 10334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 10344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[3]; 10354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 10364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_CREATE \ 10384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x40, struct kgsl_syncsource_create) 10394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 10414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_syncsource_destroy - Argument to IOCTL_KGSL_SYNCSOURCE_DESTROY 10424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: syncsource id to destroy 10434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 10444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This ioctl creates a userspace sync timeline. 10454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 10464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_syncsource_destroy { 10484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 10494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 10504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[3]; 10514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 10524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_DESTROY \ 10544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x41, struct kgsl_syncsource_destroy) 10554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 10574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_syncsource_create_fence - Argument to 10584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 10594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: syncsource id 10604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @fence_fd: returned sync_fence fd 10614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 10624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Create a fence that may be signaled by userspace by calling 10634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE. There are no order dependencies between 10644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * these fences. 10654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 10664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_syncsource_create_fence { 10674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 10684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int fence_fd; 10694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 10704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[4]; 10714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 10724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/** 10744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * struct kgsl_syncsource_signal_fence - Argument to 10754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE 10764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @id: syncsource id 10774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * @fence_fd: sync_fence fd to signal 10784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 10794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Signal a fence that was created by a IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 10804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * call using the same syncsource id. This allows a fence to be shared 10814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * to other processes but only signaled by the process owning the fd 10824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * used to create the fence. 10834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 10844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE \ 10854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x42, struct kgsl_syncsource_create_fence) 10864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct kgsl_syncsource_signal_fence { 10884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id; 10894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int fence_fd; 10904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* private: reserved for future use */ 10914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int __pad[4]; 10924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 10934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE \ 10954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x43, struct kgsl_syncsource_signal_fence) 10964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 10974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#endif /* _UAPI_MSM_KGSL_H */ 1098