Blame freedreno/kgsl/msm_kgsl.h

Packit 631bab
#ifndef _MSM_KGSL_H
Packit 631bab
#define _MSM_KGSL_H
Packit 631bab
Packit 631bab
#define KGSL_VERSION_MAJOR        3
Packit 631bab
#define KGSL_VERSION_MINOR        11
Packit 631bab
Packit 631bab
/*context flags */
Packit 631bab
#define KGSL_CONTEXT_SAVE_GMEM		0x00000001
Packit 631bab
#define KGSL_CONTEXT_NO_GMEM_ALLOC	0x00000002
Packit 631bab
#define KGSL_CONTEXT_SUBMIT_IB_LIST	0x00000004
Packit 631bab
#define KGSL_CONTEXT_CTX_SWITCH		0x00000008
Packit 631bab
#define KGSL_CONTEXT_PREAMBLE		0x00000010
Packit 631bab
#define KGSL_CONTEXT_TRASH_STATE	0x00000020
Packit 631bab
#define KGSL_CONTEXT_PER_CONTEXT_TS	0x00000040
Packit 631bab
Packit 631bab
#define KGSL_CONTEXT_INVALID 0xffffffff
Packit 631bab
Packit 631bab
/* Memory allocayion flags */
Packit 631bab
#define KGSL_MEMFLAGS_GPUREADONLY	0x01000000
Packit 631bab
Packit 631bab
/* generic flag values */
Packit 631bab
#define KGSL_FLAGS_NORMALMODE  0x00000000
Packit 631bab
#define KGSL_FLAGS_SAFEMODE    0x00000001
Packit 631bab
#define KGSL_FLAGS_INITIALIZED0 0x00000002
Packit 631bab
#define KGSL_FLAGS_INITIALIZED 0x00000004
Packit 631bab
#define KGSL_FLAGS_STARTED     0x00000008
Packit 631bab
#define KGSL_FLAGS_ACTIVE      0x00000010
Packit 631bab
#define KGSL_FLAGS_RESERVED0   0x00000020
Packit 631bab
#define KGSL_FLAGS_RESERVED1   0x00000040
Packit 631bab
#define KGSL_FLAGS_RESERVED2   0x00000080
Packit 631bab
#define KGSL_FLAGS_SOFT_RESET  0x00000100
Packit 631bab
#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200
Packit 631bab
Packit 631bab
/* Clock flags to show which clocks should be controlled by a given platform */
Packit 631bab
#define KGSL_CLK_SRC	0x00000001
Packit 631bab
#define KGSL_CLK_CORE	0x00000002
Packit 631bab
#define KGSL_CLK_IFACE	0x00000004
Packit 631bab
#define KGSL_CLK_MEM	0x00000008
Packit 631bab
#define KGSL_CLK_MEM_IFACE 0x00000010
Packit 631bab
#define KGSL_CLK_AXI	0x00000020
Packit 631bab
Packit 631bab
/*
Packit 631bab
 * Reset status values for context
Packit 631bab
 */
Packit 631bab
enum kgsl_ctx_reset_stat {
Packit 631bab
	KGSL_CTX_STAT_NO_ERROR				= 0x00000000,
Packit 631bab
	KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT		= 0x00000001,
Packit 631bab
	KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT	= 0x00000002,
Packit 631bab
	KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT		= 0x00000003
Packit 631bab
};
Packit 631bab
Packit 631bab
#define KGSL_MAX_PWRLEVELS 5
Packit 631bab
Packit 631bab
#define KGSL_CONVERT_TO_MBPS(val) \
Packit 631bab
	(val*1000*1000U)
