1d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#ifndef _UAPI_MSM_KGSL_H 2d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#define _UAPI_MSM_KGSL_H 35d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 45d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#include <linux/types.h> 55d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#include <linux/ioctl.h> 65d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 75d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 85d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * The KGSL version has proven not to be very useful in userspace if features 95d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * are cherry picked into other trees out of order so it is frozen as of 3.14. 105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * It is left here for backwards compatabilty and as a reminder that 115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * software releases are never linear. Also, I like pie. 125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_VERSION_MAJOR 3 155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_VERSION_MINOR 14 165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * We have traditionally mixed context and issueibcmds / command batch flags 195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * together into a big flag stew. This worked fine until we started adding a 205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * lot more command batch flags and we started running out of bits. Turns out 215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * we have a bit of room in the context type / priority mask that we could use 225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * for command batches, but that means we need to split out the flags into two 235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * coherent sets. 245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * If any future definitions are for both context and cmdbatch add both defines 265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * and link the cmdbatch to the context define as we do below. Otherwise feel 275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * free to add exclusive bits to either set. 285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* --- context flags --- */ 315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_SAVE_GMEM 0x00000001 325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002 335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004 355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_CTX_SWITCH 0x00000008 365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PREAMBLE 0x00000010 375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TRASH_STATE 0x00000020 385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040 395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080 405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_END_OF_FRAME 0x00000100 425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200 435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_SYNC 0x00000400 455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PWR_CONSTRAINT 0x00000800 465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PRIORITY_MASK 0x0000F000 485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PRIORITY_SHIFT 12 495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PRIORITY_UNDEF 0 505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_IFH_NOP 0x00010000 525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_SECURE 0x00020000 535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PREEMPT_STYLE_MASK 0x0E000000 555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PREEMPT_STYLE_SHIFT 25 565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PREEMPT_STYLE_DEFAULT 0x0 575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PREEMPT_STYLE_RINGBUFFER 0x1 585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_PREEMPT_STYLE_FINEGRAIN 0x2 595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_MASK 0x01F00000 615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_SHIFT 20 625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_ANY 0 635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_GL 1 645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_CL 2 655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_C2D 3 665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_RS 4 675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_TYPE_UNKNOWN 0x1E 685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONTEXT_INVALID 0xffffffff 705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * --- command batch flags --- 735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * The bits that are linked to a KGSL_CONTEXT equivalent are either legacy 745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * definitions or bits that are valid for both contexts and cmdbatches. To be 755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * safe the other 8 bits that are still available in the context field should be 765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * omitted here in case we need to share - the other bits are available for 775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * cmdbatch only flags as needed 785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_MEMLIST 0x00000001 805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_MARKER 0x00000002 815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_SUBMIT_IB_LIST KGSL_CONTEXT_SUBMIT_IB_LIST /* 0x004 */ 825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_CTX_SWITCH KGSL_CONTEXT_CTX_SWITCH /* 0x008 */ 835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_PROFILING 0x00000010 84d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#define KGSL_CMDBATCH_PROFILING_KTIME 0x00000020 855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_END_OF_FRAME KGSL_CONTEXT_END_OF_FRAME /* 0x100 */ 865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_SYNC KGSL_CONTEXT_SYNC /* 0x400 */ 875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDBATCH_PWR_CONSTRAINT KGSL_CONTEXT_PWR_CONSTRAINT /* 0x800 */ 885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Reserve bits [16:19] and bits [28:31] for possible bits shared between 915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * contexts and command batches. Update this comment as new flags are added. 925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * gpu_command_object flags - these flags communicate the type of command or 965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * memory object being submitted for a GPU command 975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Flags for GPU command objects */ 1005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDLIST_IB 0x00000001U 1015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDLIST_CTXTSWITCH_PREAMBLE 0x00000002U 1025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMDLIST_IB_PREAMBLE 0x00000004U 1035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Flags for GPU command memory objects */ 1055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_OBJLIST_MEMOBJ 0x00000008U 1065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_OBJLIST_PROFILE 0x00000010U 1075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Flags for GPU command sync points */ 1095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0 1105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1 1115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* --- Memory allocation flags --- */ 1135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* General allocation hints */ 1155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_SECURE 0x00000008ULL 1165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000U 1175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_GPUWRITEONLY 0x02000000U 1185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_FORCE_32BIT 0x100000000ULL 1195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Memory caching hints */ 1215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CACHEMODE_MASK 0x0C000000U 1225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CACHEMODE_SHIFT 26 1235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CACHEMODE_WRITECOMBINE 0 1255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CACHEMODE_UNCACHED 1 1265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CACHEMODE_WRITETHROUGH 2 1275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CACHEMODE_WRITEBACK 3 1285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000ULL 1305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Memory types for which allocations are made */ 1325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_MASK 0x0000FF00 1335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_SHIFT 8 1345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_OBJECTANY 0 1365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_FRAMEBUFFER 1 1375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_RENDERBUFFER 2 1385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_ARRAYBUFFER 3 1395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4 1405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5 1415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_TEXTURE 6 1425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_SURFACE 7 1435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_EGL_SURFACE 8 1445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_GL 9 1455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_CL 10 1465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_CL_BUFFER_MAP 11 1475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12 1485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_CL_IMAGE_MAP 13 1495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14 1505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_CL_KERNEL_STACK 15 1515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_COMMAND 16 1525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_2D 17 1535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_EGL_IMAGE 18 1545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_EGL_SHADOW 19 1555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_MULTISAMPLE 20 1565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMTYPE_KERNEL 255 1575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 1595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Alignment hint, passed as the power of 2 exponent. 1605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * i.e 4k (2^12) would be 12, 64k (2^16)would be 16. 1615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 1625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMALIGN_MASK 0x00FF0000 1635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMALIGN_SHIFT 16 1645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum kgsl_user_mem_type { 1665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_USER_MEM_TYPE_PMEM = 0x00000000, 1675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001, 1685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_USER_MEM_TYPE_ADDR = 0x00000002, 1695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_USER_MEM_TYPE_ION = 0x00000003, 1705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin /* 1715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * ION type is retained for backwards compatibilty but Ion buffers are 1725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * dma-bufs so try to use that naming if we can 1735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 1745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_USER_MEM_TYPE_DMABUF = 0x00000003, 1755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_USER_MEM_TYPE_MAX = 0x00000007, 1765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 1775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_MASK 0x000000e0 1785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_SHIFT 5 1795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 1815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Unfortunately, enum kgsl_user_mem_type starts at 0 which does not 1825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * leave a good value for allocated memory. In the flags we use 1835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 0 to indicate allocated memory and thus need to add 1 to the enum 1845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * values. 1855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 1865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_USERMEM_FLAG(x) (((x) + 1) << KGSL_MEMFLAGS_USERMEM_SHIFT) 1875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_NOT_USERMEM 0 1895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_PMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_PMEM) 1905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_ASHMEM \ 1915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ASHMEM) 1925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_ADDR KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ADDR) 1935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMFLAGS_USERMEM_ION KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ION) 1945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* --- generic KGSL flag values --- */ 1965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_NORMALMODE 0x00000000 1985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_SAFEMODE 0x00000001 1995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_INITIALIZED0 0x00000002 2005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_INITIALIZED 0x00000004 2015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_STARTED 0x00000008 2025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_ACTIVE 0x00000010 2035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_RESERVED0 0x00000020 2045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_RESERVED1 0x00000040 2055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_RESERVED2 0x00000080 2065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_SOFT_RESET 0x00000100 2075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200 2085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Server Side Sync Timeout in milliseconds */ 2105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000 2115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 2135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Reset status values for context 2145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 2155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum kgsl_ctx_reset_stat { 2165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CTX_STAT_NO_ERROR = 0x00000000, 2175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001, 2185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002, 2195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003 2205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 2215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONVERT_TO_MBPS(val) \ 2235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin (val*1000*1000U) 2245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* device id */ 2265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum kgsl_deviceid { 2275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_DEVICE_3D0 = 0x00000000, 2285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_DEVICE_MAX 2295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 2305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_devinfo { 2325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int device_id; 2345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin /* chip revision id 2355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * coreid:8 majorrev:8 minorrev:8 patch:8 2365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 2375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int chip_id; 2385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int mmu_enabled; 2395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gmem_gpubaseaddr; 2405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin /* 2415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This field contains the adreno revision 2425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * number 200, 205, 220, etc... 2435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 2445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int gpu_id; 2455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t gmem_sizebytes; 2465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 2475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 2495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_devmemstore - this structure defines the region of memory 250d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin * that can be mmap()ed from this driver. The timestamp fields are volatile 2515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * because they are written by the GPU 2525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @soptimestamp: Start of pipeline timestamp written by GPU before the 2535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * commands in concern are processed 2545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @sbz: Unused, kept for 8 byte alignment 2555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @eoptimestamp: End of pipeline timestamp written by GPU after the 2565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * commands in concern are processed 2575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @sbz2: Unused, kept for 8 byte alignment 2585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @preempted: Indicates if the context was preempted 2595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @sbz3: Unused, kept for 8 byte alignment 2605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @ref_wait_ts: Timestamp on which to generate interrupt, unused now. 2615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @sbz4: Unused, kept for 8 byte alignment 2625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @current_context: The current context the GPU is working on 2635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @sbz5: Unused, kept for 8 byte alignment 2645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 2655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_devmemstore { 266d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin volatile unsigned int soptimestamp; 2675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int sbz; 268d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin volatile unsigned int eoptimestamp; 2695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int sbz2; 270d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin volatile unsigned int preempted; 2715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int sbz3; 272d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin volatile unsigned int ref_wait_ts; 2735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int sbz4; 2745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int current_context; 2755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int sbz5; 2765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 2775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \ 2795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin ((ctxt_id)*sizeof(struct kgsl_devmemstore) + \ 2805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin offsetof(struct kgsl_devmemstore, field)) 2815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* timestamp id*/ 2835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum kgsl_timestamp_type { 2845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */ 2855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_TIMESTAMP_RETIRED = 0x00000002, /* end-of-pipeline timestamp*/ 2865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_TIMESTAMP_QUEUED = 0x00000003, 2875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 2885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 2895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* property types - used with kgsl_device_getproperty */ 2905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_DEVICE_INFO 0x1 2915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_DEVICE_SHADOW 0x2 2925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_DEVICE_POWER 0x3 2935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_SHMEM 0x4 2945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_SHMEM_APERTURES 0x5 2955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_MMU_ENABLE 0x6 2965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_INTERRUPT_WAITS 0x7 2975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_VERSION 0x8 2985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_GPU_RESET_STAT 0x9 2995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_PWRCTRL 0xE 3005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_PWR_CONSTRAINT 0x12 3015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_UCHE_GMEM_VADDR 0x13 3025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_SP_GENERIC_MEM 0x14 3035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_UCODE_VERSION 0x15 3045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PROP_GPMU_VERSION 0x16 305d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#define KGSL_PROP_HIGHEST_BANK_BIT 0x17 3065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_shadowprop { 3085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 3095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t size; 3105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; /* contains KGSL_FLAGS_ values */ 3115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 3125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_version { 3145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int drv_major; 3155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int drv_minor; 3165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int dev_major; 3175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int dev_minor; 3185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 3195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_sp_generic_mem { 3215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t local; 3225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t pvt; 3235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 3245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_ucode_version { 3265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int pfp; 3275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int pm4; 3285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 3295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpmu_version { 3315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int major; 3325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int minor; 3335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int features; 3345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 3355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Performance counter groups */ 3375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_CP 0x0 3395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_RBBM 0x1 3405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_PC 0x2 3415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VFD 0x3 3425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4 3435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VPC 0x5 3445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TSE 0x6 3455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_RAS 0x7 3465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_UCHE 0x8 3475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TP 0x9 3485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_SP 0xA 3495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_RB 0xB 3505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_PWR 0xC 3515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VBIF 0xD 3525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE 3535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_MH 0xF 3545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_PA_SU 0x10 3555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_SQ 0x11 3565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_SX 0x12 3575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TCF 0x13 3585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TCM 0x14 3595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TCR 0x15 3605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_L2 0x16 3615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_VSC 0x17 3625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_CCU 0x18 3635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_LRZ 0x19 3645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_CMP 0x1A 3655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_ALWAYSON 0x1B 3665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_SP_PWR 0x1C 3675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_TP_PWR 0x1D 3685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_RB_PWR 0x1E 3695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_CCU_PWR 0x1F 3705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_UCHE_PWR 0x20 3715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_CP_PWR 0x21 3725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_GPMU_PWR 0x22 3735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_ALWAYSON_PWR 0x23 3745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_GROUP_MAX 0x24 3755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF 3775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE 3785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* structure holds list of ibs */ 3805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_ibdesc { 3815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 3825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long __pad; 3835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t sizedwords; 3845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int ctrl; 3855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 3865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 3875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 3885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_cmdbatch_profiling_buffer 389d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin * @wall_clock_s: Ringbuffer submission time (seconds). 390d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin * If KGSL_CMDBATCH_PROFILING_KTIME is set, time is provided 391d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin * in kernel clocks, otherwise wall clock time is used. 392d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin * @wall_clock_ns: Ringbuffer submission time (nanoseconds). 393d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin * If KGSL_CMDBATCH_PROFILING_KTIME is set time is provided 394d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin * in kernel clocks, otherwise wall clock time is used. 3955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpu_ticks_queued: GPU ticks at ringbuffer submission 3965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpu_ticks_submitted: GPU ticks when starting cmdbatch execution 3975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpu_ticks_retired: GPU ticks when finishing cmdbatch execution 3985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 3995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This structure defines the profiling buffer used to measure cmdbatch 4005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * execution time 4015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 4025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmdbatch_profiling_buffer { 4035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t wall_clock_s; 4045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t wall_clock_ns; 4055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t gpu_ticks_queued; 4065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t gpu_ticks_submitted; 4075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t gpu_ticks_retired; 4085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 4095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* ioctls */ 4115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_IOC_TYPE 0x09 4125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* get misc info about the GPU 4145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin type should be a value from enum kgsl_property_type 4155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin value points to a structure that varies based on type 4165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin sizebytes is sizeof() that structure 4175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo 4185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin this structure contaings hardware versioning info. 4195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop 4205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin this is used to find mmap() offset and sizes for mapping 4215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin struct kgsl_memstore into userspace. 4225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin*/ 4235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_device_getproperty { 4245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 425d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin void __user *value; 4265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t sizebytes; 4275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 4285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_DEVICE_GETPROPERTY \ 4305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty) 4315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012 4335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 4345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* block until the GPU has executed past a given timestamp 4365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * timeout is in milliseconds. 4375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 4385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_device_waittimestamp { 4395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 4405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timeout; 4415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 4425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \ 4445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp) 4455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_device_waittimestamp_ctxtid { 4475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 4485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 4495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timeout; 4505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 4515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \ 4535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid) 4545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* DEPRECATED: issue indirect commands to the GPU. 4565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE 4575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * ibaddr and sizedwords must specify a subset of a buffer created 4585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM 4595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * flags may be a mask of KGSL_CONTEXT_ values 4605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * timestamp is a returned counter value which can be passed to 4615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * other ioctls to determine when the commands have been executed by 4625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * the GPU. 4635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 4645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This fucntion is deprecated - consider using IOCTL_KGSL_SUBMIT_COMMANDS 4655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * instead 4665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 4675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_ringbuffer_issueibcmds { 4685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int drawctxt_id; 4695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long ibdesc_addr; 4705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int numibs; 4715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; /*output param */ 4725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 4735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 4745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \ 4765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds) 4775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* read the most recently executed timestamp value 4795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * type should be a value from enum kgsl_timestamp_type 4805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 4815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmdstream_readtimestamp { 4825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 4835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; /*output param */ 4845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 4855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \ 4875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 4885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \ 4905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 4915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 4925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* free memory when the GPU reaches a given timestamp. 4935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * gpuaddr specify a memory region created by a 4945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call 4955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * type should be a value from enum kgsl_timestamp_type 4965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 4975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmdstream_freememontimestamp { 4985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 4995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 5005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 5015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \ 5045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 5055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Previous versions of this header had incorrectly defined 5075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead 5085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin of a write only ioctl. To ensure binary compatability, the following 5095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin #define will be used to intercept the incorrect ioctl 5105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin*/ 5115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \ 5135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 5145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* create a draw context, which is used to preserve GPU state. 5165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * The flags field may contain a mask KGSL_CONTEXT_* values 5175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 5185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_drawctxt_create { 5195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 5205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int drawctxt_id; /*output param */ 5215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_CREATE \ 5245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create) 5255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* destroy a draw context */ 5275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_drawctxt_destroy { 5285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int drawctxt_id; 5295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_DESTROY \ 5325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy) 5335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* add a block of pmem, fb, ashmem or user allocated address 5355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * into the GPU address space */ 5365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_map_user_mem { 5375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int fd; 5385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; /*output param */ 5395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t len; 5405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t offset; 5415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long hostptr; /*input param */ 5425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin enum kgsl_user_mem_type memtype; 5435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 5445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_MAP_USER_MEM \ 5475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem) 5485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmdstream_readtimestamp_ctxtid { 5505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 5515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 5525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; /*output param */ 5535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \ 5565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid) 5575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmdstream_freememontimestamp_ctxtid { 5595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 5605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 5615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 5625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 5635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \ 5665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x17, \ 5675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin struct kgsl_cmdstream_freememontimestamp_ctxtid) 5685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* add a block of pmem or fb into the GPU address space */ 5705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_sharedmem_from_pmem { 5715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int pmem_fd; 5725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; /*output param */ 5735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int len; 5745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int offset; 5755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \ 5785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem) 5795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* remove memory from the GPU's address space */ 5815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_sharedmem_free { 5825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 5835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FREE \ 5865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free) 5875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cff_user_event { 5895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned char cff_opcode; 5905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op1; 5915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op2; 5925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op3; 5935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op4; 5945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op5; 5955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[2]; 5965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 5975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 5985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CFF_USER_EVENT \ 5995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event) 6005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gmem_desc { 6025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int x; 6035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int y; 6045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int width; 6055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int height; 6065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int pitch; 6075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_buffer_desc { 6105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin void *hostptr; 6115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 6125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int size; 6135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int format; 6145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int pitch; 6155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int enabled; 6165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_bind_gmem_shadow { 6195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int drawctxt_id; 6205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin struct kgsl_gmem_desc gmem_desc; 6215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int shadow_x; 6225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int shadow_y; 6235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin struct kgsl_buffer_desc shadow_buffer; 6245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int buffer_id; 6255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \ 6285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow) 6295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* add a block of memory into the GPU address space */ 6315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 6335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012 6345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * use IOCTL_KGSL_GPUMEM_ALLOC instead 6355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 6365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_sharedmem_from_vmalloc { 6385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; /*output param */ 6395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int hostptr; 6405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 6415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \ 6445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc) 6455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 6475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This is being deprecated in favor of IOCTL_KGSL_GPUMEM_CACHE_SYNC which 6485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * supports both directions (flush and invalidate). This code will still 6495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * work, but by definition it will do a flush of the cache which might not be 6505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * what you want to have happen on a buffer following a GPU operation. It is 6515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * safer to go with IOCTL_KGSL_GPUMEM_CACHE_SYNC 6525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 6535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \ 6555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free) 6565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_drawctxt_set_bin_base_offset { 6585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int drawctxt_id; 6595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int offset; 6605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \ 6635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset) 6645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum kgsl_cmdwindow_type { 6665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CMDWINDOW_MIN = 0x00000000, 6675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CMDWINDOW_2D = 0x00000000, 6685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CMDWINDOW_3D = 0x00000001, /* legacy */ 6695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CMDWINDOW_MMU = 0x00000002, 6705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CMDWINDOW_ARBITER = 0x000000FF, 6715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin KGSL_CMDWINDOW_MAX = 0x000000FF, 6725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* write to the command window */ 6755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmdwindow_write { 6765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin enum kgsl_cmdwindow_type target; 6775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int addr; 6785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int data; 6795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CMDWINDOW_WRITE \ 6825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write) 6835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpumem_alloc { 6855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; /* output param */ 6865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t size; 6875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 6885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUMEM_ALLOC \ 6915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc) 6925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cff_syncmem { 6945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 6955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t len; 6965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 6975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 6985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 6995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CFF_SYNCMEM \ 7005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem) 7015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 7035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * A timestamp event allows the user space to register an action following an 7045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to 7055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * _IOWR to support fences which need to return a fd for the priv parameter. 7065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 7075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_timestamp_event { 7095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int type; /* Type of event (see list below) */ 7105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; /* Timestamp to trigger event on */ 7115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; /* Context for the timestamp */ 712d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin void __user *priv; /* Pointer to the event specific blob */ 7135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t len; /* Size of the event specific blob */ 7145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 7155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \ 7175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event) 7185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* A genlock timestamp event releases an existing lock on timestamp expire */ 7205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_TIMESTAMP_EVENT_GENLOCK 1 7225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_timestamp_event_genlock { 7245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int handle; /* Handle of the genlock lock to release */ 7255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 7265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* A fence timestamp event releases an existing lock on timestamp expire */ 7285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_TIMESTAMP_EVENT_FENCE 2 7305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_timestamp_event_fence { 7325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int fence_fd; /* Fence to signal */ 7335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 7345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 7365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Set a property within the kernel. Uses the same structure as 7375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_GETPROPERTY 7385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 7395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SETPROPERTY \ 7415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty) 7425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_TIMESTAMP_EVENT \ 7445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event) 7455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 7475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpumem_alloc_id - argument to IOCTL_KGSL_GPUMEM_ALLOC_ID 7485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: returned id value for this allocation. 7495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: mask of KGSL_MEM* values requested and actual flags on return. 7505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: requested size of the allocation and actual size on return. 7515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @mmapsize: returned size to pass to mmap() which may be larger than 'size' 7525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpuaddr: returned GPU address for the allocation 7535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 7545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Allocate memory for access by the GPU. The flags and size fields are echoed 7555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * back by the kernel, so that the caller can know if the request was 7565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * adjusted. 7575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 7585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Supported flags: 7595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * KGSL_MEMFLAGS_GPUREADONLY: the GPU will be unable to write to the buffer 7605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * KGSL_MEMTYPE*: usage hint for debugging aid 7615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * KGSL_MEMALIGN*: alignment hint, may be ignored or adjusted by the kernel. 7625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * KGSL_MEMFLAGS_USE_CPU_MAP: If set on call and return, the returned GPU 7635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * address will be 0. Calling mmap() will set the GPU address. 7645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 7655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpumem_alloc_id { 7665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 7675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 7685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t size; 7695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t mmapsize; 7705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 7715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use*/ 7725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long __pad[2]; 7735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 7745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUMEM_ALLOC_ID \ 7765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id) 7775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 7795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpumem_free_id - argument to IOCTL_KGSL_GPUMEM_FREE_ID 7805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: GPU allocation id to free 7815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 7825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Free an allocation by id, in case a GPU address has not been assigned or 7835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * is unknown. Freeing an allocation by id with this ioctl or by GPU address 7845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * with IOCTL_KGSL_SHAREDMEM_FREE are equivalent. 7855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 7865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpumem_free_id { 7875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 7885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use*/ 7895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad; 7905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 7915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUMEM_FREE_ID \ 7935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id) 7945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 7955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 7965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpumem_get_info - argument to IOCTL_KGSL_GPUMEM_GET_INFO 7975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpuaddr: GPU address to query. Also set on return. 7985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: GPU allocation id to query. Also set on return. 7995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: returned mask of KGSL_MEM* values. 8005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: returned size of the allocation. 8015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @mmapsize: returned size to pass mmap(), which may be larger than 'size' 8025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @useraddr: returned address of the userspace mapping for this buffer 8035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This ioctl allows querying of all user visible attributes of an existing 8055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * allocation, by either the GPU address or the id returned by a previous 8065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * call to IOCTL_KGSL_GPUMEM_ALLOC_ID. Legacy allocation ioctls may not 8075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * return all attributes so this ioctl can be used to look them up if needed. 8085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 8105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpumem_get_info { 8115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 8125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 8135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 8145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t size; 8155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t mmapsize; 8165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long useraddr; 8175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use*/ 8185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long __pad[4]; 8195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 8205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUMEM_GET_INFO\ 8225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info) 8235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 8255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpumem_sync_cache - argument to IOCTL_KGSL_GPUMEM_SYNC_CACHE 8265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpuaddr: GPU address of the buffer to sync. 8275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: id of the buffer to sync. Either gpuaddr or id is sufficient. 8285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @op: a mask of KGSL_GPUMEM_CACHE_* values 8295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @offset: offset into the buffer 8305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @length: number of bytes starting from offset to perform 8315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * the cache operation on 8325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Sync the L2 cache for memory headed to and from the GPU - this replaces 8345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * KGSL_SHAREDMEM_FLUSH_CACHE since it can handle cache management for both 8355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * directions 8365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 8385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpumem_sync_cache { 8395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long gpuaddr; 8405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 8415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op; 8425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t offset; 8435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t length; 8445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 8455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUMEM_CACHE_CLEAN (1 << 0) 8475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN 8485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUMEM_CACHE_INV (1 << 1) 8505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV 8515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUMEM_CACHE_FLUSH \ 8535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin (KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV) 8545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Flag to ensure backwards compatibility of kgsl_gpumem_sync_cache struct */ 8565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUMEM_CACHE_RANGE (1 << 31U) 8575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUMEM_SYNC_CACHE \ 8595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache) 8605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 8625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_perfcounter_get - argument to IOCTL_KGSL_PERFCOUNTER_GET 8635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @groupid: Performance counter group ID 8645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @countable: Countable to select within the group 8655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @offset: Return offset of the reserved LO counter 8665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @offset_hi: Return offset of the reserved HI counter 8675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Get an available performance counter from a specified groupid. The offset 8695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * of the performance counter will be returned after successfully assigning 8705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * the countable to the counter for the specified group. An error will be 8715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * returned and an offset of 0 if the groupid is invalid or there are no 8725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * more counters left. After successfully getting a perfcounter, the user 8735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * must call kgsl_perfcounter_put(groupid, contable) when finished with 8745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * the perfcounter to clear up perfcounter resources. 8755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 8775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_perfcounter_get { 8785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int groupid; 8795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int countable; 8805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int offset; 8815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int offset_hi; 8825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 8835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad; /* For future binary compatibility */ 8845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 8855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_GET \ 8875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get) 8885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 8895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 8905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_perfcounter_put - argument to IOCTL_KGSL_PERFCOUNTER_PUT 8915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @groupid: Performance counter group ID 8925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @countable: Countable to release within the group 8935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Put an allocated performance counter to allow others to have access to the 8955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * resource that was previously taken. This is only to be called after 8965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * successfully getting a performance counter from kgsl_perfcounter_get(). 8975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 8985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 8995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_perfcounter_put { 9005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int groupid; 9015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int countable; 9025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 9035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 9045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 9055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_PUT \ 9075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put) 9085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 9105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 9115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @groupid: Performance counter group ID 9125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @countable: Return active countables array 9135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: Size of active countables array 9145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @max_counters: Return total number counters for the group ID 9155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 9165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Query the available performance counters given a groupid. The array 9175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * *countables is used to return the current active countables in counters. 9185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * The size of the array is passed in so the kernel will only write at most 9195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * size or counter->size for the group id. The total number of available 9205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * counters for the group ID is returned in max_counters. 9215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * If the array or size passed in are invalid, then only the maximum number 9225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * of counters will be returned, no data will be written to *countables. 9235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * If the groupid is invalid an error code will be returned. 9245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 9255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 9265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_perfcounter_query { 9275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int groupid; 9285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin /* Array to return the current countable for up to size counters */ 929d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin unsigned int __user *countables; 9305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int count; 9315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int max_counters; 9325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 9335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 9345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 9355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_QUERY \ 9375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query) 9385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 9405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 9415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @groupid: Performance counter group IDs 9425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @countable: Performance counter countable IDs 9435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @value: Return performance counter reads 9445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: Size of all arrays (groupid/countable pair and return value) 9455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 9465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Read in the current value of a performance counter given by the groupid 9475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * and countable. 9485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 9495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 9505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_perfcounter_read_group { 9525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int groupid; 9535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int countable; 9545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned long long value; 9555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 9565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_perfcounter_read { 958d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin struct kgsl_perfcounter_read_group __user *reads; 9595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int count; 9605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 9615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 9625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 9635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_PERFCOUNTER_READ \ 9655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read) 9665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 9675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpumem_sync_cache_bulk - argument to 9685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK 9695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id_list: list of GPU buffer ids of the buffers to sync 9705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @count: number of GPU buffer ids in id_list 9715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @op: a mask of KGSL_GPUMEM_CACHE_* values 9725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 9735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Sync the cache for memory headed to and from the GPU. Certain 9745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * optimizations can be made on the cache operation based on the total 9755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * size of the working set of memory to be managed. 9765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 9775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpumem_sync_cache_bulk { 978d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin unsigned int __user *id_list; 9795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int count; 9805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op; 9815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 9825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[2]; /* For future binary compatibility */ 9835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 9845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK \ 9865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk) 9875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 9885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* 9895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_cmd_syncpoint_timestamp 9905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @context_id: ID of a KGSL context 9915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @timestamp: GPU timestamp 9925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 9935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This structure defines a syncpoint comprising a context/timestamp pair. A 9945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * list of these may be passed by IOCTL_KGSL_SUBMIT_COMMANDS to define 9955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * dependencies that must be met before the command can be submitted to the 9965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * hardware 9975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 9985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmd_syncpoint_timestamp { 9995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 10005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 10015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 10025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmd_syncpoint_fence { 10045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int fd; 10055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 10065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 10085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_cmd_syncpoint - Define a sync point for a command batch 10095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @type: type of sync point defined here 10105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @priv: Pointer to the type specific buffer 10115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: Size of the type specific buffer 10125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 10135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This structure contains pointers defining a specific command sync point. 10145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * The pointer and size should point to a type appropriate structure. 10155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 10165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cmd_syncpoint { 10175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int type; 1018d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin void __user *priv; 10195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t size; 10205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 10215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Flag to indicate that the cmdlist may contain memlists */ 10235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_IBDESC_MEMLIST 0x1 10245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Flag to point out the cmdbatch profiling buffer in the memlist */ 10265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_IBDESC_PROFILING_BUFFER 0x2 10275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 10295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_submit_commands - Argument to IOCTL_KGSL_SUBMIT_COMMANDS 10305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @context_id: KGSL context ID that owns the commands 10315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: 10325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @cmdlist: User pointer to a list of kgsl_ibdesc structures 10335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @numcmds: Number of commands listed in cmdlist 10345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @synclist: User pointer to a list of kgsl_cmd_syncpoint structures 10355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @numsyncs: Number of sync points listed in synclist 10365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @timestamp: On entry the a user defined timestamp, on exist the timestamp 10375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * assigned to the command batch 10385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 10395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This structure specifies a command to send to the GPU hardware. This is 10405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * similar to kgsl_issueibcmds expect that it doesn't support the legacy way to 10415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * submit IB lists and it adds sync points to block the IB until the 10425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * dependencies are satisified. This entry point is the new and preferred way 10435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * to submit commands to the GPU. The memory list can be used to specify all 10445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * memory that is referrenced in the current set of commands. 10455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 10465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_submit_commands { 10485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 10495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 1050d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin struct kgsl_ibdesc __user *cmdlist; 10515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int numcmds; 1052d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin struct kgsl_cmd_syncpoint __user *synclist; 10535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int numsyncs; 10545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 10555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 10565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[4]; 10575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 10585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SUBMIT_COMMANDS \ 10605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands) 10615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 10635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_device_constraint - device constraint argument 10645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @context_id: KGSL context ID 10655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @type: type of constraint i.e pwrlevel/none 10665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @data: constraint data 10675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: size of the constraint data 10685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 10695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_device_constraint { 10705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 10715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 1072d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin void __user *data; 10735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin size_t size; 10745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 10755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Constraint Type*/ 10775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONSTRAINT_NONE 0 10785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONSTRAINT_PWRLEVEL 1 10795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* PWRLEVEL constraint level*/ 10815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* set to min frequency */ 10825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONSTRAINT_PWR_MIN 0 10835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* set to max frequency */ 10845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_CONSTRAINT_PWR_MAX 1 10855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_device_constraint_pwrlevel { 10875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int level; 10885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 10895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 10915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_syncsource_create - Argument to IOCTL_KGSL_SYNCSOURCE_CREATE 10925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: returned id for the syncsource that was created. 10935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 10945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This ioctl creates a userspace sync timeline. 10955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 10965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 10975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_syncsource_create { 10985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 10995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 11005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[3]; 11015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 11025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_CREATE \ 11045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x40, struct kgsl_syncsource_create) 11055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 11075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_syncsource_destroy - Argument to IOCTL_KGSL_SYNCSOURCE_DESTROY 11085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: syncsource id to destroy 11095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 11105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * This ioctl creates a userspace sync timeline. 11115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 11125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_syncsource_destroy { 11145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 11155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 11165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[3]; 11175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 11185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_DESTROY \ 11205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x41, struct kgsl_syncsource_destroy) 11215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 11235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_syncsource_create_fence - Argument to 11245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 11255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: syncsource id 11265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @fence_fd: returned sync_fence fd 11275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 11285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Create a fence that may be signaled by userspace by calling 11295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE. There are no order dependencies between 11305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * these fences. 11315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 11325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_syncsource_create_fence { 11335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 11345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int fence_fd; 11355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 11365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[4]; 11375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 11385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 11405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_syncsource_signal_fence - Argument to 11415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE 11425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: syncsource id 11435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @fence_fd: sync_fence fd to signal 11445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 11455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Signal a fence that was created by a IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 11465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * call using the same syncsource id. This allows a fence to be shared 11475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * to other processes but only signaled by the process owning the fd 11485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * used to create the fence. 11495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 11505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE \ 11515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x42, struct kgsl_syncsource_create_fence) 11525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_syncsource_signal_fence { 11545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 11555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int fence_fd; 11565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* private: reserved for future use */ 11575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int __pad[4]; 11585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 11595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE \ 11615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x43, struct kgsl_syncsource_signal_fence) 11625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 11645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_cff_sync_gpuobj - Argument to IOCTL_KGSL_CFF_SYNC_GPUOBJ 11655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @offset: Offset into the GPU object to sync 11665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @length: Number of bytes to sync 11675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: ID of the GPU object to sync 11685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 11695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_cff_sync_gpuobj { 11705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t offset; 11715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t length; 11725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 11735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 11745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_CFF_SYNC_GPUOBJ \ 11765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x44, struct kgsl_cff_sync_gpuobj) 11775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 11795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_alloc - Argument to IOCTL_KGSL_GPUOBJ_ALLOC 11805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: Size in bytes of the object to allocate 11815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: mask of KGSL_MEMFLAG_* bits 11825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @va_len: Size in bytes of the virtual region to allocate 11835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @mmapsize: Returns the mmap() size of the object 11845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: Returns the GPU object ID of the new object 11855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @metadata_len: Length of the metdata to copy from the user 11865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @metadata: Pointer to the user specified metadata to store for the object 11875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 11885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_alloc { 11895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t size; 11905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t flags; 11915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t va_len; 11925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t mmapsize; 11935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 11945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int metadata_len; 11955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t metadata; 11965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 11975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 11985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Let the user know that this header supports the gpuobj metadata */ 11995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUOBJ_ALLOC_METADATA_MAX 64 12005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUOBJ_ALLOC \ 12025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x45, struct kgsl_gpuobj_alloc) 12035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 12055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_free - Argument to IOCTL_KGLS_GPUOBJ_FREE 12065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: Mask of: KGSL_GUPOBJ_FREE_ON_EVENT 12075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @priv: Pointer to the private object if KGSL_GPUOBJ_FREE_ON_EVENT is 12085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * specified 12095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: ID of the GPU object to free 12105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @type: If KGSL_GPUOBJ_FREE_ON_EVENT is specified, the type of asynchronous 12115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * event to free on 12125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @len: Length of the data passed in priv 12135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 12145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_free { 12155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t flags; 1216d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user priv; 12175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 12185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 12195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int len; 12205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 12215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUOBJ_FREE_ON_EVENT 1 12235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPU_EVENT_TIMESTAMP 1 12255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPU_EVENT_FENCE 2 12265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 12285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpu_event_timestamp - Specifies a timestamp event to free a GPU 12295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * object on 12305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @context_id: ID of the timestamp event to wait for 12315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @timestamp: Timestamp of the timestamp event to wait for 12325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 12335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpu_event_timestamp { 12345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 12355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 12365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 12375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 12395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpu_event_fence - Specifies a fence ID to to free a GPU object on 12405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @fd: File descriptor for the fence 12415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 12425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpu_event_fence { 12435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int fd; 12445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 12455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUOBJ_FREE \ 12475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x46, struct kgsl_gpuobj_free) 12485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 12505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_info - argument to IOCTL_KGSL_GPUOBJ_INFO 12515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpuaddr: GPU address of the object 12525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: Current flags for the object 12535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: Size of the object 12545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @va_len: VA size of the object 12555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @va_addr: Virtual address of the object (if it is mapped) 12565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * id - GPU object ID of the object to query 12575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 12585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_info { 12595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t gpuaddr; 12605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t flags; 12615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t size; 12625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t va_len; 12635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t va_addr; 12645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 12655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 12665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUOBJ_INFO \ 12685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x47, struct kgsl_gpuobj_info) 12695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 12715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_import - argument to IOCTL_KGSL_GPUOBJ_IMPORT 12725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @priv: Pointer to the private data for the import type 12735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @priv_len: Length of the private data 12745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: Mask of KGSL_MEMFLAG_ flags 12755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @type: Type of the import (KGSL_USER_MEM_TYPE_*) 12765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: Returns the ID of the new GPU object 12775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 12785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_import { 1279d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user priv; 12805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t priv_len; 12815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t flags; 12825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 12835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 12845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 12855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 12875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_import_dma_buf - import a dmabuf object 12885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @fd: File descriptor for the dma-buf object 12895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 12905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_import_dma_buf { 12915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin int fd; 12925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 12935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 12945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 12955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_import_useraddr - import an object based on a useraddr 12965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @virtaddr: Virtual address of the object to import 12975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 12985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_import_useraddr { 12995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t virtaddr; 13005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 13015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUOBJ_IMPORT \ 13035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x48, struct kgsl_gpuobj_import) 13045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 13065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_sync_obj - Individual GPU object to sync 13075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @offset: Offset within the GPU object to sync 13085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @length: Number of bytes to sync 13095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: ID of the GPU object to sync 13105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @op: Cache operation to execute 13115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 13125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_sync_obj { 13145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t offset; 13155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t length; 13165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 13175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int op; 13185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 13195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 13215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_sync - Argument for IOCTL_KGSL_GPUOBJ_SYNC 13225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @objs: Pointer to an array of kgsl_gpuobj_sync_obj structs 13235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @obj_len: Size of each item in the array 13245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @count: Number of items in the array 13255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 13265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_sync { 1328d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user objs; 13295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int obj_len; 13305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int count; 13315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 13325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUOBJ_SYNC \ 13345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x49, struct kgsl_gpuobj_sync) 13355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 13375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_command_object - GPU command object 13385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @offset: GPU address offset of the object 13395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @gpuaddr: GPU address of the object 13405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: Size of the object 13415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: Current flags for the object 13425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id - GPU command object ID 13435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 13445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_command_object { 13455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t offset; 13465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t gpuaddr; 13475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t size; 13485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int flags; 13495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 13505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 13515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 13535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_command_syncpoint - GPU syncpoint object 13545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @priv: Pointer to the type specific buffer 13555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size: Size of the type specific buffer 13565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @type: type of sync point defined here 13575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 13585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_command_syncpoint { 1359d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user priv; 13605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t size; 13615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 13625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 13635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 13655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_command_object - Argument for IOCTL_KGSL_GPU_COMMAND 13665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: Current flags for the object 13675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @cmdlist: List of kgsl_command_objects for submission 13685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @cmd_size: Size of kgsl_command_objects structure 13695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @numcmds: Number of kgsl_command_objects in command list 13705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @objlist: List of kgsl_command_objects for tracking 13715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @obj_size: Size of kgsl_command_objects structure 13725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @numobjs: Number of kgsl_command_objects in object list 13735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @synclist: List of kgsl_command_syncpoints 13745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @sync_size: Size of kgsl_command_syncpoint structure 13755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @numsyncs: Number of kgsl_command_syncpoints in syncpoint list 13765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @context_id: Context ID submittin ghte kgsl_gpu_command 13775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @timestamp: Timestamp for the submitted commands 13785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 13795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpu_command { 13805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t flags; 1381d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user cmdlist; 13825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int cmdsize; 13835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int numcmds; 1384d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user objlist; 13855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int objsize; 13865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int numobjs; 1387d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user synclist; 13885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int syncsize; 13895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int numsyncs; 13905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int context_id; 13915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int timestamp; 13925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 13935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPU_COMMAND \ 13955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x4A, struct kgsl_gpu_command) 13965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 13975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 13985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_preemption_counters_query - argument to 13995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * IOCTL_KGSL_PREEMPTIONCOUNTER_QUERY 14005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @counters: Return preemption counters array 14015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size_user: Size allocated by userspace 14025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @size_priority_level: Size of preemption counters for each 14035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * priority level 14045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @max_priority_level: Return max number of priority levels 14055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * 14065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Query the available preemption counters. The array counters 14075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * is used to return preemption counters. The size of the array 14085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * is passed in so the kernel will only write at most size_user 14095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * or max available preemption counters. The total number of 14105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * preemption counters is returned in max_priority_level. If the 14115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * array or size passed in are invalid, then an error is 14125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * returned back. 14135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 14145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_preemption_counters_query { 1415d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin uint64_t __user counters; 14165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int size_user; 14175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int size_priority_level; 14185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int max_priority_level; 14195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 14205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 14215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_PREEMPTIONCOUNTER_QUERY \ 14225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOWR(KGSL_IOC_TYPE, 0x4B, struct kgsl_preemption_counters_query) 14235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 14245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/** 14255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * struct kgsl_gpuobj_set_info - argument for IOCTL_KGSL_GPUOBJ_SET_INFO 14265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @flags: Flags to indicate which paramaters to change 14275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @metadata: If KGSL_GPUOBJ_SET_INFO_METADATA is set, a pointer to the new 14285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * metadata 14295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @id: GPU memory object ID to change 14305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @metadata_len: If KGSL_GPUOBJ_SET_INFO_METADATA is set, the length of the 14315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * new metadata string 14325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * @type: If KGSL_GPUOBJ_SET_INFO_TYPE is set, the new type of the memory object 14335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */ 14345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 14355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUOBJ_SET_INFO_METADATA (1 << 0) 14365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define KGSL_GPUOBJ_SET_INFO_TYPE (1 << 1) 14375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 14385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct kgsl_gpuobj_set_info { 14395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t flags; 14405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin uint64_t metadata; 14415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int id; 14425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int metadata_len; 14435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin unsigned int type; 14445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin}; 14455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 14465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define IOCTL_KGSL_GPUOBJ_SET_INFO \ 14475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin _IOW(KGSL_IOC_TYPE, 0x4C, struct kgsl_gpuobj_set_info) 14485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin 1449d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#endif /* _UAPI_MSM_KGSL_H */ 1450