1eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#ifndef _MSM_KGSL_H 2eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define _MSM_KGSL_H 3eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 4eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#include <linux/types.h> 5eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#include <linux/ioctl.h> 6eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 7eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 8eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * The KGSL version has proven not to be very useful in userspace if features 9eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * are cherry picked into other trees out of order so it is frozen as of 3.14. 10eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * It is left here for backwards compatabilty and as a reminder that 11eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * software releases are never linear. Also, I like pie. 12eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 13eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 14eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_VERSION_MAJOR 3 15eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_VERSION_MINOR 14 16eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 17eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 18eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * We have traditionally mixed context and issueibcmds / command batch flags 19eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * together into a big flag stew. This worked fine until we started adding a 20eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * lot more command batch flags and we started running out of bits. Turns out 21eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * we have a bit of room in the context type / priority mask that we could use 22eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * for command batches, but that means we need to split out the flags into two 23eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * coherent sets. 24eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 25eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * If any future definitions are for both context and cmdbatch add both defines 26eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * and link the cmdbatch to the context define as we do below. Otherwise feel 27eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * free to add exclusive bits to either set. 28eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 29eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 30eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* --- context flags --- */ 31eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_SAVE_GMEM 0x00000001 32eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_NO_GMEM_ALLOC 0x00000002 33eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 34eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_SUBMIT_IB_LIST 0x00000004 35eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_CTX_SWITCH 0x00000008 36eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PREAMBLE 0x00000010 37eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TRASH_STATE 0x00000020 38eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PER_CONTEXT_TS 0x00000040 39eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_USER_GENERATED_TS 0x00000080 40eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 41eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_END_OF_FRAME 0x00000100 42eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_NO_FAULT_TOLERANCE 0x00000200 43eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* This is a cmdbatch exclusive flag - use the CMDBATCH equivalent instead */ 44eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_SYNC 0x00000400 45eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PWR_CONSTRAINT 0x00000800 46eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PRIORITY_MASK 0x0000F000 47eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PRIORITY_SHIFT 12 48eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PRIORITY_UNDEF 0 49eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 50eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_IFH_NOP 0x00010000 51eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_SECURE 0x00020000 52eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_NO_SNAPSHOT 0x00040000 53eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_SPARSE 0x00080000 54eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 55eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PREEMPT_STYLE_MASK 0x0E000000 56eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PREEMPT_STYLE_SHIFT 25 57eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PREEMPT_STYLE_DEFAULT 0x0 58eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PREEMPT_STYLE_RINGBUFFER 0x1 59eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_PREEMPT_STYLE_FINEGRAIN 0x2 60eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 61eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_MASK 0x01F00000 62eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_SHIFT 20 63eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_ANY 0 64eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_GL 1 65eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_CL 2 66eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_C2D 3 67eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_RS 4 68eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_TYPE_UNKNOWN 0x1E 69eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 70203194d7eb6c14621882b043e28839e6045f9dbfThierry Strudel#define KGSL_CONTEXT_INVALIDATE_ON_FAULT 0x10000000 71203194d7eb6c14621882b043e28839e6045f9dbfThierry Strudel 72eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONTEXT_INVALID 0xffffffff 73eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 74eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 75eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * --- command batch flags --- 76eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * The bits that are linked to a KGSL_CONTEXT equivalent are either legacy 77eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * definitions or bits that are valid for both contexts and cmdbatches. To be 78eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * safe the other 8 bits that are still available in the context field should be 79eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * omitted here in case we need to share - the other bits are available for 80eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * cmdbatch only flags as needed 81eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 82eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_MEMLIST 0x00000001 83eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_MARKER 0x00000002 84eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_SUBMIT_IB_LIST KGSL_CONTEXT_SUBMIT_IB_LIST /* 0x004 */ 85eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_CTX_SWITCH KGSL_CONTEXT_CTX_SWITCH /* 0x008 */ 86eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_PROFILING 0x00000010 87eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 88eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * KGSL_CMDBATCH_PROFILING must also be set for KGSL_CMDBATCH_PROFILING_KTIME 89eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * to take effect, as the latter only affects the time data returned. 90eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 91eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_PROFILING_KTIME 0x00000020 92eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_END_OF_FRAME KGSL_CONTEXT_END_OF_FRAME /* 0x100 */ 93eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_SYNC KGSL_CONTEXT_SYNC /* 0x400 */ 94eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_PWR_CONSTRAINT KGSL_CONTEXT_PWR_CONSTRAINT /* 0x800 */ 95eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDBATCH_SPARSE 0x1000 /* 0x1000 */ 96eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 97eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 98eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Reserve bits [16:19] and bits [28:31] for possible bits shared between 99eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * contexts and command batches. Update this comment as new flags are added. 100eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 101eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 102eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 103eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * gpu_command_object flags - these flags communicate the type of command or 104eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * memory object being submitted for a GPU command 105eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 106eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 107eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flags for GPU command objects */ 108eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDLIST_IB 0x00000001U 109eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDLIST_CTXTSWITCH_PREAMBLE 0x00000002U 110eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMDLIST_IB_PREAMBLE 0x00000004U 111eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 112eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flags for GPU command memory objects */ 113eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_OBJLIST_MEMOBJ 0x00000008U 114eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_OBJLIST_PROFILE 0x00000010U 115eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 116eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flags for GPU command sync points */ 117eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMD_SYNCPOINT_TYPE_TIMESTAMP 0 118eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CMD_SYNCPOINT_TYPE_FENCE 1 119eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 120eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* --- Memory allocation flags --- */ 121eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 122eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* General allocation hints */ 123eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_SECURE 0x00000008ULL 124eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000U 125eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_GPUWRITEONLY 0x02000000U 126eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_FORCE_32BIT 0x100000000ULL 127eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 128eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flag for binding all the virt range to single phys data */ 129eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_SPARSE_BIND_MULTIPLE_TO_PHYS 0x400000000ULL 130eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_SPARSE_BIND 0x1ULL 131eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_SPARSE_UNBIND 0x2ULL 132eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 133eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Memory caching hints */ 134eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CACHEMODE_MASK 0x0C000000U 135eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CACHEMODE_SHIFT 26 136eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 137eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CACHEMODE_WRITECOMBINE 0 138eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CACHEMODE_UNCACHED 1 139eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CACHEMODE_WRITETHROUGH 2 140eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CACHEMODE_WRITEBACK 3 141eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 142eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000ULL 143eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_SPARSE_PHYS 0x20000000ULL 144eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_SPARSE_VIRT 0x40000000ULL 145eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 146eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Memory types for which allocations are made */ 147eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_MASK 0x0000FF00 148eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_SHIFT 8 149eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 150eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_OBJECTANY 0 151eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_FRAMEBUFFER 1 152eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_RENDERBUFFER 2 153eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_ARRAYBUFFER 3 154eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_ELEMENTARRAYBUFFER 4 155eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_VERTEXARRAYBUFFER 5 156eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_TEXTURE 6 157eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_SURFACE 7 158eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_EGL_SURFACE 8 159eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_GL 9 160eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_CL 10 161eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_CL_BUFFER_MAP 11 162eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_CL_BUFFER_NOMAP 12 163eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_CL_IMAGE_MAP 13 164eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_CL_IMAGE_NOMAP 14 165eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_CL_KERNEL_STACK 15 166eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_COMMAND 16 167eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_2D 17 168eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_EGL_IMAGE 18 169eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_EGL_SHADOW 19 170eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_MULTISAMPLE 20 171eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMTYPE_KERNEL 255 172eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 173eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 174eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Alignment hint, passed as the power of 2 exponent. 175eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * i.e 4k (2^12) would be 12, 64k (2^16)would be 16. 176eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 177eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMALIGN_MASK 0x00FF0000 178eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMALIGN_SHIFT 16 179eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 180eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelenum kgsl_user_mem_type { 181eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_USER_MEM_TYPE_PMEM = 0x00000000, 182eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_USER_MEM_TYPE_ASHMEM = 0x00000001, 183eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_USER_MEM_TYPE_ADDR = 0x00000002, 184eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_USER_MEM_TYPE_ION = 0x00000003, 185eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* 186eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * ION type is retained for backwards compatibilty but Ion buffers are 187eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * dma-bufs so try to use that naming if we can 188eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 189eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_USER_MEM_TYPE_DMABUF = 0x00000003, 190eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_USER_MEM_TYPE_MAX = 0x00000007, 191eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 192eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_USERMEM_MASK 0x000000e0 193eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_USERMEM_SHIFT 5 194eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 195eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 196eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Unfortunately, enum kgsl_user_mem_type starts at 0 which does not 197eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * leave a good value for allocated memory. In the flags we use 198eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 0 to indicate allocated memory and thus need to add 1 to the enum 199eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * values. 200eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 201eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_USERMEM_FLAG(x) (((x) + 1) << KGSL_MEMFLAGS_USERMEM_SHIFT) 202eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 203eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_NOT_USERMEM 0 204eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_USERMEM_PMEM KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_PMEM) 205eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_USERMEM_ASHMEM \ 206eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ASHMEM) 207eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_USERMEM_ADDR KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ADDR) 208eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMFLAGS_USERMEM_ION KGSL_USERMEM_FLAG(KGSL_USER_MEM_TYPE_ION) 209eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 210eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* --- generic KGSL flag values --- */ 211eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 212eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_NORMALMODE 0x00000000 213eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_SAFEMODE 0x00000001 214eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_INITIALIZED0 0x00000002 215eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_INITIALIZED 0x00000004 216eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_STARTED 0x00000008 217eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_ACTIVE 0x00000010 218eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_RESERVED0 0x00000020 219eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_RESERVED1 0x00000040 220eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_RESERVED2 0x00000080 221eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_SOFT_RESET 0x00000100 222eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_FLAGS_PER_CONTEXT_TIMESTAMPS 0x00000200 223eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 224eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Server Side Sync Timeout in milliseconds */ 225eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_SYNCOBJ_SERVER_TIMEOUT 2000 226eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 227eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 228eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Reset status values for context 229eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 230eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelenum kgsl_ctx_reset_stat { 231eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CTX_STAT_NO_ERROR = 0x00000000, 232eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CTX_STAT_GUILTY_CONTEXT_RESET_EXT = 0x00000001, 233eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CTX_STAT_INNOCENT_CONTEXT_RESET_EXT = 0x00000002, 234eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CTX_STAT_UNKNOWN_CONTEXT_RESET_EXT = 0x00000003 235eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 236eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 237eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONVERT_TO_MBPS(val) \ 238eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel (val*1000*1000U) 239eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 240eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* device id */ 241eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelenum kgsl_deviceid { 242eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_DEVICE_3D0 = 0x00000000, 243eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_DEVICE_MAX 244eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 245eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 246eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_devinfo { 247eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 248eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int device_id; 249eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* chip revision id 250eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * coreid:8 majorrev:8 minorrev:8 patch:8 251eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 252eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int chip_id; 253eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int mmu_enabled; 254eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gmem_gpubaseaddr; 255eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* 256eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This field contains the adreno revision 257eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * number 200, 205, 220, etc... 258eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 259eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int gpu_id; 260eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t gmem_sizebytes; 261eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 262eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 263eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 264eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_devmemstore - this structure defines the region of memory 265eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * that can be mmap()ed from this driver. The timestamp fields are __volatile__ 266eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * because they are written by the GPU 267eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @soptimestamp: Start of pipeline timestamp written by GPU before the 268eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * commands in concern are processed 269eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sbz: Unused, kept for 8 byte alignment 270eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @eoptimestamp: End of pipeline timestamp written by GPU after the 271eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * commands in concern are processed 272eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sbz2: Unused, kept for 8 byte alignment 273eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @preempted: Indicates if the context was preempted 274eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sbz3: Unused, kept for 8 byte alignment 275eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @ref_wait_ts: Timestamp on which to generate interrupt, unused now. 276eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sbz4: Unused, kept for 8 byte alignment 277eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @current_context: The current context the GPU is working on 278eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sbz5: Unused, kept for 8 byte alignment 279eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 280eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_devmemstore { 281eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __volatile__ unsigned int soptimestamp; 282eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int sbz; 283eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __volatile__ unsigned int eoptimestamp; 284eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int sbz2; 285eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __volatile__ unsigned int preempted; 286eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int sbz3; 287eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __volatile__ unsigned int ref_wait_ts; 288eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int sbz4; 289eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int current_context; 290eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int sbz5; 291eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 292eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 293eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_MEMSTORE_OFFSET(ctxt_id, field) \ 294eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel ((ctxt_id)*sizeof(struct kgsl_devmemstore) + \ 295eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel offsetof(struct kgsl_devmemstore, field)) 296eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 297eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* timestamp id*/ 298eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelenum kgsl_timestamp_type { 299eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_TIMESTAMP_CONSUMED = 0x00000001, /* start-of-pipeline timestamp */ 300eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_TIMESTAMP_RETIRED = 0x00000002, /* end-of-pipeline timestamp*/ 301eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_TIMESTAMP_QUEUED = 0x00000003, 302eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 303eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 304eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* property types - used with kgsl_device_getproperty */ 305eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_DEVICE_INFO 0x1 306eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_DEVICE_SHADOW 0x2 307eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_DEVICE_POWER 0x3 308eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_SHMEM 0x4 309eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_SHMEM_APERTURES 0x5 310eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_MMU_ENABLE 0x6 311eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_INTERRUPT_WAITS 0x7 312eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_VERSION 0x8 313eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_GPU_RESET_STAT 0x9 314eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_PWRCTRL 0xE 315eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_PWR_CONSTRAINT 0x12 316eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_UCHE_GMEM_VADDR 0x13 317eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_SP_GENERIC_MEM 0x14 318eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_UCODE_VERSION 0x15 319eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_GPMU_VERSION 0x16 320eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_HIGHEST_BANK_BIT 0x17 321eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_DEVICE_BITNESS 0x18 322eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PROP_DEVICE_QDSS_STM 0x19 32331c96166ed82efe27caf9bf4ff6683b69d8e40b8Thierry Strudel#define KGSL_PROP_DEVICE_QTIMER 0x20 324eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 325eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_shadowprop { 326eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 327eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t size; 328eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; /* contains KGSL_FLAGS_ values */ 329eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 330eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 331eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_qdss_stm_prop { 332eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t gpuaddr; 333eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 334eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 335eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 33631c96166ed82efe27caf9bf4ff6683b69d8e40b8Thierry Strudelstruct kgsl_qtimer_prop { 33731c96166ed82efe27caf9bf4ff6683b69d8e40b8Thierry Strudel uint64_t gpuaddr; 33831c96166ed82efe27caf9bf4ff6683b69d8e40b8Thierry Strudel uint64_t size; 33931c96166ed82efe27caf9bf4ff6683b69d8e40b8Thierry Strudel}; 34031c96166ed82efe27caf9bf4ff6683b69d8e40b8Thierry Strudel 341eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_version { 342eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int drv_major; 343eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int drv_minor; 344eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int dev_major; 345eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int dev_minor; 346eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 347eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 348eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sp_generic_mem { 349eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t local; 350eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t pvt; 351eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 352eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 353eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_ucode_version { 354eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int pfp; 355eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int pm4; 356eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 357eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 358eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpmu_version { 359eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int major; 360eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int minor; 361eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int features; 362eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 363eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 364eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Performance counter groups */ 365eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 366eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_CP 0x0 367eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_RBBM 0x1 368eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_PC 0x2 369eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_VFD 0x3 370eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_HLSQ 0x4 371eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_VPC 0x5 372eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_TSE 0x6 373eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_RAS 0x7 374eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_UCHE 0x8 375eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_TP 0x9 376eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_SP 0xA 377eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_RB 0xB 378eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_PWR 0xC 379eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_VBIF 0xD 380eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_VBIF_PWR 0xE 381eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_MH 0xF 382eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_PA_SU 0x10 383eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_SQ 0x11 384eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_SX 0x12 385eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_TCF 0x13 386eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_TCM 0x14 387eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_TCR 0x15 388eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_L2 0x16 389eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_VSC 0x17 390eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_CCU 0x18 391eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_LRZ 0x19 392eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_CMP 0x1A 393eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_ALWAYSON 0x1B 394eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_SP_PWR 0x1C 395eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_TP_PWR 0x1D 396eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_RB_PWR 0x1E 397eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_CCU_PWR 0x1F 398eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_UCHE_PWR 0x20 399eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_CP_PWR 0x21 400eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_GPMU_PWR 0x22 401eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_ALWAYSON_PWR 0x23 402eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_GROUP_MAX 0x24 403eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 404eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF 405eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE 406eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 407eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* structure holds list of ibs */ 408eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_ibdesc { 409eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 410eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long __pad; 411eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t sizedwords; 412eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int ctrl; 413eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 414eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 415eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 416eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_cmdbatch_profiling_buffer 417eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @wall_clock_s: Ringbuffer submission time (seconds). 418eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * If KGSL_CMDBATCH_PROFILING_KTIME is set, time is provided 419eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * in kernel clocks, otherwise wall clock time is used. 420eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @wall_clock_ns: Ringbuffer submission time (nanoseconds). 421eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * If KGSL_CMDBATCH_PROFILING_KTIME is set time is provided 422eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * in kernel clocks, otherwise wall clock time is used. 423eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpu_ticks_queued: GPU ticks at ringbuffer submission 424eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpu_ticks_submitted: GPU ticks when starting cmdbatch execution 425eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpu_ticks_retired: GPU ticks when finishing cmdbatch execution 426eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 427eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This structure defines the profiling buffer used to measure cmdbatch 428eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * execution time 429eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 430eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmdbatch_profiling_buffer { 431eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t wall_clock_s; 432eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t wall_clock_ns; 433eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t gpu_ticks_queued; 434eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t gpu_ticks_submitted; 435eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t gpu_ticks_retired; 436eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 437eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 438eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* ioctls */ 439eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_IOC_TYPE 0x09 440eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 441eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* get misc info about the GPU 442eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel type should be a value from enum kgsl_property_type 443eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel value points to a structure that varies based on type 444eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel sizebytes is sizeof() that structure 445eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel for KGSL_PROP_DEVICE_INFO, use struct kgsl_devinfo 446eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel this structure contaings hardware versioning info. 447eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel for KGSL_PROP_DEVICE_SHADOW, use struct kgsl_shadowprop 448eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel this is used to find mmap() offset and sizes for mapping 449eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct kgsl_memstore into userspace. 450eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel*/ 451eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_device_getproperty { 452eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 453eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel void *value; 454eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t sizebytes; 455eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 456eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 457eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_DEVICE_GETPROPERTY \ 458eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty) 459eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 460eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* IOCTL_KGSL_DEVICE_READ (0x3) - removed 03/2012 461eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 462eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 463eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* block until the GPU has executed past a given timestamp 464eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * timeout is in milliseconds. 465eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 466eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_device_waittimestamp { 467eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 468eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timeout; 469eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 470eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 471eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP \ 472eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x6, struct kgsl_device_waittimestamp) 473eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 474eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_device_waittimestamp_ctxtid { 475eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 476eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 477eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timeout; 478eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 479eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 480eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID \ 481eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x7, struct kgsl_device_waittimestamp_ctxtid) 482eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 483eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* DEPRECATED: issue indirect commands to the GPU. 484eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * drawctxt_id must have been created with IOCTL_KGSL_DRAWCTXT_CREATE 485eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * ibaddr and sizedwords must specify a subset of a buffer created 486eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * with IOCTL_KGSL_SHAREDMEM_FROM_PMEM 487eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * flags may be a mask of KGSL_CONTEXT_ values 488eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * timestamp is a returned counter value which can be passed to 489eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * other ioctls to determine when the commands have been executed by 490eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * the GPU. 491eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 492eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This fucntion is deprecated - consider using IOCTL_KGSL_SUBMIT_COMMANDS 493eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * instead 494eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 495eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_ringbuffer_issueibcmds { 496eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int drawctxt_id; 497eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long ibdesc_addr; 498eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numibs; 499eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; /*output param */ 500eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 501eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 502eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 503eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS \ 504eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds) 505eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 506eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* read the most recently executed timestamp value 507eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * type should be a value from enum kgsl_timestamp_type 508eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 509eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmdstream_readtimestamp { 510eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 511eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; /*output param */ 512eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 513eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 514eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_OLD \ 515eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 516eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 517eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP \ 518eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x11, struct kgsl_cmdstream_readtimestamp) 519eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 520eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* free memory when the GPU reaches a given timestamp. 521eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * gpuaddr specify a memory region created by a 522eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_SHAREDMEM_FROM_PMEM call 523eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * type should be a value from enum kgsl_timestamp_type 524eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 525eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmdstream_freememontimestamp { 526eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 527eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 528eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 529eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 530eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 531eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP \ 532eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 533eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 534eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Previous versions of this header had incorrectly defined 535eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP as a read-only ioctl instead 536eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel of a write only ioctl. To ensure binary compatability, the following 537eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel #define will be used to intercept the incorrect ioctl 538eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel*/ 539eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 540eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_OLD \ 541eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOR(KGSL_IOC_TYPE, 0x12, struct kgsl_cmdstream_freememontimestamp) 542eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 543eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* create a draw context, which is used to preserve GPU state. 544eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * The flags field may contain a mask KGSL_CONTEXT_* values 545eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 546eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_drawctxt_create { 547eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 548eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int drawctxt_id; /*output param */ 549eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 550eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 551eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_DRAWCTXT_CREATE \ 552eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x13, struct kgsl_drawctxt_create) 553eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 554eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* destroy a draw context */ 555eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_drawctxt_destroy { 556eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int drawctxt_id; 557eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 558eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 559eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_DRAWCTXT_DESTROY \ 560eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x14, struct kgsl_drawctxt_destroy) 561eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 562eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* add a block of pmem, fb, ashmem or user allocated address 563eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * into the GPU address space */ 564eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_map_user_mem { 565eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int fd; 566eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; /*output param */ 567eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t len; 568eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t offset; 569eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long hostptr; /*input param */ 570eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel enum kgsl_user_mem_type memtype; 571eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 572eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 573eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 574eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_MAP_USER_MEM \ 575eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem) 576eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 577eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmdstream_readtimestamp_ctxtid { 578eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 579eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 580eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; /*output param */ 581eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 582eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 583eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID \ 584eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x16, struct kgsl_cmdstream_readtimestamp_ctxtid) 585eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 586eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmdstream_freememontimestamp_ctxtid { 587eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 588eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 589eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 590eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 591eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 592eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 593eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID \ 594eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x17, \ 595eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct kgsl_cmdstream_freememontimestamp_ctxtid) 596eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 597eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* add a block of pmem or fb into the GPU address space */ 598eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sharedmem_from_pmem { 599eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int pmem_fd; 600eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; /*output param */ 601eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int len; 602eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int offset; 603eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 604eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 605eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SHAREDMEM_FROM_PMEM \ 606eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x20, struct kgsl_sharedmem_from_pmem) 607eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 608eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* remove memory from the GPU's address space */ 609eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sharedmem_free { 610eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 611eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 612eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 613eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SHAREDMEM_FREE \ 614eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free) 615eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 616eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cff_user_event { 617eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned char cff_opcode; 618eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op1; 619eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op2; 620eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op3; 621eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op4; 622eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op5; 623eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[2]; 624eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 625eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 626eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CFF_USER_EVENT \ 627eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_cff_user_event) 628eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 629eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gmem_desc { 630eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int x; 631eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int y; 632eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int width; 633eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int height; 634eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int pitch; 635eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 636eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 637eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_buffer_desc { 638eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel void *hostptr; 639eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 640eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int size; 641eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int format; 642eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int pitch; 643eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int enabled; 644eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 645eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 646eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_bind_gmem_shadow { 647eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int drawctxt_id; 648eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct kgsl_gmem_desc gmem_desc; 649eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int shadow_x; 650eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int shadow_y; 651eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct kgsl_buffer_desc shadow_buffer; 652eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int buffer_id; 653eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 654eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 655eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_DRAWCTXT_BIND_GMEM_SHADOW \ 656eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x22, struct kgsl_bind_gmem_shadow) 657eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 658eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* add a block of memory into the GPU address space */ 659eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 660eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 661eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC deprecated 09/2012 662eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * use IOCTL_KGSL_GPUMEM_ALLOC instead 663eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 664eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 665eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sharedmem_from_vmalloc { 666eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; /*output param */ 667eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int hostptr; 668eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 669eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 670eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 671eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SHAREDMEM_FROM_VMALLOC \ 672eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x23, struct kgsl_sharedmem_from_vmalloc) 673eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 674eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 675eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This is being deprecated in favor of IOCTL_KGSL_GPUMEM_CACHE_SYNC which 676eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * supports both directions (flush and invalidate). This code will still 677eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * work, but by definition it will do a flush of the cache which might not be 678eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * what you want to have happen on a buffer following a GPU operation. It is 679eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * safer to go with IOCTL_KGSL_GPUMEM_CACHE_SYNC 680eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 681eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 682eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE \ 683eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free) 684eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 685eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_drawctxt_set_bin_base_offset { 686eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int drawctxt_id; 687eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int offset; 688eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 689eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 690eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET \ 691eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x25, struct kgsl_drawctxt_set_bin_base_offset) 692eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 693eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelenum kgsl_cmdwindow_type { 694eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CMDWINDOW_MIN = 0x00000000, 695eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CMDWINDOW_2D = 0x00000000, 696eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CMDWINDOW_3D = 0x00000001, /* legacy */ 697eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CMDWINDOW_MMU = 0x00000002, 698eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CMDWINDOW_ARBITER = 0x000000FF, 699eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel KGSL_CMDWINDOW_MAX = 0x000000FF, 700eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 701eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 702eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* write to the command window */ 703eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmdwindow_write { 704eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel enum kgsl_cmdwindow_type target; 705eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int addr; 706eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int data; 707eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 708eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 709eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CMDWINDOW_WRITE \ 710eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x2e, struct kgsl_cmdwindow_write) 711eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 712eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpumem_alloc { 713eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; /* output param */ 714eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t size; 715eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 716eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 717eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 718eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUMEM_ALLOC \ 719eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc) 720eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 721eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cff_syncmem { 722eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 723eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t len; 724eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[2]; /* For future binary compatibility */ 725eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 726eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 727eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CFF_SYNCMEM \ 728eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem) 729eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 730eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 731eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * A timestamp event allows the user space to register an action following an 732eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * expired timestamp. Note IOCTL_KGSL_TIMESTAMP_EVENT has been redefined to 733eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * _IOWR to support fences which need to return a fd for the priv parameter. 734eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 735eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 736eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_timestamp_event { 737eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int type; /* Type of event (see list below) */ 738eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; /* Timestamp to trigger event on */ 739eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; /* Context for the timestamp */ 740eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel void *priv; /* Pointer to the event specific blob */ 741eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t len; /* Size of the event specific blob */ 742eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 743eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 744eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_TIMESTAMP_EVENT_OLD \ 745eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x31, struct kgsl_timestamp_event) 746eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 747eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* A genlock timestamp event releases an existing lock on timestamp expire */ 748eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 749eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_TIMESTAMP_EVENT_GENLOCK 1 750eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 751eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_timestamp_event_genlock { 752eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int handle; /* Handle of the genlock lock to release */ 753eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 754eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 755eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* A fence timestamp event releases an existing lock on timestamp expire */ 756eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 757eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_TIMESTAMP_EVENT_FENCE 2 758eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 759eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_timestamp_event_fence { 760eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int fence_fd; /* Fence to signal */ 761eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 762eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 763eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 764eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Set a property within the kernel. Uses the same structure as 765eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_GETPROPERTY 766eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 767eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 768eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SETPROPERTY \ 769eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty) 770eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 771eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_TIMESTAMP_EVENT \ 772eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event) 773eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 774eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 775eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpumem_alloc_id - argument to IOCTL_KGSL_GPUMEM_ALLOC_ID 776eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: returned id value for this allocation. 777eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: mask of KGSL_MEM* values requested and actual flags on return. 778eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: requested size of the allocation and actual size on return. 779eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @mmapsize: returned size to pass to mmap() which may be larger than 'size' 780eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpuaddr: returned GPU address for the allocation 781eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 782eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Allocate memory for access by the GPU. The flags and size fields are echoed 783eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * back by the kernel, so that the caller can know if the request was 784eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * adjusted. 785eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 786eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Supported flags: 787eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * KGSL_MEMFLAGS_GPUREADONLY: the GPU will be unable to write to the buffer 788eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * KGSL_MEMTYPE*: usage hint for debugging aid 789eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * KGSL_MEMALIGN*: alignment hint, may be ignored or adjusted by the kernel. 790eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * KGSL_MEMFLAGS_USE_CPU_MAP: If set on call and return, the returned GPU 791eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * address will be 0. Calling mmap() will set the GPU address. 792eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 793eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpumem_alloc_id { 794eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 795eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 796eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t size; 797eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t mmapsize; 798eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 799eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use*/ 800eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long __pad[2]; 801eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 802eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 803eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUMEM_ALLOC_ID \ 804eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id) 805eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 806eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 807eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpumem_free_id - argument to IOCTL_KGSL_GPUMEM_FREE_ID 808eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: GPU allocation id to free 809eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 810eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Free an allocation by id, in case a GPU address has not been assigned or 811eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * is unknown. Freeing an allocation by id with this ioctl or by GPU address 812eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * with IOCTL_KGSL_SHAREDMEM_FREE are equivalent. 813eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 814eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpumem_free_id { 815eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 816eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use*/ 817eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad; 818eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 819eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 820eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUMEM_FREE_ID \ 821eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x35, struct kgsl_gpumem_free_id) 822eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 823eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 824eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpumem_get_info - argument to IOCTL_KGSL_GPUMEM_GET_INFO 825eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpuaddr: GPU address to query. Also set on return. 826eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: GPU allocation id to query. Also set on return. 827eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: returned mask of KGSL_MEM* values. 828eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: returned size of the allocation. 829eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @mmapsize: returned size to pass mmap(), which may be larger than 'size' 830eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @useraddr: returned address of the userspace mapping for this buffer 831eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 832eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This ioctl allows querying of all user visible attributes of an existing 833eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * allocation, by either the GPU address or the id returned by a previous 834eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * call to IOCTL_KGSL_GPUMEM_ALLOC_ID. Legacy allocation ioctls may not 835eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * return all attributes so this ioctl can be used to look them up if needed. 836eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 837eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 838eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpumem_get_info { 839eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 840eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 841eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 842eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t size; 843eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t mmapsize; 844eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long useraddr; 845eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use*/ 846eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long __pad[4]; 847eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 848eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 849eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUMEM_GET_INFO\ 850eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info) 851eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 852eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 853eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpumem_sync_cache - argument to IOCTL_KGSL_GPUMEM_SYNC_CACHE 854eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpuaddr: GPU address of the buffer to sync. 855eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: id of the buffer to sync. Either gpuaddr or id is sufficient. 856eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @op: a mask of KGSL_GPUMEM_CACHE_* values 857eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @offset: offset into the buffer 858eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @length: number of bytes starting from offset to perform 859eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * the cache operation on 860eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 861eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Sync the L2 cache for memory headed to and from the GPU - this replaces 862eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * KGSL_SHAREDMEM_FLUSH_CACHE since it can handle cache management for both 863eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * directions 864eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 865eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 866eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpumem_sync_cache { 867eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long gpuaddr; 868eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 869eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op; 870eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t offset; 871eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t length; 872eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 873eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 874eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUMEM_CACHE_CLEAN (1 << 0) 875eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUMEM_CACHE_TO_GPU KGSL_GPUMEM_CACHE_CLEAN 876eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 877eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUMEM_CACHE_INV (1 << 1) 878eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUMEM_CACHE_FROM_GPU KGSL_GPUMEM_CACHE_INV 879eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 880eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUMEM_CACHE_FLUSH \ 881eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel (KGSL_GPUMEM_CACHE_CLEAN | KGSL_GPUMEM_CACHE_INV) 882eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 883eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flag to ensure backwards compatibility of kgsl_gpumem_sync_cache struct */ 884eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUMEM_CACHE_RANGE (1 << 31U) 885eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 886eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUMEM_SYNC_CACHE \ 887eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache) 888eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 889eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 890eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_perfcounter_get - argument to IOCTL_KGSL_PERFCOUNTER_GET 891eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @groupid: Performance counter group ID 892eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @countable: Countable to select within the group 893eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @offset: Return offset of the reserved LO counter 894eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @offset_hi: Return offset of the reserved HI counter 895eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 896eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Get an available performance counter from a specified groupid. The offset 897eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * of the performance counter will be returned after successfully assigning 898eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * the countable to the counter for the specified group. An error will be 899eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * returned and an offset of 0 if the groupid is invalid or there are no 900eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * more counters left. After successfully getting a perfcounter, the user 901eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * must call kgsl_perfcounter_put(groupid, contable) when finished with 902eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * the perfcounter to clear up perfcounter resources. 903eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 904eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 905eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_perfcounter_get { 906eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int groupid; 907eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int countable; 908eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int offset; 909eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int offset_hi; 910eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 911eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad; /* For future binary compatibility */ 912eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 913eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 914eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_PERFCOUNTER_GET \ 915eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x38, struct kgsl_perfcounter_get) 916eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 917eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 918eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_perfcounter_put - argument to IOCTL_KGSL_PERFCOUNTER_PUT 919eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @groupid: Performance counter group ID 920eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @countable: Countable to release within the group 921eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 922eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Put an allocated performance counter to allow others to have access to the 923eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * resource that was previously taken. This is only to be called after 924eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * successfully getting a performance counter from kgsl_perfcounter_get(). 925eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 926eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 927eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_perfcounter_put { 928eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int groupid; 929eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int countable; 930eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 931eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[2]; /* For future binary compatibility */ 932eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 933eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 934eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_PERFCOUNTER_PUT \ 935eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x39, struct kgsl_perfcounter_put) 936eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 937eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 938eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 939eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @groupid: Performance counter group ID 940eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @countable: Return active countables array 941eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size of active countables array 942eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @max_counters: Return total number counters for the group ID 943eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 944eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Query the available performance counters given a groupid. The array 945eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * *countables is used to return the current active countables in counters. 946eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * The size of the array is passed in so the kernel will only write at most 947eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * size or counter->size for the group id. The total number of available 948eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * counters for the group ID is returned in max_counters. 949eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * If the array or size passed in are invalid, then only the maximum number 950eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * of counters will be returned, no data will be written to *countables. 951eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * If the groupid is invalid an error code will be returned. 952eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 953eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 954eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_perfcounter_query { 955eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int groupid; 956eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* Array to return the current countable for up to size counters */ 957eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int *countables; 958eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int count; 959eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int max_counters; 960eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 961eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[2]; /* For future binary compatibility */ 962eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 963eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 964eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_PERFCOUNTER_QUERY \ 965eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query) 966eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 967eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 968eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_perfcounter_query - argument to IOCTL_KGSL_PERFCOUNTER_QUERY 969eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @groupid: Performance counter group IDs 970eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @countable: Performance counter countable IDs 971eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @value: Return performance counter reads 972eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size of all arrays (groupid/countable pair and return value) 973eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 974eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Read in the current value of a performance counter given by the groupid 975eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * and countable. 976eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 977eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 978eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 979eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_perfcounter_read_group { 980eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int groupid; 981eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int countable; 982eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned long long value; 983eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 984eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 985eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_perfcounter_read { 986eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct kgsl_perfcounter_read_group *reads; 987eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int count; 988eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 989eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[2]; /* For future binary compatibility */ 990eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 991eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 992eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_PERFCOUNTER_READ \ 993eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read) 994eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 995eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpumem_sync_cache_bulk - argument to 996eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK 997eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id_list: list of GPU buffer ids of the buffers to sync 998eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @count: number of GPU buffer ids in id_list 999eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @op: a mask of KGSL_GPUMEM_CACHE_* values 1000eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1001eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Sync the cache for memory headed to and from the GPU. Certain 1002eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * optimizations can be made on the cache operation based on the total 1003eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * size of the working set of memory to be managed. 1004eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1005eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpumem_sync_cache_bulk { 1006eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int *id_list; 1007eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int count; 1008eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op; 1009eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 1010eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[2]; /* For future binary compatibility */ 1011eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1012eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1013eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK \ 1014eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk) 1015eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1016eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 1017eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_cmd_syncpoint_timestamp 1018eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @context_id: ID of a KGSL context 1019eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @timestamp: GPU timestamp 1020eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1021eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This structure defines a syncpoint comprising a context/timestamp pair. A 1022eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * list of these may be passed by IOCTL_KGSL_SUBMIT_COMMANDS to define 1023eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * dependencies that must be met before the command can be submitted to the 1024eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * hardware 1025eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1026eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmd_syncpoint_timestamp { 1027eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 1028eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 1029eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1030eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1031eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmd_syncpoint_fence { 1032eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int fd; 1033eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1034eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1035eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1036eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_cmd_syncpoint - Define a sync point for a command batch 1037eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @type: type of sync point defined here 1038eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @priv: Pointer to the type specific buffer 1039eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size of the type specific buffer 1040eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1041eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This structure contains pointers defining a specific command sync point. 1042eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * The pointer and size should point to a type appropriate structure. 1043eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1044eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cmd_syncpoint { 1045eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int type; 1046eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel void *priv; 1047eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t size; 1048eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1049eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1050eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flag to indicate that the cmdlist may contain memlists */ 1051eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_IBDESC_MEMLIST 0x1 1052eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1053eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flag to point out the cmdbatch profiling buffer in the memlist */ 1054eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_IBDESC_PROFILING_BUFFER 0x2 1055eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1056eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1057eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_submit_commands - Argument to IOCTL_KGSL_SUBMIT_COMMANDS 1058eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @context_id: KGSL context ID that owns the commands 1059eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: 1060eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @cmdlist: User pointer to a list of kgsl_ibdesc structures 1061eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @numcmds: Number of commands listed in cmdlist 1062eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @synclist: User pointer to a list of kgsl_cmd_syncpoint structures 1063eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @numsyncs: Number of sync points listed in synclist 1064eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @timestamp: On entry the a user defined timestamp, on exist the timestamp 1065eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * assigned to the command batch 1066eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1067eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This structure specifies a command to send to the GPU hardware. This is 1068eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * similar to kgsl_issueibcmds expect that it doesn't support the legacy way to 1069eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * submit IB lists and it adds sync points to block the IB until the 1070eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * dependencies are satisified. This entry point is the new and preferred way 1071eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * to submit commands to the GPU. The memory list can be used to specify all 1072eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * memory that is referrenced in the current set of commands. 1073eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1074eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1075eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_submit_commands { 1076eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 1077eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 1078eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct kgsl_ibdesc *cmdlist; 1079eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numcmds; 1080eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct kgsl_cmd_syncpoint *synclist; 1081eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numsyncs; 1082eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 1083eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 1084eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[4]; 1085eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1086eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1087eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SUBMIT_COMMANDS \ 1088eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands) 1089eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1090eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1091eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_device_constraint - device constraint argument 1092eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @context_id: KGSL context ID 1093eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @type: type of constraint i.e pwrlevel/none 1094eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @data: constraint data 1095eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: size of the constraint data 1096eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1097eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_device_constraint { 1098eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 1099eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 1100eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel void *data; 1101eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel size_t size; 1102eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1103eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1104eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Constraint Type*/ 1105eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONSTRAINT_NONE 0 1106eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONSTRAINT_PWRLEVEL 1 1107eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1108eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* PWRLEVEL constraint level*/ 1109eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* set to min frequency */ 1110eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONSTRAINT_PWR_MIN 0 1111eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* set to max frequency */ 1112eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_CONSTRAINT_PWR_MAX 1 1113eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1114eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_device_constraint_pwrlevel { 1115eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int level; 1116eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1117eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1118eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1119eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_syncsource_create - Argument to IOCTL_KGSL_SYNCSOURCE_CREATE 1120eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: returned id for the syncsource that was created. 1121eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1122eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This ioctl creates a userspace sync timeline. 1123eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1124eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1125eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_syncsource_create { 1126eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1127eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 1128eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[3]; 1129eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1130eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1131eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SYNCSOURCE_CREATE \ 1132eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x40, struct kgsl_syncsource_create) 1133eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1134eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1135eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_syncsource_destroy - Argument to IOCTL_KGSL_SYNCSOURCE_DESTROY 1136eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: syncsource id to destroy 1137eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1138eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * This ioctl creates a userspace sync timeline. 1139eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1140eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1141eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_syncsource_destroy { 1142eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1143eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 1144eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[3]; 1145eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1146eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1147eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SYNCSOURCE_DESTROY \ 1148eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x41, struct kgsl_syncsource_destroy) 1149eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1150eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1151eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_syncsource_create_fence - Argument to 1152eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 1153eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: syncsource id 1154eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @fence_fd: returned sync_fence fd 1155eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1156eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Create a fence that may be signaled by userspace by calling 1157eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE. There are no order dependencies between 1158eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * these fences. 1159eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1160eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_syncsource_create_fence { 1161eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1162eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int fence_fd; 1163eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 1164eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[4]; 1165eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1166eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1167eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1168eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_syncsource_signal_fence - Argument to 1169eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE 1170eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: syncsource id 1171eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @fence_fd: sync_fence fd to signal 1172eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1173eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Signal a fence that was created by a IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE 1174eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * call using the same syncsource id. This allows a fence to be shared 1175eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * to other processes but only signaled by the process owning the fd 1176eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * used to create the fence. 1177eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1178eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SYNCSOURCE_CREATE_FENCE \ 1179eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x42, struct kgsl_syncsource_create_fence) 1180eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1181eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_syncsource_signal_fence { 1182eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1183eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int fence_fd; 1184eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* private: reserved for future use */ 1185eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int __pad[4]; 1186eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1187eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1188eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SYNCSOURCE_SIGNAL_FENCE \ 1189eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x43, struct kgsl_syncsource_signal_fence) 1190eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1191eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1192eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_cff_sync_gpuobj - Argument to IOCTL_KGSL_CFF_SYNC_GPUOBJ 1193eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @offset: Offset into the GPU object to sync 1194eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @length: Number of bytes to sync 1195eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: ID of the GPU object to sync 1196eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1197eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_cff_sync_gpuobj { 1198eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t offset; 1199eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t length; 1200eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1201eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1202eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1203eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_CFF_SYNC_GPUOBJ \ 1204eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x44, struct kgsl_cff_sync_gpuobj) 1205eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1206eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1207eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_alloc - Argument to IOCTL_KGSL_GPUOBJ_ALLOC 1208eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size in bytes of the object to allocate 1209eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: mask of KGSL_MEMFLAG_* bits 1210eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @va_len: Size in bytes of the virtual region to allocate 1211eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @mmapsize: Returns the mmap() size of the object 1212eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: Returns the GPU object ID of the new object 1213eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @metadata_len: Length of the metdata to copy from the user 1214eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @metadata: Pointer to the user specified metadata to store for the object 1215eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1216eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_alloc { 1217eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 1218eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1219eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t va_len; 1220eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t mmapsize; 1221eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1222eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int metadata_len; 1223eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t metadata; 1224eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1225eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1226eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Let the user know that this header supports the gpuobj metadata */ 1227eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUOBJ_ALLOC_METADATA_MAX 64 1228eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1229eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUOBJ_ALLOC \ 1230eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x45, struct kgsl_gpuobj_alloc) 1231eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1232eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1233eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_free - Argument to IOCTL_KGLS_GPUOBJ_FREE 1234eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Mask of: KGSL_GUPOBJ_FREE_ON_EVENT 1235eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @priv: Pointer to the private object if KGSL_GPUOBJ_FREE_ON_EVENT is 1236eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * specified 1237eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: ID of the GPU object to free 1238eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @type: If KGSL_GPUOBJ_FREE_ON_EVENT is specified, the type of asynchronous 1239eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * event to free on 1240eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @len: Length of the data passed in priv 1241eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1242eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_free { 1243eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1244eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t priv; 1245eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1246eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 1247eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int len; 1248eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1249eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1250eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUOBJ_FREE_ON_EVENT 1 1251eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1252eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPU_EVENT_TIMESTAMP 1 1253eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPU_EVENT_FENCE 2 1254eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1255eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1256eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpu_event_timestamp - Specifies a timestamp event to free a GPU 1257eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * object on 1258eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @context_id: ID of the timestamp event to wait for 1259eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @timestamp: Timestamp of the timestamp event to wait for 1260eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1261eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpu_event_timestamp { 1262eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 1263eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 1264eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1265eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1266eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1267eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpu_event_fence - Specifies a fence ID to to free a GPU object on 1268eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @fd: File descriptor for the fence 1269eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1270eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpu_event_fence { 1271eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int fd; 1272eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1273eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1274eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUOBJ_FREE \ 1275eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x46, struct kgsl_gpuobj_free) 1276eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1277eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1278eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_info - argument to IOCTL_KGSL_GPUOBJ_INFO 1279eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpuaddr: GPU address of the object 1280eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Current flags for the object 1281eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size of the object 1282eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @va_len: VA size of the object 1283eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @va_addr: Virtual address of the object (if it is mapped) 1284eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * id - GPU object ID of the object to query 1285eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1286eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_info { 1287eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t gpuaddr; 1288eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1289eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 1290eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t va_len; 1291eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t va_addr; 1292eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1293eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1294eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1295eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUOBJ_INFO \ 1296eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x47, struct kgsl_gpuobj_info) 1297eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1298eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1299eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_import - argument to IOCTL_KGSL_GPUOBJ_IMPORT 1300eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @priv: Pointer to the private data for the import type 1301eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @priv_len: Length of the private data 1302eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Mask of KGSL_MEMFLAG_ flags 1303eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @type: Type of the import (KGSL_USER_MEM_TYPE_*) 1304eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: Returns the ID of the new GPU object 1305eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1306eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_import { 1307eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t priv; 1308eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t priv_len; 1309eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1310eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 1311eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1312eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1313eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1314eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1315eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_import_dma_buf - import a dmabuf object 1316eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @fd: File descriptor for the dma-buf object 1317eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1318eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_import_dma_buf { 1319eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel int fd; 1320eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1321eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1322eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1323eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_import_useraddr - import an object based on a useraddr 1324eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @virtaddr: Virtual address of the object to import 1325eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1326eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_import_useraddr { 1327eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t virtaddr; 1328eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1329eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1330eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUOBJ_IMPORT \ 1331eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x48, struct kgsl_gpuobj_import) 1332eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1333eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1334eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_sync_obj - Individual GPU object to sync 1335eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @offset: Offset within the GPU object to sync 1336eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @length: Number of bytes to sync 1337eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: ID of the GPU object to sync 1338eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @op: Cache operation to execute 1339eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1340eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1341eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_sync_obj { 1342eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t offset; 1343eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t length; 1344eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1345eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int op; 1346eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1347eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1348eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1349eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_sync - Argument for IOCTL_KGSL_GPUOBJ_SYNC 1350eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @objs: Pointer to an array of kgsl_gpuobj_sync_obj structs 1351eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @obj_len: Size of each item in the array 1352eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @count: Number of items in the array 1353eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1354eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1355eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_sync { 1356eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t objs; 1357eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int obj_len; 1358eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int count; 1359eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1360eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1361eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUOBJ_SYNC \ 1362eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x49, struct kgsl_gpuobj_sync) 1363eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1364eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1365eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_command_object - GPU command object 1366eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @offset: GPU address offset of the object 1367eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpuaddr: GPU address of the object 1368eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size of the object 1369eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Current flags for the object 1370eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id - GPU command object ID 1371eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1372eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_command_object { 1373eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t offset; 1374eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t gpuaddr; 1375eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 1376eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int flags; 1377eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1378eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1379eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1380eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1381eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_command_syncpoint - GPU syncpoint object 1382eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @priv: Pointer to the type specific buffer 1383eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size of the type specific buffer 1384eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @type: type of sync point defined here 1385eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1386eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_command_syncpoint { 1387eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t priv; 1388eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 1389eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 1390eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1391eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1392eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1393eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_command_object - Argument for IOCTL_KGSL_GPU_COMMAND 1394eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Current flags for the object 1395eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @cmdlist: List of kgsl_command_objects for submission 1396eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @cmd_size: Size of kgsl_command_objects structure 1397eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @numcmds: Number of kgsl_command_objects in command list 1398eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @objlist: List of kgsl_command_objects for tracking 1399eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @obj_size: Size of kgsl_command_objects structure 1400eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @numobjs: Number of kgsl_command_objects in object list 1401eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @synclist: List of kgsl_command_syncpoints 1402eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sync_size: Size of kgsl_command_syncpoint structure 1403eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @numsyncs: Number of kgsl_command_syncpoints in syncpoint list 1404eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @context_id: Context ID submittin ghte kgsl_gpu_command 1405eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @timestamp: Timestamp for the submitted commands 1406eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1407eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpu_command { 1408eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1409eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t cmdlist; 1410eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int cmdsize; 1411eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numcmds; 1412eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t objlist; 1413eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int objsize; 1414eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numobjs; 1415eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t synclist; 1416eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int syncsize; 1417eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numsyncs; 1418eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 1419eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 1420eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1421eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1422eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPU_COMMAND \ 1423eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x4A, struct kgsl_gpu_command) 1424eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1425eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1426eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_preemption_counters_query - argument to 1427eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_PREEMPTIONCOUNTER_QUERY 1428eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @counters: Return preemption counters array 1429eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size_user: Size allocated by userspace 1430eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size_priority_level: Size of preemption counters for each 1431eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * priority level 1432eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @max_priority_level: Return max number of priority levels 1433eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1434eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Query the available preemption counters. The array counters 1435eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * is used to return preemption counters. The size of the array 1436eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * is passed in so the kernel will only write at most size_user 1437eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * or max available preemption counters. The total number of 1438eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * preemption counters is returned in max_priority_level. If the 1439eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * array or size passed in are invalid, then an error is 1440eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * returned back. 1441eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1442eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_preemption_counters_query { 1443eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t counters; 1444eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int size_user; 1445eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int size_priority_level; 1446eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int max_priority_level; 1447eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1448eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1449eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_PREEMPTIONCOUNTER_QUERY \ 1450eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x4B, struct kgsl_preemption_counters_query) 1451eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1452eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1453eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpuobj_set_info - argument for IOCTL_KGSL_GPUOBJ_SET_INFO 1454eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Flags to indicate which paramaters to change 1455eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @metadata: If KGSL_GPUOBJ_SET_INFO_METADATA is set, a pointer to the new 1456eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * metadata 1457eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: GPU memory object ID to change 1458eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @metadata_len: If KGSL_GPUOBJ_SET_INFO_METADATA is set, the length of the 1459eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * new metadata string 1460eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @type: If KGSL_GPUOBJ_SET_INFO_TYPE is set, the new type of the memory object 1461eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1462eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1463eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUOBJ_SET_INFO_METADATA (1 << 0) 1464eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define KGSL_GPUOBJ_SET_INFO_TYPE (1 << 1) 1465eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1466eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpuobj_set_info { 1467eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1468eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t metadata; 1469eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1470eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int metadata_len; 1471eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int type; 1472eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1473eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1474eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPUOBJ_SET_INFO \ 1475eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x4C, struct kgsl_gpuobj_set_info) 1476eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1477eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1478eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_sparse_phys_alloc - Argument for IOCTL_KGSL_SPARSE_PHYS_ALLOC 1479eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size in bytes to back 1480eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @pagesize: Pagesize alignment required 1481eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Flags for this allocation 1482eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: Returned ID for this allocation 1483eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1484eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sparse_phys_alloc { 1485eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 1486eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t pagesize; 1487eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1488eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1489eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1490eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1491eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SPARSE_PHYS_ALLOC \ 1492eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x50, struct kgsl_sparse_phys_alloc) 1493eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1494eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1495eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_sparse_phys_free - Argument for IOCTL_KGSL_SPARSE_PHYS_FREE 1496eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: ID to free 1497eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1498eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sparse_phys_free { 1499eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1500eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1501eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1502eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SPARSE_PHYS_FREE \ 1503eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x51, struct kgsl_sparse_phys_free) 1504eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1505eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1506eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_sparse_virt_alloc - Argument for IOCTL_KGSL_SPARSE_VIRT_ALLOC 1507eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size in bytes to reserve 1508eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @pagesize: Pagesize alignment required 1509eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Flags for this allocation 1510eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: Returned ID for this allocation 1511eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @gpuaddr: Returned GPU address for this allocation 1512eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1513eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sparse_virt_alloc { 1514eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 1515eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t pagesize; 1516eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1517eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t gpuaddr; 1518eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1519eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1520eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1521eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SPARSE_VIRT_ALLOC \ 1522eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x52, struct kgsl_sparse_virt_alloc) 1523eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1524eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1525eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_sparse_virt_free - Argument for IOCTL_KGSL_SPARSE_VIRT_FREE 1526eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: ID to free 1527eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1528eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sparse_virt_free { 1529eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1530eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1531eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1532eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SPARSE_VIRT_FREE \ 1533eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x53, struct kgsl_sparse_virt_free) 1534eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1535eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1536eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_sparse_binding_object - Argument for kgsl_sparse_bind 1537eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @virtoffset: Offset into the virtual ID 1538eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @physoffset: Offset into the physical ID (bind only) 1539eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size in bytes to reserve 1540eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Flags for this kgsl_sparse_binding_object 1541eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: Physical ID to bind (bind only) 1542eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1543eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sparse_binding_object { 1544eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t virtoffset; 1545eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t physoffset; 1546eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t size; 1547eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1548eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1549eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1550eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1551eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1552eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_sparse_bind - Argument for IOCTL_KGSL_SPARSE_BIND 1553eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @list: List of kgsl_sparse_bind_objects to bind/unbind 1554eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: Virtual ID to bind/unbind 1555eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @size: Size of kgsl_sparse_bind_object 1556eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @count: Number of elements in list 1557eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1558eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1559eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_sparse_bind { 1560eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t list; 1561eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1562eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int size; 1563eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int count; 1564eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1565eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1566eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_SPARSE_BIND \ 1567eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOW(KGSL_IOC_TYPE, 0x54, struct kgsl_sparse_bind) 1568eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1569eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/** 1570eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct kgsl_gpu_sparse_command - Argument for 1571eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IOCTL_KGSL_GPU_SPARSE_COMMAND 1572eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @flags: Current flags for the object 1573eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sparselist: List of kgsl_sparse_binding_object to bind/unbind 1574eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @synclist: List of kgsl_command_syncpoints 1575eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sparsesize: Size of kgsl_sparse_binding_object 1576eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @numsparse: Number of elements in list 1577eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @sync_size: Size of kgsl_command_syncpoint structure 1578eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @numsyncs: Number of kgsl_command_syncpoints in syncpoint list 1579eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @context_id: Context ID submitting the kgsl_gpu_command 1580eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @timestamp: Timestamp for the submitted commands 1581eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * @id: Virtual ID to bind/unbind 1582eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 1583eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct kgsl_gpu_sparse_command { 1584eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t flags; 1585eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t sparselist; 1586eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel uint64_t synclist; 1587eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int sparsesize; 1588eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numsparse; 1589eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int syncsize; 1590eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int numsyncs; 1591eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int context_id; 1592eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int timestamp; 1593eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel unsigned int id; 1594eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 1595eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1596eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define IOCTL_KGSL_GPU_SPARSE_COMMAND \ 1597eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel _IOWR(KGSL_IOC_TYPE, 0x55, struct kgsl_gpu_sparse_command) 1598eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 1599eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#endif /* _MSM_KGSL_H */ 1600