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