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