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