18611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#ifndef _MSM_KGSL_H 28611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define _MSM_KGSL_H 38611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* 589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * The KGSL version has proven not to be very useful in userspace if features 689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * are cherry picked into other trees out of order so it is frozen as of 3.14. 789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * It is left here for backwards compatabilty and as a reminder that 889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * software releases are never linear. Also, I like pie. 989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 1089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_VERSION_MAJOR 3 12be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_VERSION_MINOR 14 138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/*context flags */ 158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_SAVE_GMEM 0x00000001 168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002 178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004 188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_CTX_SWITCH 0x00000008 198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_PREAMBLE 0x00000010 208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_TRASH_STATE 0x00000020 218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040 22be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080 2389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_END_OF_FRAME 0x00000100 2489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 25f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200 2689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_SYNC 0x00000400 27c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev#define KGSL_CONTEXT_PWR_CONSTRAINT 0x00000800 2889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* bits [12:15] are reserved for future use */ 2989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_TYPE_MASK 0x01F00000 3089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_TYPE_SHIFT 20 31f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev 3289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_TYPE_ANY 0 3389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_TYPE_GL 1 3489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_TYPE_CL 2 3589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_TYPE_C2D 3 3689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CONTEXT_TYPE_RS 4 378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONTEXT_INVALID 0xffffffff 398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* --- Memory allocation flags --- */ 4189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 4289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* General allocation hints */ 4389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000 4489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000 4589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 4689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* Memory caching hints */ 4789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CACHEMODE_MASK 0x0C000000 4889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CACHEMODE_SHIFT 26 498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CACHEMODE_WRITECOMBINE 0 5189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CACHEMODE_UNCACHED 1 5289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CACHEMODE_WRITETHROUGH 2 5389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CACHEMODE_WRITEBACK 3 5489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 5589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* Memory types for which allocations are made */ 56be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_MASK 0x0000FF00 57be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_SHIFT 8 58be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong 59be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_OBJECTANY 0 60be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_FRAMEBUFFER 1 61be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_RENDERBUFFER 2 62be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_ARRAYBUFFER 3 63be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4 64be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5 65be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_TEXTURE 6 66be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_SURFACE 7 67be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_EGL_SURFACE 8 68be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_GL 9 69be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_CL 10 70be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_CL_BUFFER_MAP 11 71be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12 72be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_CL_IMAGE_MAP 13 73be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14 74be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_CL_KERNEL_STACK 15 75be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_COMMAND 16 76be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_2D 17 77be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_EGL_IMAGE 18 78be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_EGL_SHADOW 19 79be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_MULTISAMPLE 20 80be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMTYPE_KERNEL 255 81be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong 82be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong/* 83be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong * Alignment hint, passed as the power of 2 exponent. 84be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong * i.e 4k (2^12) would be 12, 64k (2^16)would be 16. 85be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong */ 86be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMALIGN_MASK 0x00FF0000 87be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_MEMALIGN_SHIFT 16 88be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong 8989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* --- generic KGSL flag values --- */ 9089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 918611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_NORMALMODE 0x00000000 928611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_SAFEMODE 0x00000001 938611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_INITIALIZED0 0x00000002 948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_INITIALIZED 0x00000004 958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_STARTED 0x00000008 968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_ACTIVE 0x00000010 978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_RESERVED0 0x00000020 988611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_RESERVED1 0x00000040 998611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_RESERVED2 0x00000080 1008611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_SOFT_RESET 0x00000100 1018611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200 1028611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1038611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* Clock flags to show which clocks should be controled by a given platform */ 1048611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CLK_SRC 0x00000001 1058611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CLK_CORE 0x00000002 1068611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CLK_IFACE 0x00000004 1078611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CLK_MEM 0x00000008 1088611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CLK_MEM_IFACE 0x00000010 1098611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CLK_AXI 0x00000020 1108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 111be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong/* Server Side Sync Timeout in milliseconds */ 112be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000 113be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong 1148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* 1158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * Reset status values for context 1168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 1178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum kgsl_ctx_reset_stat { 1188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CTX_STAT_NO_ERROR = 0x00000000, 1198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001, 1208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002, 1218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003 1228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 1238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_CONVERT_TO_MBPS(val) \ 1258611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu (val*1000*1000U) 1268611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1278611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* device id */ 1288611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum kgsl_deviceid { 1298611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_DEVICE_3D0 = 0x00000000, 1308611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_DEVICE_2D0 = 0x00000001, 1318611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_DEVICE_2D1 = 0x00000002, 1328611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_DEVICE_MAX = 0x00000003 1338611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 1348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1358611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum kgsl_user_mem_type { 1368611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_USER_MEM_TYPE_PMEM = 0x00000000, 1378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001, 1388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_USER_MEM_TYPE_ADDR = 0x00000002, 1398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_USER_MEM_TYPE_ION = 0x00000003, 1408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_USER_MEM_TYPE_MAX = 0x00000004, 1418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 1428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_devinfo { 1448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int device_id; 1468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu /* chip revision id 1478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * coreid:8 majorrev:8 minorrev:8 patch:8 1488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 1498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int chip_id; 1508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int mmu_enabled; 1518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gmem_gpubaseaddr; 1528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu /* 1538611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * This field contains the adreno revision 1548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * number 200, 205, 220, etc... 1558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 1568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpu_id; 1578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gmem_sizebytes; 1588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 1598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* this structure defines the region of memory that can be mmap()ed from this 1618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu driver. The timestamp fields are volatile because they are written by the 1628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu GPU 1638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu*/ 1648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_devmemstore { 1658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu volatile unsigned int soptimestamp; 1668611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int sbz; 1678611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu volatile unsigned int eoptimestamp; 1688611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int sbz2; 1698611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu volatile unsigned int ts_cmp_enable; 1708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int sbz3; 1718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu volatile unsigned int ref_wait_ts; 1728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int sbz4; 1738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int current_context; 1748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int sbz5; 1758611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 1768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \ 1788611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu ((ctxt_id)*sizeof(struct kgsl_devmemstore) + \ 1798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu offsetof(struct kgsl_devmemstore, field)) 1808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1818611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* timestamp id*/ 1828611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum kgsl_timestamp_type { 1838611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */ 1848611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_TIMESTAMP_RETIRED = 0x00000002, /* end-of-pipeline timestamp*/ 1858611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_TIMESTAMP_QUEUED = 0x00000003, 1868611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 1878611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 1888611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* property types - used with kgsl_device_getproperty */ 1898611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum kgsl_property_type { 1908611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_DEVICE_INFO = 0x00000001, 1918611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_DEVICE_SHADOW = 0x00000002, 1928611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_DEVICE_POWER = 0x00000003, 1938611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_SHMEM = 0x00000004, 1948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_SHMEM_APERTURES = 0x00000005, 1958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_MMU_ENABLE = 0x00000006, 1968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_INTERRUPT_WAITS = 0x00000007, 1978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_VERSION = 0x00000008, 1988611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_GPU_RESET_STAT = 0x00000009, 1998611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_PROP_PWRCTRL = 0x0000000E, 200c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev KGSL_PROP_PWR_CONSTRAINT = 0x00000012, 2018611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 2028611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2038611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_shadowprop { 2048611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; 2058611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int size; 2068611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int flags; /* contains KGSL_FLAGS_ values */ 2078611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 2088611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2098611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_version { 2108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int drv_major; 2118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int drv_minor; 2128611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int dev_major; 2138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int dev_minor; 2148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 2158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 21689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* Performance counter groups */ 21789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 21889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_CP 0x0 21989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_RBBM 0x1 22089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_PC 0x2 22189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_VFD 0x3 22289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4 22389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_VPC 0x5 22489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_TSE 0x6 22589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_RAS 0x7 22689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_UCHE 0x8 22789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_TP 0x9 22889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_SP 0xA 22989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_RB 0xB 23089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_PWR 0xC 23189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_VBIF 0xD 23289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE 23389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 23489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF 2354403dc992632f6bf9990cbd51edb2ef484045a19Iliyan Malchev#define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE 23689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 2378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* structure holds list of ibs */ 2388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_ibdesc { 2398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; 2408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu void *hostptr; 2418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int sizedwords; 2428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int ctrl; 2438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 2448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* ioctls */ 2468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_IOC_TYPE 0x09 2478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* get misc info about the GPU 2498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu type should be a value from enum kgsl_property_type 2508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu value points to a structure that varies based on type 2518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu sizebytes is sizeof() that structure 2528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo 2538611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu this structure contaings hardware versioning info. 2548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop 2558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu this is used to find mmap() offset and sizes for mapping 2568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu struct kgsl_memstore into userspace. 2578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu*/ 2588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_device_getproperty { 2598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int type; 2608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu void *value; 2618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int sizebytes; 2628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 2638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_DEVICE_GETPROPERTY \ 2658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty) 2668611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2678611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012 2688611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 2698611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* block until the GPU has executed past a given timestamp 2718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * timeout is in milliseconds. 2728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 2738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_device_waittimestamp { 2748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; 2758611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timeout; 2768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 2778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2788611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \ 2798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp) 2808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2818611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_device_waittimestamp_ctxtid { 2828611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int context_id; 2838611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; 2848611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timeout; 2858611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 2868611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 2878611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \ 2888611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid) 2898611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 29089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* DEPRECATED: issue indirect commands to the GPU. 2918611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE 2928611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * ibaddr and sizedwords must specify a subset of a buffer created 2938611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM 2948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * flags may be a mask of KGSL_CONTEXT_ values 2958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * timestamp is a returned counter value which can be passed to 2968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * other ioctls to determine when the commands have been executed by 2978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * the GPU. 29889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 29989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * This fucntion is deprecated - consider using IOCTL_KGSL_SUBMIT_COMMANDS 30089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * instead 3018611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 3028611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_ringbuffer_issueibcmds { 3038611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int drawctxt_id; 3048611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int ibdesc_addr; 3058611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int numibs; 3068611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; /*output param */ 3078611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int flags; 3088611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3098611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \ 3118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds) 3128611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* read the most recently executed timestamp value 3148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * type should be a value from enum kgsl_timestamp_type 3158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 3168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_cmdstream_readtimestamp { 3178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int type; 3188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; /*output param */ 3198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \ 3228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 3238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \ 3258611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 3268611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3278611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* free memory when the GPU reaches a given timestamp. 3288611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * gpuaddr specify a memory region created by a 3298611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call 3308611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * type should be a value from enum kgsl_timestamp_type 3318611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 3328611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_cmdstream_freememontimestamp { 3338611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; 3348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int type; 3358611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; 3368611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \ 3398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 3408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* Previous versions of this header had incorrectly defined 3428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead 3438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu of a write only ioctl. To ensure binary compatability, the following 3448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu #define will be used to intercept the incorrect ioctl 3458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu*/ 3468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \ 3488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 3498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* create a draw context, which is used to preserve GPU state. 3518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * The flags field may contain a mask KGSL_CONTEXT_* values 3528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 3538611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_drawctxt_create { 3548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int flags; 3558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int drawctxt_id; /*output param */ 3568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_DRAWCTXT_CREATE \ 3598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create) 3608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* destroy a draw context */ 3628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_drawctxt_destroy { 3638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int drawctxt_id; 3648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3668611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_DRAWCTXT_DESTROY \ 3678611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy) 3688611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3698611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* add a block of pmem, fb, ashmem or user allocated address 3708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * into the GPU address space */ 3718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_map_user_mem { 3728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu int fd; 3738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; /*output param */ 3748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int len; 3758611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int offset; 3768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int hostptr; /*input param */ 3778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu enum kgsl_user_mem_type memtype; 378be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong unsigned int flags; 3798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3818611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_MAP_USER_MEM \ 3828611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem) 3838611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3848611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_cmdstream_readtimestamp_ctxtid { 3858611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int context_id; 3868611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int type; 3878611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; /*output param */ 3888611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3898611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3908611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \ 3918611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid) 3928611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 3938611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_cmdstream_freememontimestamp_ctxtid { 3948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int context_id; 3958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; 3968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int type; 3978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; 3988611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 3998611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4008611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \ 4018611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x17, \ 4028611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu struct kgsl_cmdstream_freememontimestamp_ctxtid) 4038611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4048611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* add a block of pmem or fb into the GPU address space */ 4058611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_sharedmem_from_pmem { 4068611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu int pmem_fd; 4078611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; /*output param */ 4088611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int len; 4098611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int offset; 4108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4128611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \ 4138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem) 4148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* remove memory from the GPU's address space */ 4168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_sharedmem_free { 4178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; 4188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_SHAREDMEM_FREE \ 4218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free) 4228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_cff_user_event { 4248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned char cff_opcode; 4258611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int op1; 4268611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int op2; 4278611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int op3; 4288611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int op4; 4298611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int op5; 4308611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int __pad[2]; 4318611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4328611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4338611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CFF_USER_EVENT \ 4348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event) 4358611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4368611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_gmem_desc { 4378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int x; 4388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int y; 4398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int width; 4408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int height; 4418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int pitch; 4428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_buffer_desc { 4458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu void *hostptr; 4468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; 4478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu int size; 4488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int format; 4498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int pitch; 4508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int enabled; 4518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4538611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_bind_gmem_shadow { 4548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int drawctxt_id; 4558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu struct kgsl_gmem_desc gmem_desc; 4568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int shadow_x; 4578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int shadow_y; 4588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu struct kgsl_buffer_desc shadow_buffer; 4598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int buffer_id; 4608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \ 4638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow) 4648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* add a block of memory into the GPU address space */ 466be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong 467be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong/* 468be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012 469be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong * use IOCTL_KGSL_GPUMEM_ALLOC instead 470be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong */ 471be611249f346eed84f935d2d4a1889d66b5da30fAlex Wong 4728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_sharedmem_from_vmalloc { 4738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; /*output param */ 4748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int hostptr; 4758611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int flags; 4768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4788611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \ 4798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc) 4808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 48189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* 48289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * This is being deprecated in favor of IOCTL_KGSL_GPUMEM_CACHE_SYNC which 48389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * supports both directions (flush and invalidate). This code will still 48489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * work, but by definition it will do a flush of the cache which might not be 48589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * what you want to have happen on a buffer following a GPU operation. It is 48689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * safer to go with IOCTL_KGSL_GPUMEM_CACHE_SYNC 48789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 48889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 4898611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \ 4908611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free) 4918611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4928611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_drawctxt_set_bin_base_offset { 4938611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int drawctxt_id; 4948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int offset; 4958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 4968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 4978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \ 4988611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset) 4998611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5008611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum kgsl_cmdwindow_type { 5018611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CMDWINDOW_MIN = 0x00000000, 5028611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CMDWINDOW_2D = 0x00000000, 5038611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CMDWINDOW_3D = 0x00000001, /* legacy */ 5048611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CMDWINDOW_MMU = 0x00000002, 5058611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CMDWINDOW_ARBITER = 0x000000FF, 5068611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu KGSL_CMDWINDOW_MAX = 0x000000FF, 5078611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 5088611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5098611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* write to the command window */ 5108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_cmdwindow_write { 5118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu enum kgsl_cmdwindow_type target; 5128611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int addr; 5138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int data; 5148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 5158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CMDWINDOW_WRITE \ 5178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write) 5188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_gpumem_alloc { 5208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned long gpuaddr; 5218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu size_t size; 5228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int flags; 5238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 5248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5258611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_GPUMEM_ALLOC \ 5268611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc) 5278611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5288611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_cff_syncmem { 5298611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int gpuaddr; 5308611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int len; 5318611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int __pad[2]; /* For future binary compatibility */ 5328611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 5338611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_CFF_SYNCMEM \ 5358611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem) 5368611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* 5388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * A timestamp event allows the user space to register an action following an 5398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to 5408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * _IOWR to support fences which need to return a fd for the priv parameter. 5418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 5428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_timestamp_event { 5448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu int type; /* Type of event (see list below) */ 5458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int timestamp; /* Timestamp to trigger event on */ 5468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned int context_id; /* Context for the timestamp */ 5478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu void *priv; /* Pointer to the event specific blob */ 5488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu size_t len; /* Size of the event specific blob */ 5498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 5508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \ 5528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event) 5538611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* A genlock timestamp event releases an existing lock on timestamp expire */ 5558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_TIMESTAMP_EVENT_GENLOCK 1 5578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_timestamp_event_genlock { 5598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu int handle; /* Handle of the genlock lock to release */ 5608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 5618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* A fence timestamp event releases an existing lock on timestamp expire */ 5638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define KGSL_TIMESTAMP_EVENT_FENCE 2 5658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5668611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct kgsl_timestamp_event_fence { 5678611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu int fence_fd; /* Fence to signal */ 5688611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu}; 5698611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu/* 5718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * Set a property within the kernel. Uses the same structure as 5728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu * IOCTL_KGSL_GETPROPERTY 5738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu */ 5748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5758611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_SETPROPERTY \ 5768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty) 5778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 5788611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define IOCTL_KGSL_TIMESTAMP_EVENT \ 5798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event) 5808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu 58189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 58289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_gpumem_alloc_id - argument to IOCTL_KGSL_GPUMEM_ALLOC_ID 58389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @id: returned id value for this allocation. 58489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @flags: mask of KGSL_MEM* values requested and actual flags on return. 58589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @size: requested size of the allocation and actual size on return. 58689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @mmapsize: returned size to pass to mmap() which may be larger than 'size' 58789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @gpuaddr: returned GPU address for the allocation 58889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 58989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Allocate memory for access by the GPU. The flags and size fields are echoed 59089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * back by the kernel, so that the caller can know if the request was 59189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * adjusted. 59289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 59389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Supported flags: 59489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * KGSL_MEMFLAGS_GPUREADONLY: the GPU will be unable to write to the buffer 59589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * KGSL_MEMTYPE*: usage hint for debugging aid 59689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * KGSL_MEMALIGN*: alignment hint, may be ignored or adjusted by the kernel. 59789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * KGSL_MEMFLAGS_USE_CPU_MAP: If set on call and return, the returned GPU 59889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * address will be 0. Calling mmap() will set the GPU address. 59989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 60089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_gpumem_alloc_id { 60189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int id; 60289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int flags; 60389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int size; 60489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int mmapsize; 60589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned long gpuaddr; 60689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use*/ 60789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[2]; 60889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 60989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 61089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_GPUMEM_ALLOC_ID \ 61189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id) 61289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 61389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 61489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_gpumem_free_id - argument to IOCTL_KGSL_GPUMEM_FREE_ID 61589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @id: GPU allocation id to free 61689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 61789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Free an allocation by id, in case a GPU address has not been assigned or 61889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * is unknown. Freeing an allocation by id with this ioctl or by GPU address 61989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * with IOCTL_KGSL_SHAREDMEM_FREE are equivalent. 62089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 62189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_gpumem_free_id { 62289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int id; 62389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use*/ 62489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad; 62589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 62689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 62789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_GPUMEM_FREE_ID \ 62889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id) 62989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 63089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 63189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_gpumem_get_info - argument to IOCTL_KGSL_GPUMEM_GET_INFO 63289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @gpuaddr: GPU address to query. Also set on return. 63389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @id: GPU allocation id to query. Also set on return. 63489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @flags: returned mask of KGSL_MEM* values. 63589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @size: returned size of the allocation. 63689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @mmapsize: returned size to pass mmap(), which may be larger than 'size' 63789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @useraddr: returned address of the userspace mapping for this buffer 63889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 63989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * This ioctl allows querying of all user visible attributes of an existing 64089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * allocation, by either the GPU address or the id returned by a previous 64189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * call to IOCTL_KGSL_GPUMEM_ALLOC_ID. Legacy allocation ioctls may not 64289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * return all attributes so this ioctl can be used to look them up if needed. 64389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 64489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 64589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_gpumem_get_info { 64689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned long gpuaddr; 64789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int id; 64889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int flags; 64989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int size; 65089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int mmapsize; 65189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned long useraddr; 65289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use*/ 65389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[4]; 65489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 65589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 65689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_GPUMEM_GET_INFO\ 65789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info) 65889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 65989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 66089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_gpumem_sync_cache - argument to IOCTL_KGSL_GPUMEM_SYNC_CACHE 66189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @gpuaddr: GPU address of the buffer to sync. 66289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @id: id of the buffer to sync. Either gpuaddr or id is sufficient. 66389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @op: a mask of KGSL_GPUMEM_CACHE_* values 66489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 66589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Sync the L2 cache for memory headed to and from the GPU - this replaces 66689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * KGSL_SHAREDMEM_FLUSH_CACHE since it can handle cache management for both 66789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * directions 66889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 66989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 67089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_gpumem_sync_cache { 67189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int gpuaddr; 67289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int id; 67389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int op; 67489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use*/ 67589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[2]; /* For future binary compatibility */ 67689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 67789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 67889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_GPUMEM_CACHE_CLEAN (1 << 0) 67989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN 68089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 68189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_GPUMEM_CACHE_INV (1 << 1) 68289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV 68389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 68489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_GPUMEM_CACHE_FLUSH \ 68589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev (KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV) 68689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 68789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_GPUMEM_SYNC_CACHE \ 68889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache) 68989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 69089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 69189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_perfcounter_get - argument to IOCTL_KGSL_PERFCOUNTER_GET 69289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @groupid: Performance counter group ID 69389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @countable: Countable to select within the group 694c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev * @offset: Return offset of the reserved LO counter 695c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev * @offset_hi: Return offset of the reserved HI counter 69689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 69789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Get an available performance counter from a specified groupid. The offset 69889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * of the performance counter will be returned after successfully assigning 69989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * the countable to the counter for the specified group. An error will be 70089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * returned and an offset of 0 if the groupid is invalid or there are no 70189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * more counters left. After successfully getting a perfcounter, the user 70289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * must call kgsl_perfcounter_put(groupid, contable) when finished with 70389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * the perfcounter to clear up perfcounter resources. 70489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 70589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 70689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_perfcounter_get { 70789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int groupid; 70889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int countable; 70989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int offset; 710c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev unsigned int offset_hi; 71189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use */ 712c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev unsigned int __pad; /* For future binary compatibility */ 71389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 71489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 71589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_PERFCOUNTER_GET \ 71689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get) 71789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 71889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 71989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_perfcounter_put - argument to IOCTL_KGSL_PERFCOUNTER_PUT 72089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @groupid: Performance counter group ID 72189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @countable: Countable to release within the group 72289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 72389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Put an allocated performance counter to allow others to have access to the 72489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * resource that was previously taken. This is only to be called after 72589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * successfully getting a performance counter from kgsl_perfcounter_get(). 72689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 72789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 72889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_perfcounter_put { 72989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int groupid; 73089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int countable; 73189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use */ 73289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[2]; /* For future binary compatibility */ 73389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 73489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 73589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_PERFCOUNTER_PUT \ 73689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put) 73789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 73889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 73989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 74089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @groupid: Performance counter group ID 74189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @countable: Return active countables array 74289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @size: Size of active countables array 74389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @max_counters: Return total number counters for the group ID 74489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 74589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Query the available performance counters given a groupid. The array 74689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * *countables is used to return the current active countables in counters. 74789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * The size of the array is passed in so the kernel will only write at most 74889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * size or counter->size for the group id. The total number of available 74989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * counters for the group ID is returned in max_counters. 75089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * If the array or size passed in are invalid, then only the maximum number 75189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * of counters will be returned, no data will be written to *countables. 75289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * If the groupid is invalid an error code will be returned. 75389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 75489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 75589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_perfcounter_query { 75689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int groupid; 75789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev /* Array to return the current countable for up to size counters */ 75889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int *countables; 75989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int count; 76089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int max_counters; 76189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use */ 76289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[2]; /* For future binary compatibility */ 76389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 76489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 76589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_PERFCOUNTER_QUERY \ 76689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query) 76789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 76889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 76989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 77089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @groupid: Performance counter group IDs 77189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @countable: Performance counter countable IDs 77289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @value: Return performance counter reads 77389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @size: Size of all arrays (groupid/countable pair and return value) 77489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 77589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Read in the current value of a performance counter given by the groupid 77689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * and countable. 77789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 77889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 77989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 78089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_perfcounter_read_group { 78189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int groupid; 78289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int countable; 78389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned long long value; 78489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 78589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 78689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_perfcounter_read { 78789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev struct kgsl_perfcounter_read_group *reads; 78889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int count; 78989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use */ 79089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[2]; /* For future binary compatibility */ 79189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 79289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 79389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_PERFCOUNTER_READ \ 79489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read) 79589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* 79689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_gpumem_sync_cache_bulk - argument to 79789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK 79889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @id_list: list of GPU buffer ids of the buffers to sync 79989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @count: number of GPU buffer ids in id_list 80089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @op: a mask of KGSL_GPUMEM_CACHE_* values 80189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 80289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * Sync the cache for memory headed to and from the GPU. Certain 80389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * optimizations can be made on the cache operation based on the total 80489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * size of the working set of memory to be managed. 80589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 80689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_gpumem_sync_cache_bulk { 80789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int *id_list; 80889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int count; 80989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int op; 81089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use */ 81189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[2]; /* For future binary compatibility */ 81289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 81389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 81489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK \ 81589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk) 81689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 81789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* 81889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_cmd_syncpoint_timestamp 81989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @context_id: ID of a KGSL context 82089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @timestamp: GPU timestamp 82189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 82289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * This structure defines a syncpoint comprising a context/timestamp pair. A 82389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * list of these may be passed by IOCTL_KGSL_SUBMIT_COMMANDS to define 82489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * dependencies that must be met before the command can be submitted to the 82589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * hardware 82689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 82789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_cmd_syncpoint_timestamp { 82889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int context_id; 82989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int timestamp; 83089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 83189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 83289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0 83389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 83489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_cmd_syncpoint_fence { 83589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev int fd; 83689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 83789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 83889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1 83989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 84089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 84189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_cmd_syncpoint - Define a sync point for a command batch 84289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @type: type of sync point defined here 84389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @priv: Pointer to the type specific buffer 84489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @size: Size of the type specific buffer 84589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 84689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * This structure contains pointers defining a specific command sync point. 84789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * The pointer and size should point to a type appropriate structure. 84889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 84989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_cmd_syncpoint { 85089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev int type; 85189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev void __user *priv; 85289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int size; 85389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 85489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 85589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/** 85689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * struct kgsl_submit_commands - Argument to IOCTL_KGSL_SUBMIT_COMMANDS 85789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @context_id: KGSL context ID that owns the commands 85889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @flags: 85989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @cmdlist: User pointer to a list of kgsl_ibdesc structures 86089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @numcmds: Number of commands listed in cmdlist 86189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @synclist: User pointer to a list of kgsl_cmd_syncpoint structures 86289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @numsyncs: Number of sync points listed in synclist 86389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * @timestamp: On entry the a user defined timestamp, on exist the timestamp 86489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * assigned to the command batch 86589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * 86689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * This structure specifies a command to send to the GPU hardware. This is 86789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * similar to kgsl_issueibcmds expect that it doesn't support the legacy way to 86889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * submit IB lists and it adds sync points to block the IB until the 86989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * dependencies are satisified. This entry point is the new and preferred way 87089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev * to submit commands to the GPU. 87189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev */ 87289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 87389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchevstruct kgsl_submit_commands { 87489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int context_id; 87589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int flags; 87689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev struct kgsl_ibdesc __user *cmdlist; 87789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int numcmds; 87889f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev struct kgsl_cmd_syncpoint __user *synclist; 87989f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int numsyncs; 88089f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int timestamp; 88189f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev/* private: reserved for future use */ 88289f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev unsigned int __pad[4]; 88389f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev}; 88489f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 88589f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev#define IOCTL_KGSL_SUBMIT_COMMANDS \ 88689f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands) 88789f22e7b4791039e4df130a7a5951b8a70728d8cIliyan Malchev 888c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev/** 889c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev * struct kgsl_device_constraint - device constraint argument 890c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev * @context_id: KGSL context ID 891c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev * @type: type of constraint i.e pwrlevel/none 892c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev * @data: constraint data 893c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev * @size: size of the constraint data 894c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev */ 895c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchevstruct kgsl_device_constraint { 896c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev unsigned int type; 897c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev unsigned int context_id; 898c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev void __user *data; 899c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev size_t size; 900c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev}; 901c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev 902c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev/* Constraint Type*/ 903c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev#define KGSL_CONSTRAINT_NONE 0 904c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev#define KGSL_CONSTRAINT_PWRLEVEL 1 905c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev 906c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev/* PWRLEVEL constraint level*/ 907c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev/* set to min frequency */ 908c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev#define KGSL_CONSTRAINT_PWR_MIN 0 909c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev/* set to max frequency */ 910c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev#define KGSL_CONSTRAINT_PWR_MAX 1 911c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev 912c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchevstruct kgsl_device_constraint_pwrlevel { 913c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev unsigned int level; 914c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev}; 915c25a431842a26b5756b58a9d4a42c776e0457ba2Iliyan Malchev 9168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#ifdef __KERNEL__ 9178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#ifdef CONFIG_MSM_KGSL_DRM 9188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuint kgsl_gem_obj_addr(int drm_fd, int handle, unsigned long *start, 9198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu unsigned long *len); 9208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#else 9218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define kgsl_gem_obj_addr(...) 0 9228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#endif 9238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#endif 9248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#endif /* _MSM_KGSL_H */ 925