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