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