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