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