1938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#ifndef _UAPI_MSM_KGSL_H
2938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define _UAPI_MSM_KGSL_H
3938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
4938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
5938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The KGSL version has proven not to be very useful in userspace if features
6938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * are cherry picked into other trees out of order so it is frozen as of 3.14.
7938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * It is left here for backwards compatabilty and as a reminder that
8938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * software releases are never linear. Also, I like pie.
9938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
10938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
11938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_VERSION_MAJOR        3
12938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_VERSION_MINOR        14
13938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
14da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/*
15da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * We have traditionally mixed context and issueibcmds / command batch flags
16da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * together into a big flag stew. This worked fine until we started adding a
17da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * lot more command batch flags and we started running out of bits. Turns out
18da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * we have a bit of room in the context type / priority mask that we could use
19da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * for command batches, but that means we need to split out the flags into two
20da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * coherent sets.
21da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *
22da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * If any future definitions are for both context and cmdbatch add both defines
23da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * and link the cmdbatch to the context define as we do below. Otherwise feel
24da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * free to add exclusive bits to either set.
25da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
26da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
27da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* --- context flags --- */
28938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_SAVE_GMEM		0x00000001
29938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_NO_GMEM_ALLOC	0x00000002
30da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */
31938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_SUBMIT_IB_LIST	0x00000004
32938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_CTX_SWITCH		0x00000008
33938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PREAMBLE		0x00000010
34938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TRASH_STATE	0x00000020
35938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PER_CONTEXT_TS	0x00000040
36938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_USER_GENERATED_TS	0x00000080
37da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */
38938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_END_OF_FRAME	0x00000100
39938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200
40da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */
41938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_SYNC               0x00000400
42a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONTEXT_PWR_CONSTRAINT     0x00000800
43da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
44938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PRIORITY_MASK      0x0000F000
45938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PRIORITY_SHIFT     12
46938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_PRIORITY_UNDEF     0
47938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
48da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CONTEXT_IFH_NOP            0x00010000
49da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CONTEXT_SECURE             0x00020000
50da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
51938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_MASK          0x01F00000
52938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_SHIFT         20
53938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_ANY		0
54938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_GL		1
55938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_CL		2
56938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_C2D		3
57938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_RS		4
58938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_TYPE_UNKNOWN	0x1E
59938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
60938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONTEXT_INVALID 0xffffffff
61938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
62da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/*
63da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * --- command batch flags ---
64da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * The bits that are linked to a KGSL_CONTEXT equivalent are either legacy
65da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * definitions or bits that are valid for both contexts and cmdbatches.  To be
66da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * safe the other 8 bits that are still available in the context field should be
67da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * omitted here in case we need to share - the other bits are available for
68da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * cmdbatch only flags as needed
69da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
70da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_MEMLIST		0x00000001
71da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_MARKER		0x00000002
72da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_SUBMIT_IB_LIST	KGSL_CONTEXT_SUBMIT_IB_LIST /* 0x004 */
73da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_CTX_SWITCH	KGSL_CONTEXT_CTX_SWITCH     /* 0x008 */
74da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_PROFILING		0x00000010
75da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_END_OF_FRAME	KGSL_CONTEXT_END_OF_FRAME   /* 0x100 */
76da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_SYNC		KGSL_CONTEXT_SYNC           /* 0x400 */
77da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_CMDBATCH_PWR_CONSTRAINT	KGSL_CONTEXT_PWR_CONSTRAINT /* 0x800 */
78da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
79da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/*
80da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * Reserve bits [16:19] and bits [28:31] for possible bits shared between
81da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * contexts and command batches.  Update this comment as new flags are added.
82da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
83da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
84938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* --- Memory allocation flags --- */
85938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
86938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* General allocation hints */
87938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000
88938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000
89938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
90da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Memory is secure */
91da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_MEMFLAGS_SECURE      0x00000008
92da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
93938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Memory caching hints */
94938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_MASK 0x0C000000
95938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_SHIFT 26
96938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
97938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_WRITECOMBINE 0
98938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_UNCACHED 1
99938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_WRITETHROUGH 2
100938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CACHEMODE_WRITEBACK 3
101938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
102938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Memory types for which allocations are made */
103938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_MASK		0x0000FF00
104938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_SHIFT		8
105938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
106938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_OBJECTANY			0
107938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_FRAMEBUFFER		1
108938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_RENDERBUFFER		2
109938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_ARRAYBUFFER		3
110938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER		4
111938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_VERTEXARRAYBUFFER		5
112938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_TEXTURE			6
113938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_SURFACE			7
114938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_EGL_SURFACE		8
115938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_GL				9
116938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL				10
117938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_BUFFER_MAP		11
118938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_BUFFER_NOMAP		12
119938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_IMAGE_MAP		13
120938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_IMAGE_NOMAP		14
121938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_CL_KERNEL_STACK		15
122938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_COMMAND			16
123938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_2D				17
124938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_EGL_IMAGE			18
125938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_EGL_SHADOW			19
126938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_MULTISAMPLE		20
127938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMTYPE_KERNEL			255
128938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
129938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
130938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Alignment hint, passed as the power of 2 exponent.
131938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * i.e 4k (2^12) would be 12, 64k (2^16)would be 16.
132938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
133938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMALIGN_MASK		0x00FF0000
134938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMALIGN_SHIFT		16
135938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
136a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilsonenum kgsl_user_mem_type {
137a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	KGSL_USER_MEM_TYPE_PMEM		= 0x00000000,
138a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	KGSL_USER_MEM_TYPE_ASHMEM	= 0x00000001,
139a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	KGSL_USER_MEM_TYPE_ADDR		= 0x00000002,
140a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	KGSL_USER_MEM_TYPE_ION		= 0x00000003,
141da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	KGSL_USER_MEM_TYPE_MAX		= 0x00000007,
142a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson};
143a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_MASK 0x000000e0
144a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_SHIFT 5
145a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson
146a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/*
147a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * Unfortunately, enum kgsl_user_mem_type starts at 0 which does not
148a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * leave a good value for allocated memory. In the flags we use
149a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * 0 to indicate allocated memory and thus need to add 1 to the enum
150a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * values.
151a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson */
152a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_USERMEM_FLAG(x) (((x) + 1) << KGSL_MEMFLAGS_USERMEM_SHIFT)
153a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson
154a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_NOT_USERMEM 0
155a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_PMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_PMEM)
156a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_ASHMEM \
157a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson		KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ASHMEM)
158a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_ADDR KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ADDR)
159a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_MEMFLAGS_USERMEM_ION KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ION)
160a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson
161938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* --- generic KGSL flag values --- */
162938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
163938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_NORMALMODE  0x00000000
164938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_SAFEMODE    0x00000001
165938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_INITIALIZED0 0x00000002
166938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_INITIALIZED 0x00000004
167938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_STARTED     0x00000008
168938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_ACTIVE      0x00000010
169938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_RESERVED0   0x00000020
170938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_RESERVED1   0x00000040
171938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_RESERVED2   0x00000080
172938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_SOFT_RESET  0x00000100
173938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200
174938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
175938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Clock flags to show which clocks should be controled by a given platform */
176938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_SRC	0x00000001
177938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_CORE	0x00000002
178938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_IFACE	0x00000004
179938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_MEM	0x00000008
180938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_MEM_IFACE 0x00000010
181938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CLK_AXI	0x00000020
182938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
183938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Server Side Sync Timeout in milliseconds */
184938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000
185938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
186938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
187938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Reset status values for context
188938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
189938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_ctx_reset_stat {
190938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CTX_STAT_NO_ERROR				= 0x00000000,
191938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT		= 0x00000001,
192938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT	= 0x00000002,
193938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT		= 0x00000003
194938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
195938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
196938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CONVERT_TO_MBPS(val) \
197938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	(val*1000*1000U)
198938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
199938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* device id */
200938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_deviceid {
201938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_DEVICE_3D0		= 0x00000000,
202938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_DEVICE_2D0		= 0x00000001,
203938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_DEVICE_2D1		= 0x00000002,
204938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_DEVICE_MAX		= 0x00000003
205938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
206938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
207938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_devinfo {
208938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
209938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int device_id;
210938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	/* chip revision id
211938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	* coreid:8 majorrev:8 minorrev:8 patch:8
212938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	*/
213938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int chip_id;
214938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int mmu_enabled;
215938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gmem_gpubaseaddr;
216938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	/*
217938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	* This field contains the adreno revision
218938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	* number 200, 205, 220, etc...
219938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	*/
220938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int gpu_id;
221938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t gmem_sizebytes;
222938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
223938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
224938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* this structure defines the region of memory that can be mmap()ed from this
225938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   driver. The timestamp fields are volatile because they are written by the
226938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   GPU
227938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby*/
228938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_devmemstore {
229938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	volatile unsigned int soptimestamp;
230938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int sbz;
231938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	volatile unsigned int eoptimestamp;
232938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int sbz2;
233938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	volatile unsigned int ts_cmp_enable;
234938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int sbz3;
235938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	volatile unsigned int ref_wait_ts;
236938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int sbz4;
237938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int current_context;
238938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int sbz5;
239938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
240938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
241938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \
242938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	((ctxt_id)*sizeof(struct kgsl_devmemstore) + \
243938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	 offsetof(struct kgsl_devmemstore, field))
244938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
245938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* timestamp id*/
246938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_timestamp_type {
247938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */
248938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_TIMESTAMP_RETIRED  = 0x00000002, /* end-of-pipeline timestamp*/
249938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_TIMESTAMP_QUEUED   = 0x00000003,
250938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
251938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
252938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* property types - used with kgsl_device_getproperty */
253938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_property_type {
254938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_DEVICE_INFO     = 0x00000001,
255938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_DEVICE_SHADOW   = 0x00000002,
256938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_DEVICE_POWER    = 0x00000003,
257938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_SHMEM           = 0x00000004,
258938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_SHMEM_APERTURES = 0x00000005,
259938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_MMU_ENABLE 	  = 0x00000006,
260938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_INTERRUPT_WAITS = 0x00000007,
261938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_VERSION         = 0x00000008,
262938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_GPU_RESET_STAT  = 0x00000009,
263938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_PROP_PWRCTRL         = 0x0000000E,
264a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	KGSL_PROP_PWR_CONSTRAINT  = 0x00000012,
265938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
266938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
267938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_shadowprop {
268938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
269938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t size;
270938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags; /* contains KGSL_FLAGS_ values */
271938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
272938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
273938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_version {
274938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int drv_major;
275938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int drv_minor;
276938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int dev_major;
277938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int dev_minor;
278938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
279938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
280938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Performance counter groups */
281938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
282938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_CP 0x0
283938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_RBBM 0x1
284938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_PC 0x2
285938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VFD 0x3
286938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4
287938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VPC 0x5
288938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TSE 0x6
289938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_RAS 0x7
290938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_UCHE 0x8
291938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TP 0x9
292938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_SP 0xA
293938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_RB 0xB
294938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_PWR 0xC
295938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VBIF 0xD
296938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE
297938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_MH 0xF
298938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_PA_SU 0x10
299938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_SQ 0x11
300938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_SX 0x12
301938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TCF 0x13
302938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TCM 0x14
303938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_TCR 0x15
304938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_L2 0x16
305938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_VSC 0x17
306938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_CCU 0x18
307938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_GROUP_MAX 0x19
308938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
309938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF
310938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE
311938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
312938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* structure holds list of ibs */
313938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_ibdesc {
314938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
315938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long __pad;
316938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t sizedwords;
317938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int ctrl;
318938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
319938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
320da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/**
321da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_cmdbatch_profiling_buffer
322da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @wall_clock_s: Wall clock at ringbuffer submission time (seconds)
323da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @wall_clock_ns: Wall clock at ringbuffer submission time (nanoseconds)
324da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @gpu_ticks_queued: GPU ticks at ringbuffer submission
325da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @gpu_ticks_submitted: GPU ticks when starting cmdbatch execution
326da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @gpu_ticks_retired: GPU ticks when finishing cmdbatch execution
327da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *
328da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * This structure defines the profiling buffer used to measure cmdbatch
329da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * execution time
330da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
331da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_cmdbatch_profiling_buffer {
332da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	uint64_t wall_clock_s;
333da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	uint64_t wall_clock_ns;
334da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	uint64_t gpu_ticks_queued;
335da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	uint64_t gpu_ticks_submitted;
336da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	uint64_t gpu_ticks_retired;
337da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson};
338da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
339938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* ioctls */
340938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_IOC_TYPE 0x09
341938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
342938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* get misc info about the GPU
343938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   type should be a value from enum kgsl_property_type
344938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   value points to a structure that varies based on type
345938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   sizebytes is sizeof() that structure
346938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo
347938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   this structure contaings hardware versioning info.
348938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop
349938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   this is used to find mmap() offset and sizes for mapping
350938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   struct kgsl_memstore into userspace.
351938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby*/
352938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_device_getproperty {
353938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int type;
354938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	void __user *value;
355938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t sizebytes;
356938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
357938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
358938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DEVICE_GETPROPERTY \
359938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty)
360938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
361938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012
362938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
363938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
364938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* block until the GPU has executed past a given timestamp
365938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * timeout is in milliseconds.
366938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
367938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_device_waittimestamp {
368938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp;
369938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timeout;
370938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
371938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
372938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \
373938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp)
374938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
375938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_device_waittimestamp_ctxtid {
376938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int context_id;
377938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp;
378938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timeout;
379938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
380938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
381938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \
382938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid)
383938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
384938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* DEPRECATED: issue indirect commands to the GPU.
385938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE
386938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * ibaddr and sizedwords must specify a subset of a buffer created
387938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM
388938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * flags may be a mask of KGSL_CONTEXT_ values
389938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * timestamp is a returned counter value which can be passed to
390938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * other ioctls to determine when the commands have been executed by
391938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * the GPU.
392938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
393938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This fucntion is deprecated - consider using IOCTL_KGSL_SUBMIT_COMMANDS
394938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * instead
395938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
396938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_ringbuffer_issueibcmds {
397938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int drawctxt_id;
398938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long ibdesc_addr;
399938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int numibs;
400938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp; /*output param */
401938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
402938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
403938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
404938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \
405938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds)
406938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
407938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* read the most recently executed timestamp value
408938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * type should be a value from enum kgsl_timestamp_type
409938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
410938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_readtimestamp {
411938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int type;
412938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp; /*output param */
413938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
414938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
415938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \
416938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
417938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
418938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \
419938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
420938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
421938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* free memory when the GPU reaches a given timestamp.
422938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * gpuaddr specify a memory region created by a
423938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call
424938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * type should be a value from enum kgsl_timestamp_type
425938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
426938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_freememontimestamp {
427938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
428938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int type;
429938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp;
430938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
431938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
432938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \
433938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
434938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
435938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* Previous versions of this header had incorrectly defined
436938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead
437938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   of a write only ioctl.  To ensure binary compatability, the following
438938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby   #define will be used to intercept the incorrect ioctl
439938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby*/
440938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
441938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \
442938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
443938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
444938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* create a draw context, which is used to preserve GPU state.
445938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The flags field may contain a mask KGSL_CONTEXT_*  values
446938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
447938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_drawctxt_create {
448938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
449938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int drawctxt_id; /*output param */
450938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
451938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
452938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_CREATE \
453938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create)
454938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
455938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* destroy a draw context */
456938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_drawctxt_destroy {
457938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int drawctxt_id;
458938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
459938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
460938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_DESTROY \
461938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy)
462938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
463938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* add a block of pmem, fb, ashmem or user allocated address
464938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * into the GPU address space */
465938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_map_user_mem {
466938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int fd;
467938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;   /*output param */
468938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t len;
469938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t offset;
470938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long hostptr;   /*input param */
471938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	enum kgsl_user_mem_type memtype;
472938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
473938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
474938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
475938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_MAP_USER_MEM \
476938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem)
477938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
478938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_readtimestamp_ctxtid {
479938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int context_id;
480938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int type;
481938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp; /*output param */
482938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
483938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
484938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \
485938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid)
486938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
487938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdstream_freememontimestamp_ctxtid {
488938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int context_id;
489938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
490938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int type;
491938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp;
492938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
493938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
494938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \
495938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x17, \
496938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	struct kgsl_cmdstream_freememontimestamp_ctxtid)
497938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
498938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* add a block of pmem or fb into the GPU address space */
499938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_sharedmem_from_pmem {
500938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int pmem_fd;
501938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;	/*output param */
502938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int len;
503938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int offset;
504938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
505938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
506938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \
507938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem)
508938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
509938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* remove memory from the GPU's address space */
510938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_sharedmem_free {
511938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
512938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
513938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
514938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FREE \
515938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free)
516938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
517938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cff_user_event {
518938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned char cff_opcode;
519938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int op1;
520938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int op2;
521938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int op3;
522938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int op4;
523938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int op5;
524938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad[2];
525938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
526938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
527938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CFF_USER_EVENT \
528938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event)
529938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
530938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gmem_desc {
531938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int x;
532938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int y;
533938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int width;
534938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int height;
535938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int pitch;
536938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
537938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
538938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_buffer_desc {
539938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	void 			*hostptr;
540938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long	gpuaddr;
541938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int				size;
542938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int	format;
543938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int  	pitch;
544938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int  	enabled;
545938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
546938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
547938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_bind_gmem_shadow {
548938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int drawctxt_id;
549938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	struct kgsl_gmem_desc gmem_desc;
550938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int shadow_x;
551938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int shadow_y;
552938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	struct kgsl_buffer_desc shadow_buffer;
553938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int buffer_id;
554938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
555938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
556938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \
557938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby    _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow)
558938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
559938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* add a block of memory into the GPU address space */
560938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
561938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
562938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012
563938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * use IOCTL_KGSL_GPUMEM_ALLOC instead
564938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
565938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
566938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_sharedmem_from_vmalloc {
567938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;	/*output param */
568938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int hostptr;
569938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
570938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
571938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
572938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \
573938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc)
574938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
575938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
576938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This is being deprecated in favor of IOCTL_KGSL_GPUMEM_CACHE_SYNC which
577938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * supports both directions (flush and invalidate). This code will still
578938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * work, but by definition it will do a flush of the cache which might not be
579938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * what you want to have happen on a buffer following a GPU operation.  It is
580938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * safer to go with IOCTL_KGSL_GPUMEM_CACHE_SYNC
581938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
582938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
583938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \
584938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free)
585938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
586938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_drawctxt_set_bin_base_offset {
587938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int drawctxt_id;
588938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int offset;
589938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
590938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
591938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \
592938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset)
593938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
594938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobyenum kgsl_cmdwindow_type {
595938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CMDWINDOW_MIN     = 0x00000000,
596938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CMDWINDOW_2D      = 0x00000000,
597938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CMDWINDOW_3D      = 0x00000001, /* legacy */
598938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CMDWINDOW_MMU     = 0x00000002,
599938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CMDWINDOW_ARBITER = 0x000000FF,
600938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	KGSL_CMDWINDOW_MAX     = 0x000000FF,
601938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
602938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
603938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* write to the command window */
604938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmdwindow_write {
605938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	enum kgsl_cmdwindow_type target;
606938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int addr;
607938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int data;
608938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
609938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
610938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CMDWINDOW_WRITE \
611938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write)
612938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
613938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_alloc {
614938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr; /* output param */
615938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t size;
616938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
617938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
618938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
619938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_ALLOC \
620938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc)
621938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
622938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cff_syncmem {
623938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
624938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t len;
625938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad[2]; /* For future binary compatibility */
626938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
627938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
628938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_CFF_SYNCMEM \
629938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem)
630938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
631938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
632938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * A timestamp event allows the user space to register an action following an
633938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to
634938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * _IOWR to support fences which need to return a fd for the priv parameter.
635938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
636938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
637938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_timestamp_event {
638938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int type;                /* Type of event (see list below) */
639938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp;  /* Timestamp to trigger event on */
640938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int context_id; /* Context for the timestamp */
641938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	void __user *priv;	 /* Pointer to the event specific blob */
642938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t len;              /* Size of the event specific blob */
643938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
644938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
645938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \
646938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event)
647938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
648938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* A genlock timestamp event releases an existing lock on timestamp expire */
649938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
650938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_TIMESTAMP_EVENT_GENLOCK 1
651938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
652938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_timestamp_event_genlock {
653938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int handle; /* Handle of the genlock lock to release */
654938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
655938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
656938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* A fence timestamp event releases an existing lock on timestamp expire */
657938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
658938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_TIMESTAMP_EVENT_FENCE 2
659938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
660938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_timestamp_event_fence {
661938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int fence_fd; /* Fence to signal */
662938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
663938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
664938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
665938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Set a property within the kernel.  Uses the same structure as
666938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_GETPROPERTY
667938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
668938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
669938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SETPROPERTY \
670938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty)
671938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
672938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_TIMESTAMP_EVENT \
673938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event)
674938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
675938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
676938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_alloc_id - argument to IOCTL_KGSL_GPUMEM_ALLOC_ID
677938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: returned id value for this allocation.
678938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @flags: mask of KGSL_MEM* values requested and actual flags on return.
679938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: requested size of the allocation and actual size on return.
680938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @mmapsize: returned size to pass to mmap() which may be larger than 'size'
681938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @gpuaddr: returned GPU address for the allocation
682938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
683938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Allocate memory for access by the GPU. The flags and size fields are echoed
684938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * back by the kernel, so that the caller can know if the request was
685938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * adjusted.
686938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
687938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Supported flags:
688938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMFLAGS_GPUREADONLY: the GPU will be unable to write to the buffer
689938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMTYPE*: usage hint for debugging aid
690938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMALIGN*: alignment hint, may be ignored or adjusted by the kernel.
691938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_MEMFLAGS_USE_CPU_MAP: If set on call and return, the returned GPU
692938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * address will be 0. Calling mmap() will set the GPU address.
693938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
694938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_alloc_id {
695938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int id;
696938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
697938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t size;
698938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t mmapsize;
699938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
700938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use*/
701938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long __pad[2];
702938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
703938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
704938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_ALLOC_ID \
705938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id)
706938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
707938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
708938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_free_id - argument to IOCTL_KGSL_GPUMEM_FREE_ID
709938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: GPU allocation id to free
710938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
711938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Free an allocation by id, in case a GPU address has not been assigned or
712938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * is unknown. Freeing an allocation by id with this ioctl or by GPU address
713938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * with IOCTL_KGSL_SHAREDMEM_FREE are equivalent.
714938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
715938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_free_id {
716938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int id;
717938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use*/
718938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad;
719938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
720938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
721938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_FREE_ID \
722938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id)
723938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
724938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
725938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_get_info - argument to IOCTL_KGSL_GPUMEM_GET_INFO
726938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @gpuaddr: GPU address to query. Also set on return.
727938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: GPU allocation id to query. Also set on return.
728938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @flags: returned mask of KGSL_MEM* values.
729938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: returned size of the allocation.
730938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @mmapsize: returned size to pass mmap(), which may be larger than 'size'
731938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @useraddr: returned address of the userspace mapping for this buffer
732938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
733938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This ioctl allows querying of all user visible attributes of an existing
734938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * allocation, by either the GPU address or the id returned by a previous
735938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * call to IOCTL_KGSL_GPUMEM_ALLOC_ID. Legacy allocation ioctls may not
736938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * return all attributes so this ioctl can be used to look them up if needed.
737938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
738938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
739938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_get_info {
740938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
741938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int id;
742938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
743938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t size;
744938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t mmapsize;
745938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long useraddr;
746938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use*/
747938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long __pad[4];
748938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
749938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
750938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_GET_INFO\
751938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info)
752938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
753938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
754938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_sync_cache - argument to IOCTL_KGSL_GPUMEM_SYNC_CACHE
755938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @gpuaddr: GPU address of the buffer to sync.
756938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id: id of the buffer to sync. Either gpuaddr or id is sufficient.
757938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @op: a mask of KGSL_GPUMEM_CACHE_* values
758da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @offset: offset into the buffer
759da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @length: number of bytes starting from offset to perform
760da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * the cache operation on
761938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
762938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Sync the L2 cache for memory headed to and from the GPU - this replaces
763938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * KGSL_SHAREDMEM_FLUSH_CACHE since it can handle cache management for both
764938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * directions
765938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
766938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
767938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_sync_cache {
768938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long gpuaddr;
769938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int id;
770938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int op;
771da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	size_t offset;
772da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	size_t length;
773938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
774938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
775938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_CLEAN (1 << 0)
776938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN
777938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
778938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_INV (1 << 1)
779938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV
780938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
781938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_GPUMEM_CACHE_FLUSH \
782938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	(KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV)
783938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
784da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Flag to ensure backwards compatibility of kgsl_gpumem_sync_cache struct */
785da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_GPUMEM_CACHE_RANGE (1 << 31U)
786da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
787938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_SYNC_CACHE \
788938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache)
789938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
790938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
791938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_get - argument to IOCTL_KGSL_PERFCOUNTER_GET
792938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group ID
793938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Countable to select within the group
794938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @offset: Return offset of the reserved LO counter
795938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @offset_hi: Return offset of the reserved HI counter
796938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
797938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Get an available performance counter from a specified groupid.  The offset
798938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * of the performance counter will be returned after successfully assigning
799938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * the countable to the counter for the specified group.  An error will be
800938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * returned and an offset of 0 if the groupid is invalid or there are no
801938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * more counters left.  After successfully getting a perfcounter, the user
802938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * must call kgsl_perfcounter_put(groupid, contable) when finished with
803938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * the perfcounter to clear up perfcounter resources.
804938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
805938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
806938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_get {
807938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int groupid;
808938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int countable;
809938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int offset;
810938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int offset_hi;
811938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */
812938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad; /* For future binary compatibility */
813938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
814938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
815938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_GET \
816938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get)
817938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
818938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
819938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_put - argument to IOCTL_KGSL_PERFCOUNTER_PUT
820938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group ID
821938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Countable to release within the group
822938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
823938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Put an allocated performance counter to allow others to have access to the
824938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * resource that was previously taken.  This is only to be called after
825938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * successfully getting a performance counter from kgsl_perfcounter_get().
826938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
827938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
828938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_put {
829938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int groupid;
830938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int countable;
831938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */
832938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad[2]; /* For future binary compatibility */
833938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
834938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
835938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_PUT \
836938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put)
837938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
838938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
839938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY
840938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group ID
841938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Return active countables array
842938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: Size of active countables array
843938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @max_counters: Return total number counters for the group ID
844938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
845938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Query the available performance counters given a groupid.  The array
846938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * *countables is used to return the current active countables in counters.
847938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The size of the array is passed in so the kernel will only write at most
848938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * size or counter->size for the group id.  The total number of available
849938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * counters for the group ID is returned in max_counters.
850938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * If the array or size passed in are invalid, then only the maximum number
851938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * of counters will be returned, no data will be written to *countables.
852938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * If the groupid is invalid an error code will be returned.
853938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
854938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
855938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_query {
856938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int groupid;
857938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	/* Array to return the current countable for up to size counters */
858938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __user *countables;
859938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int count;
860938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int max_counters;
861938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */
862938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad[2]; /* For future binary compatibility */
863938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
864938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
865938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_QUERY \
866938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query)
867938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
868938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
869938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY
870938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @groupid: Performance counter group IDs
871938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @countable: Performance counter countable IDs
872938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @value: Return performance counter reads
873938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: Size of all arrays (groupid/countable pair and return value)
874938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
875938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Read in the current value of a performance counter given by the groupid
876938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * and countable.
877938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
878938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
879938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
880938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_read_group {
881938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int groupid;
882938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int countable;
883938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned long long value;
884938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
885938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
886938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_perfcounter_read {
887938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	struct kgsl_perfcounter_read_group __user *reads;
888938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int count;
889938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */
890938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad[2]; /* For future binary compatibility */
891938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
892938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
893938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_PERFCOUNTER_READ \
894938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read)
895938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
896938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_gpumem_sync_cache_bulk - argument to
897938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK
898938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @id_list: list of GPU buffer ids of the buffers to sync
899938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @count: number of GPU buffer ids in id_list
900938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @op: a mask of KGSL_GPUMEM_CACHE_* values
901938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
902938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * Sync the cache for memory headed to and from the GPU. Certain
903938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * optimizations can be made on the cache operation based on the total
904938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * size of the working set of memory to be managed.
905938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
906938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_gpumem_sync_cache_bulk {
907938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __user *id_list;
908938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int count;
909938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int op;
910938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */
911938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad[2]; /* For future binary compatibility */
912938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
913938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
914938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK \
915938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk)
916938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
917938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/*
918938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_cmd_syncpoint_timestamp
919938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @context_id: ID of a KGSL context
920938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @timestamp: GPU timestamp
921938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
922938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This structure defines a syncpoint comprising a context/timestamp pair. A
923938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * list of these may be passed by IOCTL_KGSL_SUBMIT_COMMANDS to define
924938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * dependencies that must be met before the command can be submitted to the
925938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * hardware
926938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
927938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmd_syncpoint_timestamp {
928938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int context_id;
929938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp;
930938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
931938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
932938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0
933938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
934938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmd_syncpoint_fence {
935938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int fd;
936938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
937938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
938938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1
939938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
940938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
941938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_cmd_syncpoint - Define a sync point for a command batch
942938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @type: type of sync point defined here
943938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @priv: Pointer to the type specific buffer
944938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @size: Size of the type specific buffer
945938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
946938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This structure contains pointers defining a specific command sync point.
947938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * The pointer and size should point to a type appropriate structure.
948938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
949938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_cmd_syncpoint {
950938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	int type;
951938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	void __user *priv;
952938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	size_t size;
953938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
954938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
955da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Flag to indicate that the cmdlist may contain memlists */
956da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_IBDESC_MEMLIST 0x1
957da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
958da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* Flag to point out the cmdbatch profiling buffer in the memlist */
959da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define KGSL_IBDESC_PROFILING_BUFFER 0x2
960da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
961938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/**
962938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * struct kgsl_submit_commands - Argument to IOCTL_KGSL_SUBMIT_COMMANDS
963938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @context_id: KGSL context ID that owns the commands
964938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @flags:
965938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @cmdlist: User pointer to a list of kgsl_ibdesc structures
966938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @numcmds: Number of commands listed in cmdlist
967938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @synclist: User pointer to a list of kgsl_cmd_syncpoint structures
968938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @numsyncs: Number of sync points listed in synclist
969938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * @timestamp: On entry the a user defined timestamp, on exist the timestamp
970938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * assigned to the command batch
971938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby *
972938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * This structure specifies a command to send to the GPU hardware.  This is
973938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * similar to kgsl_issueibcmds expect that it doesn't support the legacy way to
974938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * submit IB lists and it adds sync points to block the IB until the
975938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby * dependencies are satisified.  This entry point is the new and preferred way
976da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * to submit commands to the GPU. The memory list can be used to specify all
977da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * memory that is referrenced in the current set of commands.
978938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby */
979938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
980938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Gobystruct kgsl_submit_commands {
981938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int context_id;
982938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int flags;
983938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	struct kgsl_ibdesc __user *cmdlist;
984938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int numcmds;
985938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	struct kgsl_cmd_syncpoint __user *synclist;
986938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int numsyncs;
987938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int timestamp;
988938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby/* private: reserved for future use */
989938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	unsigned int __pad[4];
990938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby};
991938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
992938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#define IOCTL_KGSL_SUBMIT_COMMANDS \
993938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby	_IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands)
994938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby
995a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/**
996a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * struct kgsl_device_constraint - device constraint argument
997a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @context_id: KGSL context ID
998a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @type: type of constraint i.e pwrlevel/none
999a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @data: constraint data
1000a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson * @size: size of the constraint data
1001a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson */
1002a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilsonstruct kgsl_device_constraint {
1003a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	unsigned int type;
1004a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	unsigned int context_id;
1005a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	void __user *data;
1006a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	size_t size;
1007a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson};
1008a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson
1009a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* Constraint Type*/
1010a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_NONE 0
1011a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_PWRLEVEL 1
1012a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson
1013a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* PWRLEVEL constraint level*/
1014a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* set to min frequency */
1015a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_PWR_MIN    0
1016a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson/* set to max frequency */
1017a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson#define KGSL_CONSTRAINT_PWR_MAX    1
1018a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson
1019a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilsonstruct kgsl_device_constraint_pwrlevel {
1020a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson	unsigned int level;
1021a1582f49b9f19a98dc22559814b7595c9a8e4488Simon Wilson};
1022da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1023da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/**
1024da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_create - Argument to IOCTL_KGSL_SYNCSOURCE_CREATE
1025da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: returned id for the syncsource that was created.
1026da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *
1027da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * This ioctl creates a userspace sync timeline.
1028da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
1029da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1030da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_create {
1031da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int id;
1032da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */
1033da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int __pad[3];
1034da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson};
1035da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1036da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_CREATE \
1037da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x40, struct kgsl_syncsource_create)
1038da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1039da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/**
1040da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_destroy - Argument to IOCTL_KGSL_SYNCSOURCE_DESTROY
1041da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: syncsource id to destroy
1042da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *
1043da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * This ioctl creates a userspace sync timeline.
1044da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
1045da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1046da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_destroy {
1047da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int id;
1048da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */
1049da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int __pad[3];
1050da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson};
1051da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1052da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_DESTROY \
1053da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x41, struct kgsl_syncsource_destroy)
1054da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1055da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/**
1056da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_create_fence - Argument to
1057da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *     IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE
1058da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: syncsource id
1059da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @fence_fd: returned sync_fence fd
1060da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *
1061da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * Create a fence that may be signaled by userspace by calling
1062da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE. There are no order dependencies between
1063da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * these fences.
1064da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
1065da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_create_fence {
1066da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int id;
1067da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	int fence_fd;
1068da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */
1069da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int __pad[4];
1070da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson};
1071da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1072da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/**
1073da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * struct kgsl_syncsource_signal_fence - Argument to
1074da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *     IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE
1075da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @id: syncsource id
1076da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * @fence_fd: sync_fence fd to signal
1077da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson *
1078da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * Signal a fence that was created by a IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE
1079da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * call using the same syncsource id. This allows a fence to be shared
1080da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * to other processes but only signaled by the process owning the fd
1081da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson * used to create the fence.
1082da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson */
1083da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE \
1084da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x42, struct kgsl_syncsource_create_fence)
1085da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1086da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilsonstruct kgsl_syncsource_signal_fence {
1087da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int id;
1088da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	int fence_fd;
1089da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson/* private: reserved for future use */
1090da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	unsigned int __pad[4];
1091da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson};
1092da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1093da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson#define IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE \
1094da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x43, struct kgsl_syncsource_signal_fence)
1095da35900a03bb133cde68eee89ee68a3c3b12f615Simon Wilson
1096938b06feb4a557f44bd6a0a6a9e7fde786f3bc72Benoit Goby#endif /* _UAPI_MSM_KGSL_H */
1097