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