15bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#ifndef _MSM_KGSL_H
25bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define _MSM_KGSL_H
35bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
45bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_VERSION_MAJOR        3
55bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_VERSION_MINOR        14
65bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
75bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/*context flags */
85bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_SAVE_GMEM		0x00000001
95bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_NO_GMEM_ALLOC	0x00000002
105bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_SUBMIT_IB_LIST	0x00000004
115bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_CTX_SWITCH		0x00000008
125bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_PREAMBLE		0x00000010
135bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_TRASH_STATE	0x00000020
145bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_PER_CONTEXT_TS	0x00000040
155bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_USER_GENERATED_TS	0x00000080
165bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
175bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONTEXT_INVALID 0xffffffff
185bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
195bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* Memory allocayion flags */
205bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMFLAGS_GPUREADONLY	0x01000000
215bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
225bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_MASK		0x0000FF00
235bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_SHIFT		8
245bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
255bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* Memory types for which allocations are made */
265bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_OBJECTANY			0
275bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_FRAMEBUFFER		1
285bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_RENDERBUFFER		2
295bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_ARRAYBUFFER		3
305bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER		4
315bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_VERTEXARRAYBUFFER		5
325bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_TEXTURE			6
335bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_SURFACE			7
345bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_EGL_SURFACE		8
355bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_GL				9
365bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_CL				10
375bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_CL_BUFFER_MAP		11
385bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_CL_BUFFER_NOMAP		12
395bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_CL_IMAGE_MAP		13
405bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_CL_IMAGE_NOMAP		14
415bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_CL_KERNEL_STACK		15
425bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_COMMAND			16
435bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_2D				17
445bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_EGL_IMAGE			18
455bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_EGL_SHADOW			19
465bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_MULTISAMPLE		20
475bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMTYPE_KERNEL			255
485bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
495bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/*
505bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * Alignment hint, passed as the power of 2 exponent.
515bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * i.e 4k (2^12) would be 12, 64k (2^16)would be 16.
525bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
535bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMALIGN_MASK		0x00FF0000
545bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMALIGN_SHIFT		16
555bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
565bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* generic flag values */
575bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_NORMALMODE  0x00000000
585bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_SAFEMODE    0x00000001
595bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_INITIALIZED0 0x00000002
605bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_INITIALIZED 0x00000004
615bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_STARTED     0x00000008
625bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_ACTIVE      0x00000010
635bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_RESERVED0   0x00000020
645bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_RESERVED1   0x00000040
655bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_RESERVED2   0x00000080
665bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_SOFT_RESET  0x00000100
675bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200
685bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
695bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* Clock flags to show which clocks should be controled by a given platform */
705bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CLK_SRC	0x00000001
715bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CLK_CORE	0x00000002
725bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CLK_IFACE	0x00000004
735bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CLK_MEM	0x00000008
745bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CLK_MEM_IFACE 0x00000010
755bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CLK_AXI	0x00000020
765bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
775bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* Server Side Sync Timeout in milliseconds */
785bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000
795bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
805bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/*
815bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * Reset status values for context
825bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
835bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonenum kgsl_ctx_reset_stat {
845bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CTX_STAT_NO_ERROR				= 0x00000000,
855bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT		= 0x00000001,
865bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT	= 0x00000002,
875bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT		= 0x00000003
885bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
895bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
905bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_CONVERT_TO_MBPS(val) \
915bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	(val*1000*1000U)
925bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
935bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* device id */
945bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonenum kgsl_deviceid {
955bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_DEVICE_3D0		= 0x00000000,
965bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_DEVICE_2D0		= 0x00000001,
975bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_DEVICE_2D1		= 0x00000002,
985bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_DEVICE_MAX		= 0x00000003
995bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1005bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1015bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonenum kgsl_user_mem_type {
1025bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_USER_MEM_TYPE_PMEM		= 0x00000000,
1035bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_USER_MEM_TYPE_ASHMEM	= 0x00000001,
1045bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_USER_MEM_TYPE_ADDR		= 0x00000002,
1055bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_USER_MEM_TYPE_ION		= 0x00000003,
1065bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_USER_MEM_TYPE_MAX		= 0x00000004,
1075bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1085bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1095bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_devinfo {
1105bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1115bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int device_id;
1125bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	/* chip revision id
1135bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	* coreid:8 majorrev:8 minorrev:8 patch:8
1145bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	*/
1155bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int chip_id;
1165bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int mmu_enabled;
1175bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gmem_gpubaseaddr;
1185bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	/*
1195bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	* This field contains the adreno revision
1205bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	* number 200, 205, 220, etc...
1215bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	*/
1225bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpu_id;
1235bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gmem_sizebytes;
1245bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1255bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1265bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* this structure defines the region of memory that can be mmap()ed from this
1275bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   driver. The timestamp fields are volatile because they are written by the
1285bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   GPU
1295bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson*/
1305bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_devmemstore {
1315bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	volatile unsigned int soptimestamp;
1325bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int sbz;
1335bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	volatile unsigned int eoptimestamp;
1345bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int sbz2;
1355bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	volatile unsigned int ts_cmp_enable;
1365bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int sbz3;
1375bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	volatile unsigned int ref_wait_ts;
1385bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int sbz4;
1395bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int current_context;
1405bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int sbz5;
1415bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1425bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1435bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \
1445bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	((ctxt_id)*sizeof(struct kgsl_devmemstore) + \
1455bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	 offsetof(struct kgsl_devmemstore, field))
1465bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1475bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* timestamp id*/
1485bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonenum kgsl_timestamp_type {
1495bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */
1505bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_TIMESTAMP_RETIRED  = 0x00000002, /* end-of-pipeline timestamp*/
1515bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_TIMESTAMP_QUEUED   = 0x00000003,
1525bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1535bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1545bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* property types - used with kgsl_device_getproperty */
1555bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonenum kgsl_property_type {
1565bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_DEVICE_INFO     = 0x00000001,
1575bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_DEVICE_SHADOW   = 0x00000002,
1585bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_DEVICE_POWER    = 0x00000003,
1595bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_SHMEM           = 0x00000004,
1605bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_SHMEM_APERTURES = 0x00000005,
1615bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_MMU_ENABLE 	  = 0x00000006,
1625bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_INTERRUPT_WAITS = 0x00000007,
1635bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_VERSION         = 0x00000008,
1645bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_GPU_RESET_STAT  = 0x00000009,
1655bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_PROP_PWRCTRL         = 0x0000000E,
1665bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1675bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1685bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_shadowprop {
1695bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;
1705bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int size;
1715bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int flags; /* contains KGSL_FLAGS_ values */
1725bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1735bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1745bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_version {
1755bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int drv_major;
1765bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int drv_minor;
1775bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int dev_major;
1785bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int dev_minor;
1795bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1805bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1815bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* structure holds list of ibs */
1825bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_ibdesc {
1835bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;
1845bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	void *hostptr;
1855bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int sizedwords;
1865bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int ctrl;
1875bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
1885bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1895bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* ioctls */
1905bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_IOC_TYPE 0x09
1915bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
1925bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* get misc info about the GPU
1935bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   type should be a value from enum kgsl_property_type
1945bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   value points to a structure that varies based on type
1955bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   sizebytes is sizeof() that structure
1965bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo
1975bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   this structure contaings hardware versioning info.
1985bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop
1995bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   this is used to find mmap() offset and sizes for mapping
2005bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   struct kgsl_memstore into userspace.
2015bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson*/
2025bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_device_getproperty {
2035bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int type;
2045bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	void  *value;
2055bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int sizebytes;
2065bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
2075bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2085bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_DEVICE_GETPROPERTY \
2095bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty)
2105bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2115bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012
2125bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
2135bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2145bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* block until the GPU has executed past a given timestamp
2155bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * timeout is in milliseconds.
2165bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
2175bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_device_waittimestamp {
2185bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp;
2195bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timeout;
2205bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
2215bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2225bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \
2235bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp)
2245bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2255bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_device_waittimestamp_ctxtid {
2265bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int context_id;
2275bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp;
2285bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timeout;
2295bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
2305bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2315bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \
2325bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid)
2335bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2345bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* issue indirect commands to the GPU.
2355bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE
2365bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * ibaddr and sizedwords must specify a subset of a buffer created
2375bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM
2385bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * flags may be a mask of KGSL_CONTEXT_ values
2395bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * timestamp is a returned counter value which can be passed to
2405bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * other ioctls to determine when the commands have been executed by
2415bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * the GPU.
2425bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
2435bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_ringbuffer_issueibcmds {
2445bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int drawctxt_id;
2455bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int ibdesc_addr;
2465bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int numibs;
2475bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp; /*output param */
2485bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int flags;
2495bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
2505bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2515bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \
2525bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds)
2535bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2545bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* read the most recently executed timestamp value
2555bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * type should be a value from enum kgsl_timestamp_type
2565bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
2575bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_cmdstream_readtimestamp {
2585bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int type;
2595bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp; /*output param */
2605bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
2615bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2625bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \
2635bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
2645bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2655bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \
2665bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
2675bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2685bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* free memory when the GPU reaches a given timestamp.
2695bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * gpuaddr specify a memory region created by a
2705bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call
2715bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * type should be a value from enum kgsl_timestamp_type
2725bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
2735bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_cmdstream_freememontimestamp {
2745bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;
2755bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int type;
2765bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp;
2775bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
2785bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2795bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \
2805bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
2815bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2825bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* Previous versions of this header had incorrectly defined
2835bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead
2845bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   of a write only ioctl.  To ensure binary compatability, the following
2855bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson   #define will be used to intercept the incorrect ioctl
2865bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson*/
2875bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2885bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \
2895bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
2905bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2915bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* create a draw context, which is used to preserve GPU state.
2925bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * The flags field may contain a mask KGSL_CONTEXT_*  values
2935bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
2945bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_drawctxt_create {
2955bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int flags;
2965bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int drawctxt_id; /*output param */
2975bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
2985bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
2995bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_DRAWCTXT_CREATE \
3005bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create)
3015bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3025bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* destroy a draw context */
3035bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_drawctxt_destroy {
3045bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int drawctxt_id;
3055bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3065bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3075bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_DRAWCTXT_DESTROY \
3085bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy)
3095bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3105bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* add a block of pmem, fb, ashmem or user allocated address
3115bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * into the GPU address space */
3125bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_map_user_mem {
3135bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int fd;
3145bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;   /*output param */
3155bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int len;
3165bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int offset;
3175bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int hostptr;   /*input param */
3185bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	enum kgsl_user_mem_type memtype;
3195bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int flags;
3205bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3215bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3225bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_MAP_USER_MEM \
3235bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem)
3245bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3255bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_cmdstream_readtimestamp_ctxtid {
3265bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int context_id;
3275bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int type;
3285bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp; /*output param */
3295bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3305bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3315bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \
3325bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid)
3335bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3345bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_cmdstream_freememontimestamp_ctxtid {
3355bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int context_id;
3365bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;
3375bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int type;
3385bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp;
3395bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3405bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3415bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \
3425bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x17, \
3435bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct kgsl_cmdstream_freememontimestamp_ctxtid)
3445bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3455bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* add a block of pmem or fb into the GPU address space */
3465bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_sharedmem_from_pmem {
3475bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int pmem_fd;
3485bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;	/*output param */
3495bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int len;
3505bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int offset;
3515bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3525bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3535bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \
3545bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem)
3555bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3565bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* remove memory from the GPU's address space */
3575bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_sharedmem_free {
3585bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;
3595bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3605bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3615bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_SHAREDMEM_FREE \
3625bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free)
3635bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3645bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_cff_user_event {
3655bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned char cff_opcode;
3665bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int op1;
3675bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int op2;
3685bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int op3;
3695bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int op4;
3705bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int op5;
3715bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int __pad[2];
3725bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3735bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3745bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CFF_USER_EVENT \
3755bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event)
3765bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3775bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_gmem_desc {
3785bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int x;
3795bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int y;
3805bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int width;
3815bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int height;
3825bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int pitch;
3835bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3845bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3855bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_buffer_desc {
3865bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	void 			*hostptr;
3875bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int	gpuaddr;
3885bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int				size;
3895bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int	format;
3905bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int  	pitch;
3915bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int  	enabled;
3925bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
3935bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
3945bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_bind_gmem_shadow {
3955bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int drawctxt_id;
3965bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct kgsl_gmem_desc gmem_desc;
3975bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int shadow_x;
3985bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int shadow_y;
3995bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct kgsl_buffer_desc shadow_buffer;
4005bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int buffer_id;
4015bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4025bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4035bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \
4045bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson    _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow)
4055bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4065bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* add a block of memory into the GPU address space */
4075bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4085bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/*
4095bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012
4105bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * use IOCTL_KGSL_GPUMEM_ALLOC instead
4115bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
4125bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4135bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_sharedmem_from_vmalloc {
4145bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;	/*output param */
4155bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int hostptr;
4165bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int flags;
4175bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4185bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4195bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \
4205bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc)
4215bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4225bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \
4235bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free)
4245bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4255bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_drawctxt_set_bin_base_offset {
4265bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int drawctxt_id;
4275bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int offset;
4285bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4295bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4305bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \
4315bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset)
4325bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4335bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonenum kgsl_cmdwindow_type {
4345bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CMDWINDOW_MIN     = 0x00000000,
4355bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CMDWINDOW_2D      = 0x00000000,
4365bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CMDWINDOW_3D      = 0x00000001, /* legacy */
4375bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CMDWINDOW_MMU     = 0x00000002,
4385bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CMDWINDOW_ARBITER = 0x000000FF,
4395bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	KGSL_CMDWINDOW_MAX     = 0x000000FF,
4405bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4415bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4425bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* write to the command window */
4435bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_cmdwindow_write {
4445bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	enum kgsl_cmdwindow_type target;
4455bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int addr;
4465bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int data;
4475bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4485bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4495bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CMDWINDOW_WRITE \
4505bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write)
4515bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4525bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_gpumem_alloc {
4535bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned long gpuaddr;
4545bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	size_t size;
4555bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int flags;
4565bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4575bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4585bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_GPUMEM_ALLOC \
4595bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc)
4605bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4615bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_cff_syncmem {
4625bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int gpuaddr;
4635bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int len;
4645bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int __pad[2]; /* For future binary compatibility */
4655bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4665bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4675bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_CFF_SYNCMEM \
4685bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem)
4695bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4705bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/*
4715bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * A timestamp event allows the user space to register an action following an
4725bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to
4735bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * _IOWR to support fences which need to return a fd for the priv parameter.
4745bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
4755bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4765bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_timestamp_event {
4775bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int type;                /* Type of event (see list below) */
4785bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int timestamp;  /* Timestamp to trigger event on */
4795bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int context_id; /* Context for the timestamp */
4805bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	void *priv;              /* Pointer to the event specific blob */
4815bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	size_t len;              /* Size of the event specific blob */
4825bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4835bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4845bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \
4855bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event)
4865bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4875bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* A genlock timestamp event releases an existing lock on timestamp expire */
4885bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4895bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_TIMESTAMP_EVENT_GENLOCK 1
4905bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4915bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_timestamp_event_genlock {
4925bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int handle; /* Handle of the genlock lock to release */
4935bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
4945bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4955bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/* A fence timestamp event releases an existing lock on timestamp expire */
4965bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4975bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define KGSL_TIMESTAMP_EVENT_FENCE 2
4985bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
4995bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct kgsl_timestamp_event_fence {
5005bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int fence_fd; /* Fence to signal */
5015bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
5025bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
5035bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson/*
5045bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * Set a property within the kernel.  Uses the same structure as
5055bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson * IOCTL_KGSL_GETPROPERTY
5065bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson */
5075bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
5085bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_SETPROPERTY \
5095bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty)
5105bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
5115bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define IOCTL_KGSL_TIMESTAMP_EVENT \
5125bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	_IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event)
5135bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
5145bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#ifdef __KERNEL__
5155bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#ifdef CONFIG_MSM_KGSL_DRM
5165bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonint kgsl_gem_obj_addr(int drm_fd, int handle, unsigned long *start,
5175bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson			unsigned long *len);
5185bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#else
5195bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define kgsl_gem_obj_addr(...) 0
5205bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#endif
5215bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#endif
5225bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#endif /* _MSM_KGSL_H */
523