Packit 631bab
Packit 631bab
/* device id */
Packit 631bab
enum kgsl_deviceid {
Packit 631bab
	KGSL_DEVICE_3D0		= 0x00000000,
Packit 631bab
	KGSL_DEVICE_2D0		= 0x00000001,
Packit 631bab
	KGSL_DEVICE_2D1		= 0x00000002,
Packit 631bab
	KGSL_DEVICE_MAX		= 0x00000003
Packit 631bab
};
Packit 631bab
Packit 631bab
enum kgsl_user_mem_type {
Packit 631bab
	KGSL_USER_MEM_TYPE_PMEM		= 0x00000000,
Packit 631bab
	KGSL_USER_MEM_TYPE_ASHMEM	= 0x00000001,
Packit 631bab
	KGSL_USER_MEM_TYPE_ADDR		= 0x00000002,
Packit 631bab
	KGSL_USER_MEM_TYPE_ION		= 0x00000003,
Packit 631bab
	KGSL_USER_MEM_TYPE_MAX		= 0x00000004,
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_devinfo {
Packit 631bab
Packit 631bab
	unsigned int device_id;
Packit 631bab
	/* chip revision id
Packit 631bab
	* coreid:8 majorrev:8 minorrev:8 patch:8
Packit 631bab
	*/
Packit 631bab
	unsigned int chip_id;
Packit 631bab
	unsigned int mmu_enabled;
Packit 631bab
	unsigned int gmem_gpubaseaddr;
Packit 631bab
	/*
Packit 631bab
	* This field contains the adreno revision
Packit 631bab
	* number 200, 205, 220, etc...
Packit 631bab
	*/
Packit 631bab
	unsigned int gpu_id;
Packit 631bab
	unsigned int gmem_sizebytes;
Packit 631bab
};
Packit 631bab
Packit 631bab
/* this structure defines the region of memory that can be mmap()ed from this
Packit 631bab
   driver. The timestamp fields are volatile because they are written by the
Packit 631bab
   GPU
Packit 631bab
*/
Packit 631bab
struct kgsl_devmemstore {
Packit 631bab
	volatile unsigned int soptimestamp;
Packit 631bab
	unsigned int sbz;
Packit 631bab
	volatile unsigned int eoptimestamp;
Packit 631bab
	unsigned int sbz2;
Packit 631bab
	volatile unsigned int ts_cmp_enable;
Packit 631bab
	unsigned int sbz3;
Packit 631bab
	volatile unsigned int ref_wait_ts;
Packit 631bab
	unsigned int sbz4;
Packit 631bab
	unsigned int current_context;
Packit 631bab
	unsigned int sbz5;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \
Packit 631bab
	((ctxt_id)*sizeof(struct kgsl_devmemstore) + \
Packit 631bab
	 offsetof(struct kgsl_devmemstore, field))
Packit 631bab
Packit 631bab
/* timestamp id*/
Packit 631bab
enum kgsl_timestamp_type {
Packit 631bab
	KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */
Packit 631bab
	KGSL_TIMESTAMP_RETIRED  = 0x00000002, /* end-of-pipeline timestamp*/
Packit 631bab
	KGSL_TIMESTAMP_QUEUED   = 0x00000003,
Packit 631bab
};
Packit 631bab
Packit 631bab
/* property types - used with kgsl_device_getproperty */
Packit 631bab
enum kgsl_property_type {
Packit 631bab
	KGSL_PROP_DEVICE_INFO     = 0x00000001,
Packit 631bab
	KGSL_PROP_DEVICE_SHADOW   = 0x00000002,
Packit 631bab
	KGSL_PROP_DEVICE_POWER    = 0x00000003,
Packit 631bab
	KGSL_PROP_SHMEM           = 0x00000004,
Packit 631bab
	KGSL_PROP_SHMEM_APERTURES = 0x00000005,
Packit 631bab
	KGSL_PROP_MMU_ENABLE 	  = 0x00000006,
Packit 631bab
	KGSL_PROP_INTERRUPT_WAITS = 0x00000007,
Packit 631bab
	KGSL_PROP_VERSION         = 0x00000008,
Packit 631bab
	KGSL_PROP_GPU_RESET_STAT  = 0x00000009,
Packit 631bab
	KGSL_PROP_PWRCTRL         = 0x0000000E,
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_shadowprop {
Packit 631bab
	unsigned int gpuaddr;
Packit 631bab
	unsigned int size;
Packit 631bab
	unsigned int flags; /* contains KGSL_FLAGS_ values */
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_pwrlevel {
Packit 631bab
	unsigned int gpu_freq;
Packit 631bab
	unsigned int bus_freq;
Packit 631bab
	unsigned int io_fraction;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_version {
Packit 631bab
	unsigned int drv_major;
Packit 631bab
	unsigned int drv_minor;
Packit 631bab
	unsigned int dev_major;
Packit 631bab
	unsigned int dev_minor;
Packit 631bab
};
Packit 631bab
Packit 631bab
#ifdef __KERNEL__
Packit 631bab
Packit 631bab
#define KGSL_3D0_REG_MEMORY	"kgsl_3d0_reg_memory"
Packit 631bab
#define KGSL_3D0_IRQ		"kgsl_3d0_irq"
Packit 631bab
#define KGSL_2D0_REG_MEMORY	"kgsl_2d0_reg_memory"
Packit 631bab
#define KGSL_2D0_IRQ		"kgsl_2d0_irq"
Packit 631bab
#define KGSL_2D1_REG_MEMORY	"kgsl_2d1_reg_memory"
Packit 631bab
#define KGSL_2D1_IRQ		"kgsl_2d1_irq"
Packit 631bab
Packit 631bab
enum kgsl_iommu_context_id {
Packit 631bab
	KGSL_IOMMU_CONTEXT_USER = 0,
Packit 631bab
	KGSL_IOMMU_CONTEXT_PRIV = 1,
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_iommu_ctx {
Packit 631bab
	const char *iommu_ctx_name;
Packit 631bab
	enum kgsl_iommu_context_id ctx_id;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_device_iommu_data {
Packit 631bab
	const struct kgsl_iommu_ctx *iommu_ctxs;
Packit 631bab
	int iommu_ctx_count;
Packit 631bab
	unsigned int physstart;
Packit 631bab
	unsigned int physend;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_device_platform_data {
Packit 631bab
	struct kgsl_pwrlevel pwrlevel[KGSL_MAX_PWRLEVELS];
Packit 631bab
	int init_level;
Packit 631bab
	int num_levels;
Packit 631bab
	int (*set_grp_async)(void);
Packit 631bab
	unsigned int idle_timeout;
Packit 631bab
	bool strtstp_sleepwake;
Packit 631bab
	unsigned int nap_allowed;
Packit 631bab
	unsigned int clk_map;
Packit 631bab
	unsigned int idle_needed;
Packit 631bab
	struct msm_bus_scale_pdata *bus_scale_table;
Packit 631bab
	struct kgsl_device_iommu_data *iommu_data;
Packit 631bab
	int iommu_count;
Packit 631bab
	struct msm_dcvs_core_info *core_info;
Packit 631bab
};
Packit 631bab
Packit 631bab
#endif
Packit 631bab
Packit 631bab
/* structure holds list of ibs */
Packit 631bab
struct kgsl_ibdesc {
Packit 631bab
	unsigned int gpuaddr;
Packit 631bab
	void *hostptr;
Packit 631bab
	unsigned int sizedwords;
Packit 631bab
	unsigned int ctrl;
Packit 631bab
};
Packit 631bab
Packit 631bab
/* ioctls */
Packit 631bab
#define KGSL_IOC_TYPE 0x09
Packit 631bab
Packit 631bab
/* get misc info about the GPU
Packit 631bab
   type should be a value from enum kgsl_property_type
Packit 631bab
   value points to a structure that varies based on type
Packit 631bab
   sizebytes is sizeof() that structure
Packit 631bab
   for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo
Packit 631bab
   this structure contaings hardware versioning info.
Packit 631bab
   for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop
Packit 631bab
   this is used to find mmap() offset and sizes for mapping
Packit 631bab
   struct kgsl_memstore into userspace.
Packit 631bab
*/
Packit 631bab
struct kgsl_device_getproperty {
Packit 631bab
	unsigned int type;
Packit 631bab
	void  *value;
Packit 631bab
	unsigned int sizebytes;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_DEVICE_GETPROPERTY \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty)
Packit 631bab
Packit 631bab
/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012
Packit 631bab
 */
Packit 631bab
Packit 631bab
/* block until the GPU has executed past a given timestamp
Packit 631bab
 * timeout is in milliseconds.
Packit 631bab
 */
Packit 631bab
struct kgsl_device_waittimestamp {
Packit 631bab
	unsigned int timestamp;
Packit 631bab
	unsigned int timeout;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp)
Packit 631bab
Packit 631bab
struct kgsl_device_waittimestamp_ctxtid {
Packit 631bab
	unsigned int context_id;
Packit 631bab
	unsigned int timestamp;
Packit 631bab
	unsigned int timeout;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid)
Packit 631bab
Packit 631bab
/* issue indirect commands to the GPU.
Packit 631bab
 * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE
Packit 631bab
 * ibaddr and sizedwords must specify a subset of a buffer created
Packit 631bab
 * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM
Packit 631bab
 * flags may be a mask of KGSL_CONTEXT_ values
Packit 631bab
 * timestamp is a returned counter value which can be passed to
Packit 631bab
 * other ioctls to determine when the commands have been executed by
Packit 631bab
 * the GPU.
Packit 631bab
 */
Packit 631bab
struct kgsl_ringbuffer_issueibcmds {
Packit 631bab
	unsigned int drawctxt_id;
Packit 631bab
	unsigned int ibdesc_addr;
Packit 631bab
	unsigned int numibs;
Packit 631bab
	unsigned int timestamp; /*output param */
Packit 631bab
	unsigned int flags;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds)
Packit 631bab
Packit 631bab
/* read the most recently executed timestamp value
Packit 631bab
 * type should be a value from enum kgsl_timestamp_type
Packit 631bab
 */
Packit 631bab
struct kgsl_cmdstream_readtimestamp {
Packit 631bab
	unsigned int type;
Packit 631bab
	unsigned int timestamp; /*output param */
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \
Packit 631bab
	_IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp)
Packit 631bab
Packit 631bab
/* free memory when the GPU reaches a given timestamp.
Packit 631bab
 * gpuaddr specify a memory region created by a
Packit 631bab
 * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call
Packit 631bab
 * type should be a value from enum kgsl_timestamp_type
Packit 631bab
 */
Packit 631bab
struct kgsl_cmdstream_freememontimestamp {
Packit 631bab
	unsigned int gpuaddr;
Packit 631bab
	unsigned int type;
Packit 631bab
	unsigned int timestamp;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
Packit 631bab
Packit 631bab
/* Previous versions of this header had incorrectly defined
Packit 631bab
   IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead
Packit 631bab
   of a write only ioctl.  To ensure binary compatibility, the following
Packit 631bab
   #define will be used to intercept the incorrect ioctl
Packit 631bab
*/
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \
Packit 631bab
	_IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp)
Packit 631bab
Packit 631bab
/* create a draw context, which is used to preserve GPU state.
Packit 631bab
 * The flags field may contain a mask KGSL_CONTEXT_*  values
Packit 631bab
 */
Packit 631bab
struct kgsl_drawctxt_create {
Packit 631bab
	unsigned int flags;
Packit 631bab
	unsigned int drawctxt_id; /*output param */
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_DRAWCTXT_CREATE \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create)
Packit 631bab
Packit 631bab
/* destroy a draw context */
Packit 631bab
struct kgsl_drawctxt_destroy {
Packit 631bab
	unsigned int drawctxt_id;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_DRAWCTXT_DESTROY \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy)
Packit 631bab
Packit 631bab
/* add a block of pmem, fb, ashmem or user allocated address
Packit 631bab
 * into the GPU address space */
Packit 631bab
struct kgsl_map_user_mem {
Packit 631bab
	int fd;
Packit 631bab
	unsigned int gpuaddr;   /*output param */
Packit 631bab
	unsigned int len;
Packit 631bab
	unsigned int offset;
Packit 631bab
	unsigned int hostptr;   /*input param */
Packit 631bab
	enum kgsl_user_mem_type memtype;
Packit 631bab
	unsigned int reserved;	/* May be required to add
Packit 631bab
				params for another mem type */
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_MAP_USER_MEM \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem)
Packit 631bab
Packit 631bab
struct kgsl_cmdstream_readtimestamp_ctxtid {
Packit 631bab
	unsigned int context_id;
Packit 631bab
	unsigned int type;
Packit 631bab
	unsigned int timestamp; /*output param */
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid)
Packit 631bab
Packit 631bab
struct kgsl_cmdstream_freememontimestamp_ctxtid {
Packit 631bab
	unsigned int context_id;
Packit 631bab
	unsigned int gpuaddr;
Packit 631bab
	unsigned int type;
Packit 631bab
	unsigned int timestamp;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x17, \
Packit 631bab
	struct kgsl_cmdstream_freememontimestamp_ctxtid)
Packit 631bab
Packit 631bab
/* add a block of pmem or fb into the GPU address space */
Packit 631bab
struct kgsl_sharedmem_from_pmem {
Packit 631bab
	int pmem_fd;
Packit 631bab
	unsigned int gpuaddr;	/*output param */
Packit 631bab
	unsigned int len;
Packit 631bab
	unsigned int offset;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem)
Packit 631bab
Packit 631bab
/* remove memory from the GPU's address space */
Packit 631bab
struct kgsl_sharedmem_free {
Packit 631bab
	unsigned int gpuaddr;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_SHAREDMEM_FREE \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free)
Packit 631bab
Packit 631bab
struct kgsl_cff_user_event {
Packit 631bab
	unsigned char cff_opcode;
Packit 631bab
	unsigned int op1;
Packit 631bab
	unsigned int op2;
Packit 631bab
	unsigned int op3;
Packit 631bab
	unsigned int op4;
Packit 631bab
	unsigned int op5;
Packit 631bab
	unsigned int __pad[2];
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CFF_USER_EVENT \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event)
Packit 631bab
Packit 631bab
struct kgsl_gmem_desc {
Packit 631bab
	unsigned int x;
Packit 631bab
	unsigned int y;
Packit 631bab
	unsigned int width;
Packit 631bab
	unsigned int height;
Packit 631bab
	unsigned int pitch;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_buffer_desc {
Packit 631bab
	void 			*hostptr;
Packit 631bab
	unsigned int	gpuaddr;
Packit 631bab
	int				size;
Packit 631bab
	unsigned int	format;
Packit 631bab
	unsigned int  	pitch;
Packit 631bab
	unsigned int  	enabled;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct kgsl_bind_gmem_shadow {
Packit 631bab
	unsigned int drawctxt_id;
Packit 631bab
	struct kgsl_gmem_desc gmem_desc;
Packit 631bab
	unsigned int shadow_x;
Packit 631bab
	unsigned int shadow_y;
Packit 631bab
	struct kgsl_buffer_desc shadow_buffer;
Packit 631bab
	unsigned int buffer_id;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \
Packit 631bab
    _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow)
Packit 631bab
Packit 631bab
/* add a block of memory into the GPU address space */
Packit 631bab
struct kgsl_sharedmem_from_vmalloc {
Packit 631bab
	unsigned int gpuaddr;	/*output param */
Packit 631bab
	unsigned int hostptr;
Packit 631bab
	unsigned int flags;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc)
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free)
Packit 631bab
Packit 631bab
struct kgsl_drawctxt_set_bin_base_offset {
Packit 631bab
	unsigned int drawctxt_id;
Packit 631bab
	unsigned int offset;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset)
Packit 631bab
Packit 631bab
enum kgsl_cmdwindow_type {
Packit 631bab
	KGSL_CMDWINDOW_MIN     = 0x00000000,
Packit 631bab
	KGSL_CMDWINDOW_2D      = 0x00000000,
Packit 631bab
	KGSL_CMDWINDOW_3D      = 0x00000001, /* legacy */
Packit 631bab
	KGSL_CMDWINDOW_MMU     = 0x00000002,
Packit 631bab
	KGSL_CMDWINDOW_ARBITER = 0x000000FF,
Packit 631bab
	KGSL_CMDWINDOW_MAX     = 0x000000FF,
Packit 631bab
};
Packit 631bab
Packit 631bab
/* write to the command window */
Packit 631bab
struct kgsl_cmdwindow_write {
Packit 631bab
	enum kgsl_cmdwindow_type target;
Packit 631bab
	unsigned int addr;
Packit 631bab
	unsigned int data;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CMDWINDOW_WRITE \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write)
Packit 631bab
Packit 631bab
struct kgsl_gpumem_alloc {
Packit 631bab
	unsigned long gpuaddr;
Packit 631bab
	size_t size;
Packit 631bab
	unsigned int flags;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_GPUMEM_ALLOC \
Packit 631bab
	_IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc)
Packit 631bab
Packit 631bab
struct kgsl_cff_syncmem {
Packit 631bab
	unsigned int gpuaddr;
Packit 631bab
	unsigned int len;
Packit 631bab
	unsigned int __pad[2]; /* For future binary compatibility */
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_CFF_SYNCMEM \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem)
Packit 631bab
Packit 631bab
/*
Packit 631bab
 * A timestamp event allows the user space to register an action following an
Packit 631bab
 * expired timestamp.
Packit 631bab
 */
Packit 631bab
Packit 631bab
struct kgsl_timestamp_event {
Packit 631bab
	int type;                /* Type of event (see list below) */
Packit 631bab
	unsigned int timestamp;  /* Timestamp to trigger event on */
Packit 631bab
	unsigned int context_id; /* Context for the timestamp */
Packit 631bab
	void *priv;              /* Pointer to the event specific blob */
Packit 631bab
	size_t len;              /* Size of the event specific blob */
Packit 631bab
};
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_TIMESTAMP_EVENT \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event)
Packit 631bab
Packit 631bab
/* A genlock timestamp event releases an existing lock on timestamp expire */
Packit 631bab
Packit 631bab
#define KGSL_TIMESTAMP_EVENT_GENLOCK 1
Packit 631bab
Packit 631bab
struct kgsl_timestamp_event_genlock {
Packit 631bab
	int handle; /* Handle of the genlock lock to release */
Packit 631bab
};
Packit 631bab
Packit 631bab
/*
Packit 631bab
 * Set a property within the kernel.  Uses the same structure as
Packit 631bab
 * IOCTL_KGSL_GETPROPERTY
Packit 631bab
 */
Packit 631bab
Packit 631bab
#define IOCTL_KGSL_SETPROPERTY \
Packit 631bab
	_IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty)
Packit 631bab
Packit 631bab
#ifdef __KERNEL__
Packit 631bab
#ifdef CONFIG_MSM_KGSL_DRM
Packit 631bab
int kgsl_gem_obj_addr(int drm_fd, int handle, unsigned long *start,
Packit 631bab
			unsigned long *len);
Packit 631bab
#else
Packit 631bab
#define kgsl_gem_obj_addr(...) 0
Packit 631bab
#endif
Packit 631bab
#endif
Packit 631bab
#endif /* _MSM_KGSL_H */