1d722e3fbSopenharmony_ci#ifndef _MSM_KGSL_H
2d722e3fbSopenharmony_ci#define _MSM_KGSL_H
3d722e3fbSopenharmony_ci
4d722e3fbSopenharmony_ci#define KGSL_VERSION_MAJOR        3
5d722e3fbSopenharmony_ci#define KGSL_VERSION_MINOR        11
6d722e3fbSopenharmony_ci
7d722e3fbSopenharmony_ci/*context flags */
8d722e3fbSopenharmony_ci#define KGSL_CONTEXT_SAVE_GMEM		0x00000001
9d722e3fbSopenharmony_ci#define KGSL_CONTEXT_NO_GMEM_ALLOC	0x00000002
10d722e3fbSopenharmony_ci#define KGSL_CONTEXT_SUBMIT_IB_LIST	0x00000004
11d722e3fbSopenharmony_ci#define KGSL_CONTEXT_CTX_SWITCH		0x00000008
12d722e3fbSopenharmony_ci#define KGSL_CONTEXT_PREAMBLE		0x00000010
13d722e3fbSopenharmony_ci#define KGSL_CONTEXT_TRASH_STATE	0x00000020
14d722e3fbSopenharmony_ci#define KGSL_CONTEXT_PER_CONTEXT_TS	0x00000040
15d722e3fbSopenharmony_ci
16d722e3fbSopenharmony_ci#define KGSL_CONTEXT_INVALID 0xffffffff
17d722e3fbSopenharmony_ci
18d722e3fbSopenharmony_ci/* Memory allocayion flags */
19d722e3fbSopenharmony_ci#define KGSL_MEMFLAGS_GPUREADONLY	0x01000000
20d722e3fbSopenharmony_ci
21d722e3fbSopenharmony_ci/* generic flag values */
22d722e3fbSopenharmony_ci#define KGSL_FLAGS_NORMALMODE  0x00000000
23d722e3fbSopenharmony_ci#define KGSL_FLAGS_SAFEMODE    0x00000001
24d722e3fbSopenharmony_ci#define KGSL_FLAGS_INITIALIZED0 0x00000002
25d722e3fbSopenharmony_ci#define KGSL_FLAGS_INITIALIZED 0x00000004
26d722e3fbSopenharmony_ci#define KGSL_FLAGS_STARTED     0x00000008
27d722e3fbSopenharmony_ci#define KGSL_FLAGS_ACTIVE      0x00000010
28d722e3fbSopenharmony_ci#define KGSL_FLAGS_RESERVED0   0x00000020
29d722e3fbSopenharmony_ci#define KGSL_FLAGS_RESERVED1   0x00000040
30d722e3fbSopenharmony_ci#define KGSL_FLAGS_RESERVED2   0x00000080
31d722e3fbSopenharmony_ci#define KGSL_FLAGS_SOFT_RESET  0x00000100
32d722e3fbSopenharmony_ci#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200
33d722e3fbSopenharmony_ci
34d722e3fbSopenharmony_ci/* Clock flags to show which clocks should be controlled by a given platform */
35d722e3fbSopenharmony_ci#define KGSL_CLK_SRC	0x00000001
36d722e3fbSopenharmony_ci#define KGSL_CLK_CORE	0x00000002
37d722e3fbSopenharmony_ci#define KGSL_CLK_IFACE	0x00000004
38d722e3fbSopenharmony_ci#define KGSL_CLK_MEM	0x00000008
39d722e3fbSopenharmony_ci#define KGSL_CLK_MEM_IFACE 0x00000010
40d722e3fbSopenharmony_ci#define KGSL_CLK_AXI	0x00000020
41d722e3fbSopenharmony_ci
42d722e3fbSopenharmony_ci/*
43d722e3fbSopenharmony_ci * Reset status values for context
44d722e3fbSopenharmony_ci */
45d722e3fbSopenharmony_cienum kgsl_ctx_reset_stat {
46d722e3fbSopenharmony_ci	KGSL_CTX_STAT_NO_ERROR				= 0x00000000,
47d722e3fbSopenharmony_ci	KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT		= 0x00000001,
48d722e3fbSopenharmony_ci	KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT	= 0x00000002,
49d722e3fbSopenharmony_ci	KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT		= 0x00000003
50d722e3fbSopenharmony_ci};
51d722e3fbSopenharmony_ci
52d722e3fbSopenharmony_ci#define KGSL_MAX_PWRLEVELS 5
53d722e3fbSopenharmony_ci
54d722e3fbSopenharmony_ci#define KGSL_CONVERT_TO_MBPS(val) \
55d722e3fbSopenharmony_ci	(val*1000*1000U)
56d722e3fbSopenharmony_ci
57d722e3fbSopenharmony_ci/* device id */
58d722e3fbSopenharmony_cienum kgsl_deviceid {
59d722e3fbSopenharmony_ci	KGSL_DEVICE_3D0		= 0x00000000,
60d722e3fbSopenharmony_ci	KGSL_DEVICE_2D0		= 0x00000001,
61d722e3fbSopenharmony_ci	KGSL_DEVICE_2D1		= 0x00000002,
62d722e3fbSopenharmony_ci	KGSL_DEVICE_MAX		= 0x00000003
63d722e3fbSopenharmony_ci};
64d722e3fbSopenharmony_ci
65d722e3fbSopenharmony_cienum kgsl_user_mem_type {
66d722e3fbSopenharmony_ci	KGSL_USER_MEM_TYPE_PMEM		= 0x00000000,
67d722e3fbSopenharmony_ci	KGSL_USER_MEM_TYPE_ASHMEM	= 0x00000001,
68d722e3fbSopenharmony_ci	KGSL_USER_MEM_TYPE_ADDR		= 0x00000002,
69d722e3fbSopenharmony_ci	KGSL_USER_MEM_TYPE_ION		= 0x00000003,
70d722e3fbSopenharmony_ci	KGSL_USER_MEM_TYPE_MAX		= 0x00000004,
71d722e3fbSopenharmony_ci};
72d722e3fbSopenharmony_ci
73d722e3fbSopenharmony_cistruct kgsl_devinfo {
74d722e3fbSopenharmony_ci
75d722e3fbSopenharmony_ci	unsigned int device_id;
76d722e3fbSopenharmony_ci	/* chip revision id
77d722e3fbSopenharmony_ci	* coreid:8 majorrev:8 minorrev:8 patch:8
78d722e3fbSopenharmony_ci	*/
79d722e3fbSopenharmony_ci	unsigned int chip_id;
80d722e3fbSopenharmony_ci	unsigned int mmu_enabled;
81d722e3fbSopenharmony_ci	unsigned int gmem_gpubaseaddr;
82d722e3fbSopenharmony_ci	/*
83d722e3fbSopenharmony_ci	* This field contains the adreno revision
84d722e3fbSopenharmony_ci	* number 200, 205, 220, etc...
85d722e3fbSopenharmony_ci	*/
86d722e3fbSopenharmony_ci	unsigned int gpu_id;
87d722e3fbSopenharmony_ci	unsigned int gmem_sizebytes;
88d722e3fbSopenharmony_ci};
89d722e3fbSopenharmony_ci
90d722e3fbSopenharmony_ci/* this structure defines the region of memory that can be mmap()ed from this
91d722e3fbSopenharmony_ci   driver. The timestamp fields are volatile because they are written by the
92d722e3fbSopenharmony_ci   GPU
93d722e3fbSopenharmony_ci*/
94d722e3fbSopenharmony_cistruct kgsl_devmemstore {
95d722e3fbSopenharmony_ci	volatile unsigned int soptimestamp;
96d722e3fbSopenharmony_ci	unsigned int sbz;
97d722e3fbSopenharmony_ci	volatile unsigned int eoptimestamp;
98d722e3fbSopenharmony_ci	unsigned int sbz2;
99d722e3fbSopenharmony_ci	volatile unsigned int ts_cmp_enable;
100d722e3fbSopenharmony_ci	unsigned int sbz3;
101d722e3fbSopenharmony_ci	volatile unsigned int ref_wait_ts;
102d722e3fbSopenharmony_ci	unsigned int sbz4;
103d722e3fbSopenharmony_ci	unsigned int current_context;
104d722e3fbSopenharmony_ci	unsigned int sbz5;
105d722e3fbSopenharmony_ci};
106d722e3fbSopenharmony_ci
107d722e3fbSopenharmony_ci#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \
108d722e3fbSopenharmony_ci	((ctxt_id)*sizeof(struct kgsl_devmemstore) + \
109d722e3fbSopenharmony_ci	 offsetof(struct kgsl_devmemstore, field))
110d722e3fbSopenharmony_ci
111d722e3fbSopenharmony_ci/* timestamp id*/
112d722e3fbSopenharmony_cienum kgsl_timestamp_type {
113d722e3fbSopenharmony_ci	KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */
114d722e3fbSopenharmony_ci	KGSL_TIMESTAMP_RETIRED  = 0x00000002, /* end-of-pipeline timestamp*/
115d722e3fbSopenharmony_ci	KGSL_TIMESTAMP_QUEUED   = 0x00000003,
116d722e3fbSopenharmony_ci};
117d722e3fbSopenharmony_ci
118d722e3fbSopenharmony_ci/* property types - used with kgsl_device_getproperty */
119d722e3fbSopenharmony_cienum kgsl_property_type {
120d722e3fbSopenharmony_ci	KGSL_PROP_DEVICE_INFO     = 0x00000001,
121d722e3fbSopenharmony_ci	KGSL_PROP_DEVICE_SHADOW   = 0x00000002,
122d722e3fbSopenharmony_ci	KGSL_PROP_DEVICE_POWER    = 0x00000003,
123d722e3fbSopenharmony_ci	KGSL_PROP_SHMEM           = 0x00000004,
124d722e3fbSopenharmony_ci	KGSL_PROP_SHMEM_APERTURES = 0x00000005,
125d722e3fbSopenharmony_ci	KGSL_PROP_MMU_ENABLE 	  = 0x00000006,
126d722e3fbSopenharmony_ci	KGSL_PROP_INTERRUPT_WAITS = 0x00000007,
127d722e3fbSopenharmony_ci	KGSL_PROP_VERSION         = 0x00000008,
128d722e3fbSopenharmony_ci	KGSL_PROP_GPU_RESET_STAT  = 0x00000009,
129d722e3fbSopenharmony_ci	KGSL_PROP_PWRCTRL         = 0x0000000E,
130d722e3fbSopenharmony_ci};
131d722e3fbSopenharmony_ci
132d722e3fbSopenharmony_cistruct kgsl_shadowprop {
133d722e3fbSopenharmony_ci	unsigned int gpuaddr;
134d722e3fbSopenharmony_ci	unsigned int size;
135d722e3fbSopenharmony_ci	unsigned int flags; /* contains KGSL_FLAGS_ values */
136d722e3fbSopenharmony_ci};
137d722e3fbSopenharmony_ci
138d722e3fbSopenharmony_cistruct kgsl_pwrlevel {
139d722e3fbSopenharmony_ci	unsigned int gpu_freq;
140d722e3fbSopenharmony_ci	unsigned int bus_freq;
141d722e3fbSopenharmony_ci	unsigned int io_fraction;
142d722e3fbSopenharmony_ci};
143d722e3fbSopenharmony_ci
144d722e3fbSopenharmony_cistruct kgsl_version {
145d722e3fbSopenharmony_ci	unsigned int drv_major;
146d722e3fbSopenharmony_ci	unsigned int drv_minor;
147d722e3fbSopenharmony_ci	unsigned int dev_major;
148d722e3fbSopenharmony_ci	unsigned int dev_minor;
149d722e3fbSopenharmony_ci};
150d722e3fbSopenharmony_ci
151d722e3fbSopenharmony_ci#ifdef __KERNEL__
152d722e3fbSopenharmony_ci
153d722e3fbSopenharmony_ci#define KGSL_3D0_REG_MEMORY	"kgsl_3d0_reg_memory"
154d722e3fbSopenharmony_ci#define KGSL_3D0_IRQ		"kgsl_3d0_irq"
155d722e3fbSopenharmony_ci#define KGSL_2D0_REG_MEMORY	"kgsl_2d0_reg_memory"
156d722e3fbSopenharmony_ci#define KGSL_2D0_IRQ		"kgsl_2d0_irq"
157d722e3fbSopenharmony_ci#define KGSL_2D1_REG_MEMORY	"kgsl_2d1_reg_memory"
158d722e3fbSopenharmony_ci#define KGSL_2D1_IRQ		"kgsl_2d1_irq"
159d722e3fbSopenharmony_ci
160d722e3fbSopenharmony_cienum kgsl_iommu_context_id {
161d722e3fbSopenharmony_ci	KGSL_IOMMU_CONTEXT_USER = 0,
162d722e3fbSopenharmony_ci	KGSL_IOMMU_CONTEXT_PRIV = 1,
163d722e3fbSopenharmony_ci};
164d722e3fbSopenharmony_ci
165d722e3fbSopenharmony_cistruct kgsl_iommu_ctx {
166d722e3fbSopenharmony_ci	const char *iommu_ctx_name;
167d722e3fbSopenharmony_ci	enum kgsl_iommu_context_id ctx_id;
168d722e3fbSopenharmony_ci};
169d722e3fbSopenharmony_ci
170d722e3fbSopenharmony_cistruct kgsl_device_iommu_data {
171d722e3fbSopenharmony_ci	const struct kgsl_iommu_ctx *iommu_ctxs;
172d722e3fbSopenharmony_ci	int iommu_ctx_count;
173d722e3fbSopenharmony_ci	unsigned int physstart;
174d722e3fbSopenharmony_ci	unsigned int physend;
175d722e3fbSopenharmony_ci};
176d722e3fbSopenharmony_ci
177d722e3fbSopenharmony_cistruct kgsl_device_platform_data {
178d722e3fbSopenharmony_ci	struct kgsl_pwrlevel pwrlevel[KGSL_MAX_PWRLEVELS];
179d722e3fbSopenharmony_ci	int init_level;
180d722e3fbSopenharmony_ci	int num_levels;
181d722e3fbSopenharmony_ci	int (*set_grp_async)(void);
182d722e3fbSopenharmony_ci	unsigned int idle_timeout;
183d722e3fbSopenharmony_ci	bool strtstp_sleepwake;
184d722e3fbSopenharmony_ci	unsigned int nap_allowed;
185d722e3fbSopenharmony_ci	unsigned int clk_map;
186d722e3fbSopenharmony_ci	unsigned int idle_needed;
187d722e3fbSopenharmony_ci	struct msm_bus_scale_pdata *bus_scale_table;
188d722e3fbSopenharmony_ci	struct kgsl_device_iommu_data *iommu_data;
189d722e3fbSopenharmony_ci	int iommu_count;
190d722e3fbSopenharmony_ci	struct msm_dcvs_core_info *core_info;
191d722e3fbSopenharmony_ci};
192d722e3fbSopenharmony_ci
193d722e3fbSopenharmony_ci#endif
194d722e3fbSopenharmony_ci
195d722e3fbSopenharmony_ci/* structure holds list of ibs */
196d722e3fbSopenharmony_cistruct kgsl_ibdesc {
197d722e3fbSopenharmony_ci	unsigned int gpuaddr;
198d722e3fbSopenharmony_ci	void *hostptr;
199d722e3fbSopenharmony_ci	unsigned int sizedwords;
200d722e3fbSopenharmony_ci	unsigned int ctrl;
201d722e3fbSopenharmony_ci};
202d722e3fbSopenharmony_ci
203d722e3fbSopenharmony_ci/* ioctls */
204d722e3fbSopenharmony_ci#define KGSL_IOC_TYPE 0x09
205d722e3fbSopenharmony_ci
206d722e3fbSopenharmony_ci/* get misc info about the GPU
207d722e3fbSopenharmony_ci   type should be a value from enum kgsl_property_type
208d722e3fbSopenharmony_ci   value points to a structure that varies based on type
209d722e3fbSopenharmony_ci   sizebytes is sizeof() that structure
210d722e3fbSopenharmony_ci   for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo
211d722e3fbSopenharmony_ci   this structure contaings hardware versioning info.
212d722e3fbSopenharmony_ci   for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop
213d722e3fbSopenharmony_ci   this is used to find mmap() offset and sizes for mapping
214d722e3fbSopenharmony_ci   struct kgsl_memstore into userspace.
215d722e3fbSopenharmony_ci*/
216d722e3fbSopenharmony_cistruct kgsl_device_getproperty {
217d722e3fbSopenharmony_ci	unsigned int type;
218d722e3fbSopenharmony_ci	void  *value;
219d722e3fbSopenharmony_ci	unsigned int sizebytes;
220d722e3fbSopenharmony_ci};
221d722e3fbSopenharmony_ci
222d722e3fbSopenharmony_ci#define IOCTL_KGSL_DEVICE_GETPROPERTY \
223d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty)
224d722e3fbSopenharmony_ci
225d722e3fbSopenharmony_ci/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012
226d722e3fbSopenharmony_ci */
227d722e3fbSopenharmony_ci
228d722e3fbSopenharmony_ci/* block until the GPU has executed past a given timestamp
229d722e3fbSopenharmony_ci * timeout is in milliseconds.
230d722e3fbSopenharmony_ci */
231d722e3fbSopenharmony_cistruct kgsl_device_waittimestamp {
232d722e3fbSopenharmony_ci	unsigned int timestamp;
233d722e3fbSopenharmony_ci	unsigned int timeout;
234d722e3fbSopenharmony_ci};
235d722e3fbSopenharmony_ci
236d722e3fbSopenharmony_ci#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \
237d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp)
238d722e3fbSopenharmony_ci
239d722e3fbSopenharmony_cistruct kgsl_device_waittimestamp_ctxtid {
240d722e3fbSopenharmony_ci	unsigned int context_id;
241d722e3fbSopenharmony_ci	unsigned int timestamp;
242d722e3fbSopenharmony_ci	unsigned int timeout;
243d722e3fbSopenharmony_ci};
244d722e3fbSopenharmony_ci
245d722e3fbSopenharmony_ci#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \
246d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid)
247d722e3fbSopenharmony_ci
248d722e3fbSopenharmony_ci/* issue indirect commands to the GPU.
249d722e3fbSopenharmony_ci * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE
250d722e3fbSopenharmony_ci * ibaddr and sizedwords must specify a subset of a buffer created
251d722e3fbSopenharmony_ci * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM
252d722e3fbSopenharmony_ci * flags may be a mask of KGSL_CONTEXT_ values
253d722e3fbSopenharmony_ci * timestamp is a returned counter value which can be passed to
254d722e3fbSopenharmony_ci * other ioctls to determine when the commands have been executed by
255d722e3fbSopenharmony_ci * the GPU.
256d722e3fbSopenharmony_ci */
257d722e3fbSopenharmony_cistruct kgsl_ringbuffer_issueibcmds {
258d722e3fbSopenharmony_ci	unsigned int drawctxt_id;
259d722e3fbSopenharmony_ci	unsigned int ibdesc_addr;
260d722e3fbSopenharmony_ci	unsigned int numibs;
261d722e3fbSopenharmony_ci	unsigned int timestamp; /*output param */
262d722e3fbSopenharmony_ci	unsigned int flags;
263d722e3fbSopenharmony_ci};
264d722e3fbSopenharmony_ci
265d722e3fbSopenharmony_ci#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \
266d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds)
267d722e3fbSopenharmony_ci
268d722e3fbSopenharmony_ci/* read the most recently executed timestamp value
269d722e3fbSopenharmony_ci * type should be a value from enum kgsl_timestamp_type
270d722e3fbSopenharmony_ci */
271d722e3fbSopenharmony_cistruct kgsl_cmdstream_readtimestamp {
272d722e3fbSopenharmony_ci	unsigned int type;
273d722e3fbSopenharmony_ci	unsigned int timestamp; /*output param */
274d722e3fbSopenharmony_ci};
275d722e3fbSopenharmony_ci
276d722e3fbSopenharmony_ci#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \
277d722e3fbSopenharmony_ci	_IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
278d722e3fbSopenharmony_ci
279d722e3fbSopenharmony_ci#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \
280d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
281d722e3fbSopenharmony_ci
282d722e3fbSopenharmony_ci/* free memory when the GPU reaches a given timestamp.
283d722e3fbSopenharmony_ci * gpuaddr specify a memory region created by a
284d722e3fbSopenharmony_ci * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call
285d722e3fbSopenharmony_ci * type should be a value from enum kgsl_timestamp_type
286d722e3fbSopenharmony_ci */
287d722e3fbSopenharmony_cistruct kgsl_cmdstream_freememontimestamp {
288d722e3fbSopenharmony_ci	unsigned int gpuaddr;
289d722e3fbSopenharmony_ci	unsigned int type;
290d722e3fbSopenharmony_ci	unsigned int timestamp;
291d722e3fbSopenharmony_ci};
292d722e3fbSopenharmony_ci
293d722e3fbSopenharmony_ci#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \
294d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
295d722e3fbSopenharmony_ci
296d722e3fbSopenharmony_ci/* Previous versions of this header had incorrectly defined
297d722e3fbSopenharmony_ci   IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead
298d722e3fbSopenharmony_ci   of a write only ioctl.  To ensure binary compatibility, the following
299d722e3fbSopenharmony_ci   #define will be used to intercept the incorrect ioctl
300d722e3fbSopenharmony_ci*/
301d722e3fbSopenharmony_ci
302d722e3fbSopenharmony_ci#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \
303d722e3fbSopenharmony_ci	_IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
304d722e3fbSopenharmony_ci
305d722e3fbSopenharmony_ci/* create a draw context, which is used to preserve GPU state.
306d722e3fbSopenharmony_ci * The flags field may contain a mask KGSL_CONTEXT_*  values
307d722e3fbSopenharmony_ci */
308d722e3fbSopenharmony_cistruct kgsl_drawctxt_create {
309d722e3fbSopenharmony_ci	unsigned int flags;
310d722e3fbSopenharmony_ci	unsigned int drawctxt_id; /*output param */
311d722e3fbSopenharmony_ci};
312d722e3fbSopenharmony_ci
313d722e3fbSopenharmony_ci#define IOCTL_KGSL_DRAWCTXT_CREATE \
314d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create)
315d722e3fbSopenharmony_ci
316d722e3fbSopenharmony_ci/* destroy a draw context */
317d722e3fbSopenharmony_cistruct kgsl_drawctxt_destroy {
318d722e3fbSopenharmony_ci	unsigned int drawctxt_id;
319d722e3fbSopenharmony_ci};
320d722e3fbSopenharmony_ci
321d722e3fbSopenharmony_ci#define IOCTL_KGSL_DRAWCTXT_DESTROY \
322d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy)
323d722e3fbSopenharmony_ci
324d722e3fbSopenharmony_ci/* add a block of pmem, fb, ashmem or user allocated address
325d722e3fbSopenharmony_ci * into the GPU address space */
326d722e3fbSopenharmony_cistruct kgsl_map_user_mem {
327d722e3fbSopenharmony_ci	int fd;
328d722e3fbSopenharmony_ci	unsigned int gpuaddr;   /*output param */
329d722e3fbSopenharmony_ci	unsigned int len;
330d722e3fbSopenharmony_ci	unsigned int offset;
331d722e3fbSopenharmony_ci	unsigned int hostptr;   /*input param */
332d722e3fbSopenharmony_ci	enum kgsl_user_mem_type memtype;
333d722e3fbSopenharmony_ci	unsigned int reserved;	/* May be required to add
334d722e3fbSopenharmony_ci				params for another mem type */
335d722e3fbSopenharmony_ci};
336d722e3fbSopenharmony_ci
337d722e3fbSopenharmony_ci#define IOCTL_KGSL_MAP_USER_MEM \
338d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem)
339d722e3fbSopenharmony_ci
340d722e3fbSopenharmony_cistruct kgsl_cmdstream_readtimestamp_ctxtid {
341d722e3fbSopenharmony_ci	unsigned int context_id;
342d722e3fbSopenharmony_ci	unsigned int type;
343d722e3fbSopenharmony_ci	unsigned int timestamp; /*output param */
344d722e3fbSopenharmony_ci};
345d722e3fbSopenharmony_ci
346d722e3fbSopenharmony_ci#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \
347d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid)
348d722e3fbSopenharmony_ci
349d722e3fbSopenharmony_cistruct kgsl_cmdstream_freememontimestamp_ctxtid {
350d722e3fbSopenharmony_ci	unsigned int context_id;
351d722e3fbSopenharmony_ci	unsigned int gpuaddr;
352d722e3fbSopenharmony_ci	unsigned int type;
353d722e3fbSopenharmony_ci	unsigned int timestamp;
354d722e3fbSopenharmony_ci};
355d722e3fbSopenharmony_ci
356d722e3fbSopenharmony_ci#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \
357d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x17, \
358d722e3fbSopenharmony_ci	struct kgsl_cmdstream_freememontimestamp_ctxtid)
359d722e3fbSopenharmony_ci
360d722e3fbSopenharmony_ci/* add a block of pmem or fb into the GPU address space */
361d722e3fbSopenharmony_cistruct kgsl_sharedmem_from_pmem {
362d722e3fbSopenharmony_ci	int pmem_fd;
363d722e3fbSopenharmony_ci	unsigned int gpuaddr;	/*output param */
364d722e3fbSopenharmony_ci	unsigned int len;
365d722e3fbSopenharmony_ci	unsigned int offset;
366d722e3fbSopenharmony_ci};
367d722e3fbSopenharmony_ci
368d722e3fbSopenharmony_ci#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \
369d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem)
370d722e3fbSopenharmony_ci
371d722e3fbSopenharmony_ci/* remove memory from the GPU's address space */
372d722e3fbSopenharmony_cistruct kgsl_sharedmem_free {
373d722e3fbSopenharmony_ci	unsigned int gpuaddr;
374d722e3fbSopenharmony_ci};
375d722e3fbSopenharmony_ci
376d722e3fbSopenharmony_ci#define IOCTL_KGSL_SHAREDMEM_FREE \
377d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free)
378d722e3fbSopenharmony_ci
379d722e3fbSopenharmony_cistruct kgsl_cff_user_event {
380d722e3fbSopenharmony_ci	unsigned char cff_opcode;
381d722e3fbSopenharmony_ci	unsigned int op1;
382d722e3fbSopenharmony_ci	unsigned int op2;
383d722e3fbSopenharmony_ci	unsigned int op3;
384d722e3fbSopenharmony_ci	unsigned int op4;
385d722e3fbSopenharmony_ci	unsigned int op5;
386d722e3fbSopenharmony_ci	unsigned int __pad[2];
387d722e3fbSopenharmony_ci};
388d722e3fbSopenharmony_ci
389d722e3fbSopenharmony_ci#define IOCTL_KGSL_CFF_USER_EVENT \
390d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event)
391d722e3fbSopenharmony_ci
392d722e3fbSopenharmony_cistruct kgsl_gmem_desc {
393d722e3fbSopenharmony_ci	unsigned int x;
394d722e3fbSopenharmony_ci	unsigned int y;
395d722e3fbSopenharmony_ci	unsigned int width;
396d722e3fbSopenharmony_ci	unsigned int height;
397d722e3fbSopenharmony_ci	unsigned int pitch;
398d722e3fbSopenharmony_ci};
399d722e3fbSopenharmony_ci
400d722e3fbSopenharmony_cistruct kgsl_buffer_desc {
401d722e3fbSopenharmony_ci	void 			*hostptr;
402d722e3fbSopenharmony_ci	unsigned int	gpuaddr;
403d722e3fbSopenharmony_ci	int				size;
404d722e3fbSopenharmony_ci	unsigned int	format;
405d722e3fbSopenharmony_ci	unsigned int  	pitch;
406d722e3fbSopenharmony_ci	unsigned int  	enabled;
407d722e3fbSopenharmony_ci};
408d722e3fbSopenharmony_ci
409d722e3fbSopenharmony_cistruct kgsl_bind_gmem_shadow {
410d722e3fbSopenharmony_ci	unsigned int drawctxt_id;
411d722e3fbSopenharmony_ci	struct kgsl_gmem_desc gmem_desc;
412d722e3fbSopenharmony_ci	unsigned int shadow_x;
413d722e3fbSopenharmony_ci	unsigned int shadow_y;
414d722e3fbSopenharmony_ci	struct kgsl_buffer_desc shadow_buffer;
415d722e3fbSopenharmony_ci	unsigned int buffer_id;
416d722e3fbSopenharmony_ci};
417d722e3fbSopenharmony_ci
418d722e3fbSopenharmony_ci#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \
419d722e3fbSopenharmony_ci    _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow)
420d722e3fbSopenharmony_ci
421d722e3fbSopenharmony_ci/* add a block of memory into the GPU address space */
422d722e3fbSopenharmony_cistruct kgsl_sharedmem_from_vmalloc {
423d722e3fbSopenharmony_ci	unsigned int gpuaddr;	/*output param */
424d722e3fbSopenharmony_ci	unsigned int hostptr;
425d722e3fbSopenharmony_ci	unsigned int flags;
426d722e3fbSopenharmony_ci};
427d722e3fbSopenharmony_ci
428d722e3fbSopenharmony_ci#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \
429d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc)
430d722e3fbSopenharmony_ci
431d722e3fbSopenharmony_ci#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \
432d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free)
433d722e3fbSopenharmony_ci
434d722e3fbSopenharmony_cistruct kgsl_drawctxt_set_bin_base_offset {
435d722e3fbSopenharmony_ci	unsigned int drawctxt_id;
436d722e3fbSopenharmony_ci	unsigned int offset;
437d722e3fbSopenharmony_ci};
438d722e3fbSopenharmony_ci
439d722e3fbSopenharmony_ci#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \
440d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset)
441d722e3fbSopenharmony_ci
442d722e3fbSopenharmony_cienum kgsl_cmdwindow_type {
443d722e3fbSopenharmony_ci	KGSL_CMDWINDOW_MIN     = 0x00000000,
444d722e3fbSopenharmony_ci	KGSL_CMDWINDOW_2D      = 0x00000000,
445d722e3fbSopenharmony_ci	KGSL_CMDWINDOW_3D      = 0x00000001, /* legacy */
446d722e3fbSopenharmony_ci	KGSL_CMDWINDOW_MMU     = 0x00000002,
447d722e3fbSopenharmony_ci	KGSL_CMDWINDOW_ARBITER = 0x000000FF,
448d722e3fbSopenharmony_ci	KGSL_CMDWINDOW_MAX     = 0x000000FF,
449d722e3fbSopenharmony_ci};
450d722e3fbSopenharmony_ci
451d722e3fbSopenharmony_ci/* write to the command window */
452d722e3fbSopenharmony_cistruct kgsl_cmdwindow_write {
453d722e3fbSopenharmony_ci	enum kgsl_cmdwindow_type target;
454d722e3fbSopenharmony_ci	unsigned int addr;
455d722e3fbSopenharmony_ci	unsigned int data;
456d722e3fbSopenharmony_ci};
457d722e3fbSopenharmony_ci
458d722e3fbSopenharmony_ci#define IOCTL_KGSL_CMDWINDOW_WRITE \
459d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write)
460d722e3fbSopenharmony_ci
461d722e3fbSopenharmony_cistruct kgsl_gpumem_alloc {
462d722e3fbSopenharmony_ci	unsigned long gpuaddr;
463d722e3fbSopenharmony_ci	size_t size;
464d722e3fbSopenharmony_ci	unsigned int flags;
465d722e3fbSopenharmony_ci};
466d722e3fbSopenharmony_ci
467d722e3fbSopenharmony_ci#define IOCTL_KGSL_GPUMEM_ALLOC \
468d722e3fbSopenharmony_ci	_IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc)
469d722e3fbSopenharmony_ci
470d722e3fbSopenharmony_cistruct kgsl_cff_syncmem {
471d722e3fbSopenharmony_ci	unsigned int gpuaddr;
472d722e3fbSopenharmony_ci	unsigned int len;
473d722e3fbSopenharmony_ci	unsigned int __pad[2]; /* For future binary compatibility */
474d722e3fbSopenharmony_ci};
475d722e3fbSopenharmony_ci
476d722e3fbSopenharmony_ci#define IOCTL_KGSL_CFF_SYNCMEM \
477d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem)
478d722e3fbSopenharmony_ci
479d722e3fbSopenharmony_ci/*
480d722e3fbSopenharmony_ci * A timestamp event allows the user space to register an action following an
481d722e3fbSopenharmony_ci * expired timestamp.
482d722e3fbSopenharmony_ci */
483d722e3fbSopenharmony_ci
484d722e3fbSopenharmony_cistruct kgsl_timestamp_event {
485d722e3fbSopenharmony_ci	int type;                /* Type of event (see list below) */
486d722e3fbSopenharmony_ci	unsigned int timestamp;  /* Timestamp to trigger event on */
487d722e3fbSopenharmony_ci	unsigned int context_id; /* Context for the timestamp */
488d722e3fbSopenharmony_ci	void *priv;              /* Pointer to the event specific blob */
489d722e3fbSopenharmony_ci	size_t len;              /* Size of the event specific blob */
490d722e3fbSopenharmony_ci};
491d722e3fbSopenharmony_ci
492d722e3fbSopenharmony_ci#define IOCTL_KGSL_TIMESTAMP_EVENT \
493d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event)
494d722e3fbSopenharmony_ci
495d722e3fbSopenharmony_ci/* A genlock timestamp event releases an existing lock on timestamp expire */
496d722e3fbSopenharmony_ci
497d722e3fbSopenharmony_ci#define KGSL_TIMESTAMP_EVENT_GENLOCK 1
498d722e3fbSopenharmony_ci
499d722e3fbSopenharmony_cistruct kgsl_timestamp_event_genlock {
500d722e3fbSopenharmony_ci	int handle; /* Handle of the genlock lock to release */
501d722e3fbSopenharmony_ci};
502d722e3fbSopenharmony_ci
503d722e3fbSopenharmony_ci/*
504d722e3fbSopenharmony_ci * Set a property within the kernel.  Uses the same structure as
505d722e3fbSopenharmony_ci * IOCTL_KGSL_GETPROPERTY
506d722e3fbSopenharmony_ci */
507d722e3fbSopenharmony_ci
508d722e3fbSopenharmony_ci#define IOCTL_KGSL_SETPROPERTY \
509d722e3fbSopenharmony_ci	_IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty)
510d722e3fbSopenharmony_ci
511d722e3fbSopenharmony_ci#ifdef __KERNEL__
512d722e3fbSopenharmony_ci#ifdef CONFIG_MSM_KGSL_DRM
513d722e3fbSopenharmony_ciint kgsl_gem_obj_addr(int drm_fd, int handle, unsigned long *start,
514d722e3fbSopenharmony_ci			unsigned long *len);
515d722e3fbSopenharmony_ci#else
516d722e3fbSopenharmony_ci#define kgsl_gem_obj_addr(...) 0
517d722e3fbSopenharmony_ci#endif
518d722e3fbSopenharmony_ci#endif
519d722e3fbSopenharmony_ci#endif /* _MSM_KGSL_H */
520