1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * (C) COPYRIGHT 2017 ARM Limited. All rights reserved. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software and is provided to you under the terms of the 6*4882a593Smuzhiyun * GNU General Public License version 2 as published by the Free Software 7*4882a593Smuzhiyun * Foundation, and any use by you of this program is subject to the terms 8*4882a593Smuzhiyun * of such GNU licence. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * A copy of the licence is included with the program, and can also be obtained 11*4882a593Smuzhiyun * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 12*4882a593Smuzhiyun * Boston, MA 02110-1301, USA. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #ifndef _KBASE_IOCTL_H_ 19*4882a593Smuzhiyun #define _KBASE_IOCTL_H_ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #ifdef __cpluscplus 22*4882a593Smuzhiyun extern "C" { 23*4882a593Smuzhiyun #endif 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #include <linux/types.h> 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define KBASE_IOCTL_TYPE 0x80 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #ifdef ANDROID 30*4882a593Smuzhiyun /* Android's definition of ioctl is incorrect, specifying the type argument as 31*4882a593Smuzhiyun * 'int'. This creates a warning when using _IOWR (as the top bit is set). Work 32*4882a593Smuzhiyun * round this by redefining _IOC to include a case to 'int'. 33*4882a593Smuzhiyun */ 34*4882a593Smuzhiyun #undef _IOC 35*4882a593Smuzhiyun #define _IOC(dir, type, nr, size) \ 36*4882a593Smuzhiyun ((int)(((dir) << _IOC_DIRSHIFT) | ((type) << _IOC_TYPESHIFT) | \ 37*4882a593Smuzhiyun ((nr) << _IOC_NRSHIFT) | ((size) << _IOC_SIZESHIFT))) 38*4882a593Smuzhiyun #endif 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /** 41*4882a593Smuzhiyun * struct kbase_ioctl_version_check - Check version compatibility with kernel 42*4882a593Smuzhiyun * 43*4882a593Smuzhiyun * @major: Major version number 44*4882a593Smuzhiyun * @minor: Minor version number 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun struct kbase_ioctl_version_check { 47*4882a593Smuzhiyun __u16 major; 48*4882a593Smuzhiyun __u16 minor; 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #define KBASE_IOCTL_VERSION_CHECK \ 52*4882a593Smuzhiyun _IOWR(KBASE_IOCTL_TYPE, 0, struct kbase_ioctl_version_check) 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /** 55*4882a593Smuzhiyun * struct kbase_ioctl_set_flags - Set kernel context creation flags 56*4882a593Smuzhiyun * 57*4882a593Smuzhiyun * @create_flags: Flags - see base_context_create_flags 58*4882a593Smuzhiyun */ 59*4882a593Smuzhiyun struct kbase_ioctl_set_flags { 60*4882a593Smuzhiyun __u32 create_flags; 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define KBASE_IOCTL_SET_FLAGS \ 64*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 1, struct kbase_ioctl_set_flags) 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /** 67*4882a593Smuzhiyun * struct kbase_ioctl_job_submit - Submit jobs/atoms to the kernel 68*4882a593Smuzhiyun * 69*4882a593Smuzhiyun * @addr: Memory address of an array of struct base_jd_atom_v2 70*4882a593Smuzhiyun * @nr_atoms: Number of entries in the array 71*4882a593Smuzhiyun * @stride: sizeof(struct base_jd_atom_v2) 72*4882a593Smuzhiyun */ 73*4882a593Smuzhiyun struct kbase_ioctl_job_submit { 74*4882a593Smuzhiyun union kbase_pointer addr; 75*4882a593Smuzhiyun __u32 nr_atoms; 76*4882a593Smuzhiyun __u32 stride; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define KBASE_IOCTL_JOB_SUBMIT \ 80*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 2, struct kbase_ioctl_job_submit) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /** 83*4882a593Smuzhiyun * struct kbase_ioctl_get_gpuprops - Read GPU properties from the kernel 84*4882a593Smuzhiyun * 85*4882a593Smuzhiyun * @buffer: Pointer to the buffer to store properties into 86*4882a593Smuzhiyun * @size: Size of the buffer 87*4882a593Smuzhiyun * @flags: Flags - must be zero for now 88*4882a593Smuzhiyun * 89*4882a593Smuzhiyun * The ioctl will return the number of bytes stored into @buffer or an error 90*4882a593Smuzhiyun * on failure (e.g. @size is too small). If @size is specified as 0 then no 91*4882a593Smuzhiyun * data will be written but the return value will be the number of bytes needed 92*4882a593Smuzhiyun * for all the properties. 93*4882a593Smuzhiyun * 94*4882a593Smuzhiyun * @flags may be used in the future to request a different format for the 95*4882a593Smuzhiyun * buffer. With @flags == 0 the following format is used. 96*4882a593Smuzhiyun * 97*4882a593Smuzhiyun * The buffer will be filled with pairs of values, a u32 key identifying the 98*4882a593Smuzhiyun * property followed by the value. The size of the value is identified using 99*4882a593Smuzhiyun * the bottom bits of the key. The value then immediately followed the key and 100*4882a593Smuzhiyun * is tightly packed (there is no padding). All keys and values are 101*4882a593Smuzhiyun * little-endian. 102*4882a593Smuzhiyun * 103*4882a593Smuzhiyun * 00 = u8 104*4882a593Smuzhiyun * 01 = u16 105*4882a593Smuzhiyun * 10 = u32 106*4882a593Smuzhiyun * 11 = u64 107*4882a593Smuzhiyun */ 108*4882a593Smuzhiyun struct kbase_ioctl_get_gpuprops { 109*4882a593Smuzhiyun union kbase_pointer buffer; 110*4882a593Smuzhiyun __u32 size; 111*4882a593Smuzhiyun __u32 flags; 112*4882a593Smuzhiyun }; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun #define KBASE_IOCTL_GET_GPUPROPS \ 115*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 3, struct kbase_ioctl_get_gpuprops) 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun #define KBASE_IOCTL_POST_TERM \ 118*4882a593Smuzhiyun _IO(KBASE_IOCTL_TYPE, 4) 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /** 121*4882a593Smuzhiyun * union kbase_ioctl_mem_alloc - Allocate memory on the GPU 122*4882a593Smuzhiyun * 123*4882a593Smuzhiyun * @va_pages: The number of pages of virtual address space to reserve 124*4882a593Smuzhiyun * @commit_pages: The number of physical pages to allocate 125*4882a593Smuzhiyun * @extent: The number of extra pages to allocate on each GPU fault which grows 126*4882a593Smuzhiyun * the region 127*4882a593Smuzhiyun * @flags: Flags 128*4882a593Smuzhiyun * @gpu_va: The GPU virtual address which is allocated 129*4882a593Smuzhiyun * 130*4882a593Smuzhiyun * @in: Input parameters 131*4882a593Smuzhiyun * @out: Output parameters 132*4882a593Smuzhiyun */ 133*4882a593Smuzhiyun union kbase_ioctl_mem_alloc { 134*4882a593Smuzhiyun struct { 135*4882a593Smuzhiyun __u64 va_pages; 136*4882a593Smuzhiyun __u64 commit_pages; 137*4882a593Smuzhiyun __u64 extent; 138*4882a593Smuzhiyun __u64 flags; 139*4882a593Smuzhiyun } in; 140*4882a593Smuzhiyun struct { 141*4882a593Smuzhiyun __u64 flags; 142*4882a593Smuzhiyun __u64 gpu_va; 143*4882a593Smuzhiyun } out; 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_ALLOC \ 147*4882a593Smuzhiyun _IOWR(KBASE_IOCTL_TYPE, 5, union kbase_ioctl_mem_alloc) 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /** 150*4882a593Smuzhiyun * struct kbase_ioctl_mem_query - Query properties of a GPU memory region 151*4882a593Smuzhiyun * @gpu_addr: A GPU address contained within the region 152*4882a593Smuzhiyun * @query: The type of query 153*4882a593Smuzhiyun * @value: The result of the query 154*4882a593Smuzhiyun * 155*4882a593Smuzhiyun * Use a %KBASE_MEM_QUERY_xxx flag as input for @query. 156*4882a593Smuzhiyun * 157*4882a593Smuzhiyun * @in: Input parameters 158*4882a593Smuzhiyun * @out: Output parameters 159*4882a593Smuzhiyun */ 160*4882a593Smuzhiyun union kbase_ioctl_mem_query { 161*4882a593Smuzhiyun struct { 162*4882a593Smuzhiyun __u64 gpu_addr; 163*4882a593Smuzhiyun __u64 query; 164*4882a593Smuzhiyun } in; 165*4882a593Smuzhiyun struct { 166*4882a593Smuzhiyun __u64 value; 167*4882a593Smuzhiyun } out; 168*4882a593Smuzhiyun }; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_QUERY \ 171*4882a593Smuzhiyun _IOWR(KBASE_IOCTL_TYPE, 6, union kbase_ioctl_mem_query) 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun #define KBASE_MEM_QUERY_COMMIT_SIZE 1 174*4882a593Smuzhiyun #define KBASE_MEM_QUERY_VA_SIZE 2 175*4882a593Smuzhiyun #define KBASE_MEM_QUERY_FLAGS 3 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /** 178*4882a593Smuzhiyun * struct kbase_ioctl_mem_free - Free a memory region 179*4882a593Smuzhiyun * @gpu_addr: Handle to the region to free 180*4882a593Smuzhiyun */ 181*4882a593Smuzhiyun struct kbase_ioctl_mem_free { 182*4882a593Smuzhiyun __u64 gpu_addr; 183*4882a593Smuzhiyun }; 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_FREE \ 186*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 7, struct kbase_ioctl_mem_free) 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun /** 189*4882a593Smuzhiyun * struct kbase_ioctl_hwcnt_reader_setup - Setup HWC dumper/reader 190*4882a593Smuzhiyun * @buffer_count: requested number of dumping buffers 191*4882a593Smuzhiyun * @jm_bm: counters selection bitmask (JM) 192*4882a593Smuzhiyun * @shader_bm: counters selection bitmask (Shader) 193*4882a593Smuzhiyun * @tiler_bm: counters selection bitmask (Tiler) 194*4882a593Smuzhiyun * @mmu_l2_bm: counters selection bitmask (MMU_L2) 195*4882a593Smuzhiyun * 196*4882a593Smuzhiyun * A fd is returned from the ioctl if successful, or a negative value on error 197*4882a593Smuzhiyun */ 198*4882a593Smuzhiyun struct kbase_ioctl_hwcnt_reader_setup { 199*4882a593Smuzhiyun __u32 buffer_count; 200*4882a593Smuzhiyun __u32 jm_bm; 201*4882a593Smuzhiyun __u32 shader_bm; 202*4882a593Smuzhiyun __u32 tiler_bm; 203*4882a593Smuzhiyun __u32 mmu_l2_bm; 204*4882a593Smuzhiyun }; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun #define KBASE_IOCTL_HWCNT_READER_SETUP \ 207*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 8, struct kbase_ioctl_hwcnt_reader_setup) 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun /** 210*4882a593Smuzhiyun * struct kbase_ioctl_hwcnt_enable - Enable hardware counter collection 211*4882a593Smuzhiyun * @dump_buffer: GPU address to write counters to 212*4882a593Smuzhiyun * @jm_bm: counters selection bitmask (JM) 213*4882a593Smuzhiyun * @shader_bm: counters selection bitmask (Shader) 214*4882a593Smuzhiyun * @tiler_bm: counters selection bitmask (Tiler) 215*4882a593Smuzhiyun * @mmu_l2_bm: counters selection bitmask (MMU_L2) 216*4882a593Smuzhiyun */ 217*4882a593Smuzhiyun struct kbase_ioctl_hwcnt_enable { 218*4882a593Smuzhiyun __u64 dump_buffer; 219*4882a593Smuzhiyun __u32 jm_bm; 220*4882a593Smuzhiyun __u32 shader_bm; 221*4882a593Smuzhiyun __u32 tiler_bm; 222*4882a593Smuzhiyun __u32 mmu_l2_bm; 223*4882a593Smuzhiyun }; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun #define KBASE_IOCTL_HWCNT_ENABLE \ 226*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 9, struct kbase_ioctl_hwcnt_enable) 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun #define KBASE_IOCTL_HWCNT_DUMP \ 229*4882a593Smuzhiyun _IO(KBASE_IOCTL_TYPE, 10) 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun #define KBASE_IOCTL_HWCNT_CLEAR \ 232*4882a593Smuzhiyun _IO(KBASE_IOCTL_TYPE, 11) 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun /** 235*4882a593Smuzhiyun * struct kbase_ioctl_disjoint_query - Query the disjoint counter 236*4882a593Smuzhiyun * @counter: A counter of disjoint events in the kernel 237*4882a593Smuzhiyun */ 238*4882a593Smuzhiyun struct kbase_ioctl_disjoint_query { 239*4882a593Smuzhiyun __u32 counter; 240*4882a593Smuzhiyun }; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun #define KBASE_IOCTL_DISJOINT_QUERY \ 243*4882a593Smuzhiyun _IOR(KBASE_IOCTL_TYPE, 12, struct kbase_ioctl_disjoint_query) 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /** 246*4882a593Smuzhiyun * struct kbase_ioctl_get_ddk_version - Query the kernel version 247*4882a593Smuzhiyun * @version_buffer: Buffer to receive the kernel version string 248*4882a593Smuzhiyun * @size: Size of the buffer 249*4882a593Smuzhiyun * 250*4882a593Smuzhiyun * The ioctl will return the number of bytes written into version_buffer 251*4882a593Smuzhiyun * (which includes a NULL byte) or a negative error code 252*4882a593Smuzhiyun */ 253*4882a593Smuzhiyun struct kbase_ioctl_get_ddk_version { 254*4882a593Smuzhiyun union kbase_pointer version_buffer; 255*4882a593Smuzhiyun __u32 size; 256*4882a593Smuzhiyun }; 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #define KBASE_IOCTL_GET_DDK_VERSION \ 259*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 13, struct kbase_ioctl_get_ddk_version) 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun /** 262*4882a593Smuzhiyun * struct kbase_ioctl_mem_jit_init - Initialise the JIT memory allocator 263*4882a593Smuzhiyun * 264*4882a593Smuzhiyun * @va_pages: Number of VA pages to reserve for JIT 265*4882a593Smuzhiyun * 266*4882a593Smuzhiyun * Note that depending on the VA size of the application and GPU, the value 267*4882a593Smuzhiyun * specified in @va_pages may be ignored. 268*4882a593Smuzhiyun */ 269*4882a593Smuzhiyun struct kbase_ioctl_mem_jit_init { 270*4882a593Smuzhiyun __u64 va_pages; 271*4882a593Smuzhiyun }; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_JIT_INIT \ 274*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 14, struct kbase_ioctl_mem_jit_init) 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun /** 277*4882a593Smuzhiyun * struct kbase_ioctl_mem_sync - Perform cache maintenance on memory 278*4882a593Smuzhiyun * 279*4882a593Smuzhiyun * @handle: GPU memory handle (GPU VA) 280*4882a593Smuzhiyun * @user_addr: The address where it is mapped in user space 281*4882a593Smuzhiyun * @size: The number of bytes to synchronise 282*4882a593Smuzhiyun * @type: The direction to synchronise: 0 is sync to memory (clean), 283*4882a593Smuzhiyun * 1 is sync from memory (invalidate). Use the BASE_SYNCSET_OP_xxx constants. 284*4882a593Smuzhiyun * @padding: Padding to round up to a multiple of 8 bytes, must be zero 285*4882a593Smuzhiyun */ 286*4882a593Smuzhiyun struct kbase_ioctl_mem_sync { 287*4882a593Smuzhiyun __u64 handle; 288*4882a593Smuzhiyun __u64 user_addr; 289*4882a593Smuzhiyun __u64 size; 290*4882a593Smuzhiyun __u8 type; 291*4882a593Smuzhiyun __u8 padding[7]; 292*4882a593Smuzhiyun }; 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_SYNC \ 295*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 15, struct kbase_ioctl_mem_sync) 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /** 298*4882a593Smuzhiyun * union kbase_ioctl_mem_find_cpu_offset - Find the offset of a CPU pointer 299*4882a593Smuzhiyun * 300*4882a593Smuzhiyun * @gpu_addr: The GPU address of the memory region 301*4882a593Smuzhiyun * @cpu_addr: The CPU address to locate 302*4882a593Smuzhiyun * @size: A size in bytes to validate is contained within the region 303*4882a593Smuzhiyun * @offset: The offset from the start of the memory region to @cpu_addr 304*4882a593Smuzhiyun * 305*4882a593Smuzhiyun * @in: Input parameters 306*4882a593Smuzhiyun * @out: Output parameters 307*4882a593Smuzhiyun */ 308*4882a593Smuzhiyun union kbase_ioctl_mem_find_cpu_offset { 309*4882a593Smuzhiyun struct { 310*4882a593Smuzhiyun __u64 gpu_addr; 311*4882a593Smuzhiyun __u64 cpu_addr; 312*4882a593Smuzhiyun __u64 size; 313*4882a593Smuzhiyun } in; 314*4882a593Smuzhiyun struct { 315*4882a593Smuzhiyun __u64 offset; 316*4882a593Smuzhiyun } out; 317*4882a593Smuzhiyun }; 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_FIND_CPU_OFFSET \ 320*4882a593Smuzhiyun _IOWR(KBASE_IOCTL_TYPE, 16, union kbase_ioctl_mem_find_cpu_offset) 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun /** 323*4882a593Smuzhiyun * struct kbase_ioctl_get_context_id - Get the kernel context ID 324*4882a593Smuzhiyun * 325*4882a593Smuzhiyun * @id: The kernel context ID 326*4882a593Smuzhiyun */ 327*4882a593Smuzhiyun struct kbase_ioctl_get_context_id { 328*4882a593Smuzhiyun int id; /* This should really be __u32, but see GPUCORE-10048 */ 329*4882a593Smuzhiyun }; 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun #define KBASE_IOCTL_GET_CONTEXT_ID \ 332*4882a593Smuzhiyun _IOR(KBASE_IOCTL_TYPE, 17, struct kbase_ioctl_get_context_id) 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun /** 335*4882a593Smuzhiyun * struct kbase_ioctl_tlstream_acquire - Acquire a tlstream fd 336*4882a593Smuzhiyun * 337*4882a593Smuzhiyun * @flags: Flags 338*4882a593Smuzhiyun * 339*4882a593Smuzhiyun * The ioctl returns a file descriptor when successful 340*4882a593Smuzhiyun */ 341*4882a593Smuzhiyun struct kbase_ioctl_tlstream_acquire { 342*4882a593Smuzhiyun __u32 flags; 343*4882a593Smuzhiyun }; 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun #define KBASE_IOCTL_TLSTREAM_ACQUIRE \ 346*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 18, struct kbase_ioctl_tlstream_acquire) 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun #define KBASE_IOCTL_TLSTREAM_FLUSH \ 349*4882a593Smuzhiyun _IO(KBASE_IOCTL_TYPE, 19) 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun /** 352*4882a593Smuzhiyun * struct kbase_ioctl_mem_commit - Change the amount of memory backing a region 353*4882a593Smuzhiyun * 354*4882a593Smuzhiyun * @gpu_addr: The memory region to modify 355*4882a593Smuzhiyun * @pages: The number of physical pages that should be present 356*4882a593Smuzhiyun * 357*4882a593Smuzhiyun * The ioctl may return on the following error codes or 0 for success: 358*4882a593Smuzhiyun * -ENOMEM: Out of memory 359*4882a593Smuzhiyun * -EINVAL: Invalid arguments 360*4882a593Smuzhiyun */ 361*4882a593Smuzhiyun struct kbase_ioctl_mem_commit { 362*4882a593Smuzhiyun __u64 gpu_addr; 363*4882a593Smuzhiyun __u64 pages; 364*4882a593Smuzhiyun }; 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_COMMIT \ 367*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 20, struct kbase_ioctl_mem_commit) 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun /** 370*4882a593Smuzhiyun * union kbase_ioctl_mem_alias - Create an alias of memory regions 371*4882a593Smuzhiyun * @flags: Flags, see BASE_MEM_xxx 372*4882a593Smuzhiyun * @stride: Bytes between start of each memory region 373*4882a593Smuzhiyun * @nents: The number of regions to pack together into the alias 374*4882a593Smuzhiyun * @aliasing_info: Pointer to an array of struct base_mem_aliasing_info 375*4882a593Smuzhiyun * @gpu_va: Address of the new alias 376*4882a593Smuzhiyun * @va_pages: Size of the new alias 377*4882a593Smuzhiyun * 378*4882a593Smuzhiyun * @in: Input parameters 379*4882a593Smuzhiyun * @out: Output parameters 380*4882a593Smuzhiyun */ 381*4882a593Smuzhiyun union kbase_ioctl_mem_alias { 382*4882a593Smuzhiyun struct { 383*4882a593Smuzhiyun __u64 flags; 384*4882a593Smuzhiyun __u64 stride; 385*4882a593Smuzhiyun __u64 nents; 386*4882a593Smuzhiyun union kbase_pointer aliasing_info; 387*4882a593Smuzhiyun } in; 388*4882a593Smuzhiyun struct { 389*4882a593Smuzhiyun __u64 flags; 390*4882a593Smuzhiyun __u64 gpu_va; 391*4882a593Smuzhiyun __u64 va_pages; 392*4882a593Smuzhiyun } out; 393*4882a593Smuzhiyun }; 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_ALIAS \ 396*4882a593Smuzhiyun _IOWR(KBASE_IOCTL_TYPE, 21, union kbase_ioctl_mem_alias) 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /** 399*4882a593Smuzhiyun * union kbase_ioctl_mem_import - Import memory for use by the GPU 400*4882a593Smuzhiyun * @flags: Flags, see BASE_MEM_xxx 401*4882a593Smuzhiyun * @phandle: Handle to the external memory 402*4882a593Smuzhiyun * @type: Type of external memory, see base_mem_import_type 403*4882a593Smuzhiyun * @padding: Amount of extra VA pages to append to the imported buffer 404*4882a593Smuzhiyun * @gpu_va: Address of the new alias 405*4882a593Smuzhiyun * @va_pages: Size of the new alias 406*4882a593Smuzhiyun * 407*4882a593Smuzhiyun * @in: Input parameters 408*4882a593Smuzhiyun * @out: Output parameters 409*4882a593Smuzhiyun */ 410*4882a593Smuzhiyun union kbase_ioctl_mem_import { 411*4882a593Smuzhiyun struct { 412*4882a593Smuzhiyun __u64 flags; 413*4882a593Smuzhiyun union kbase_pointer phandle; 414*4882a593Smuzhiyun __u32 type; 415*4882a593Smuzhiyun __u32 padding; 416*4882a593Smuzhiyun } in; 417*4882a593Smuzhiyun struct { 418*4882a593Smuzhiyun __u64 flags; 419*4882a593Smuzhiyun __u64 gpu_va; 420*4882a593Smuzhiyun __u64 va_pages; 421*4882a593Smuzhiyun } out; 422*4882a593Smuzhiyun }; 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_IMPORT \ 425*4882a593Smuzhiyun _IOWR(KBASE_IOCTL_TYPE, 22, union kbase_ioctl_mem_import) 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun /** 428*4882a593Smuzhiyun * struct kbase_ioctl_mem_flags_change - Change the flags for a memory region 429*4882a593Smuzhiyun * @gpu_va: The GPU region to modify 430*4882a593Smuzhiyun * @flags: The new flags to set 431*4882a593Smuzhiyun * @mask: Mask of the flags to modify 432*4882a593Smuzhiyun */ 433*4882a593Smuzhiyun struct kbase_ioctl_mem_flags_change { 434*4882a593Smuzhiyun __u64 gpu_va; 435*4882a593Smuzhiyun __u64 flags; 436*4882a593Smuzhiyun __u64 mask; 437*4882a593Smuzhiyun }; 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_FLAGS_CHANGE \ 440*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 23, struct kbase_ioctl_mem_flags_change) 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun /** 443*4882a593Smuzhiyun * struct kbase_ioctl_stream_create - Create a synchronisation stream 444*4882a593Smuzhiyun * @name: A name to identify this stream. Must be NULL-terminated. 445*4882a593Smuzhiyun * 446*4882a593Smuzhiyun * Note that this is also called a "timeline", but is named stream to avoid 447*4882a593Smuzhiyun * confusion with other uses of the word. 448*4882a593Smuzhiyun * 449*4882a593Smuzhiyun * Unused bytes in @name (after the first NULL byte) must be also be NULL bytes. 450*4882a593Smuzhiyun * 451*4882a593Smuzhiyun * The ioctl returns a file descriptor. 452*4882a593Smuzhiyun */ 453*4882a593Smuzhiyun struct kbase_ioctl_stream_create { 454*4882a593Smuzhiyun char name[32]; 455*4882a593Smuzhiyun }; 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun #define KBASE_IOCTL_STREAM_CREATE \ 458*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 24, struct kbase_ioctl_stream_create) 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun /** 461*4882a593Smuzhiyun * struct kbase_ioctl_fence_validate - Validate a fd refers to a fence 462*4882a593Smuzhiyun * @fd: The file descriptor to validate 463*4882a593Smuzhiyun */ 464*4882a593Smuzhiyun struct kbase_ioctl_fence_validate { 465*4882a593Smuzhiyun int fd; 466*4882a593Smuzhiyun }; 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun #define KBASE_IOCTL_FENCE_VALIDATE \ 469*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 25, struct kbase_ioctl_fence_validate) 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun /** 472*4882a593Smuzhiyun * struct kbase_ioctl_get_profiling_controls - Get the profiling controls 473*4882a593Smuzhiyun * @count: The size of @buffer in u32 words 474*4882a593Smuzhiyun * @buffer: The buffer to receive the profiling controls 475*4882a593Smuzhiyun */ 476*4882a593Smuzhiyun struct kbase_ioctl_get_profiling_controls { 477*4882a593Smuzhiyun union kbase_pointer buffer; 478*4882a593Smuzhiyun __u32 count; 479*4882a593Smuzhiyun }; 480*4882a593Smuzhiyun 481*4882a593Smuzhiyun #define KBASE_IOCTL_GET_PROFILING_CONTROLS \ 482*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 26, struct kbase_ioctl_get_profiling_controls) 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun /** 485*4882a593Smuzhiyun * struct kbase_ioctl_mem_profile_add - Provide profiling information to kernel 486*4882a593Smuzhiyun * @buffer: Pointer to the information 487*4882a593Smuzhiyun * @len: Length 488*4882a593Smuzhiyun * @padding: Padding 489*4882a593Smuzhiyun * 490*4882a593Smuzhiyun * The data provided is accessible through a debugfs file 491*4882a593Smuzhiyun */ 492*4882a593Smuzhiyun struct kbase_ioctl_mem_profile_add { 493*4882a593Smuzhiyun union kbase_pointer buffer; 494*4882a593Smuzhiyun __u32 len; 495*4882a593Smuzhiyun __u32 padding; 496*4882a593Smuzhiyun }; 497*4882a593Smuzhiyun 498*4882a593Smuzhiyun #define KBASE_IOCTL_MEM_PROFILE_ADD \ 499*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 27, struct kbase_ioctl_mem_profile_add) 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun /** 502*4882a593Smuzhiyun * struct kbase_ioctl_soft_event_update - Update the status of a soft-event 503*4882a593Smuzhiyun * @event: GPU address of the event which has been updated 504*4882a593Smuzhiyun * @new_status: The new status to set 505*4882a593Smuzhiyun * @flags: Flags for future expansion 506*4882a593Smuzhiyun */ 507*4882a593Smuzhiyun struct kbase_ioctl_soft_event_update { 508*4882a593Smuzhiyun __u64 event; 509*4882a593Smuzhiyun __u32 new_status; 510*4882a593Smuzhiyun __u32 flags; 511*4882a593Smuzhiyun }; 512*4882a593Smuzhiyun 513*4882a593Smuzhiyun #define KBASE_IOCTL_SOFT_EVENT_UPDATE \ 514*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TYPE, 28, struct kbase_ioctl_soft_event_update) 515*4882a593Smuzhiyun 516*4882a593Smuzhiyun /*************** 517*4882a593Smuzhiyun * test ioctls * 518*4882a593Smuzhiyun ***************/ 519*4882a593Smuzhiyun #if MALI_UNIT_TEST 520*4882a593Smuzhiyun /* These ioctls are purely for test purposes and are not used in the production 521*4882a593Smuzhiyun * driver, they therefore may change without notice 522*4882a593Smuzhiyun */ 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun #define KBASE_IOCTL_TEST_TYPE (KBASE_IOCTL_TYPE + 1) 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun /** 527*4882a593Smuzhiyun * struct kbase_ioctl_tlstream_test - Start a timeline stream test 528*4882a593Smuzhiyun * 529*4882a593Smuzhiyun * @tpw_count: number of trace point writers in each context 530*4882a593Smuzhiyun * @msg_delay: time delay between tracepoints from one writer in milliseconds 531*4882a593Smuzhiyun * @msg_count: number of trace points written by one writer 532*4882a593Smuzhiyun * @aux_msg: if non-zero aux messages will be included 533*4882a593Smuzhiyun */ 534*4882a593Smuzhiyun struct kbase_ioctl_tlstream_test { 535*4882a593Smuzhiyun __u32 tpw_count; 536*4882a593Smuzhiyun __u32 msg_delay; 537*4882a593Smuzhiyun __u32 msg_count; 538*4882a593Smuzhiyun __u32 aux_msg; 539*4882a593Smuzhiyun }; 540*4882a593Smuzhiyun 541*4882a593Smuzhiyun #define KBASE_IOCTL_TLSTREAM_TEST \ 542*4882a593Smuzhiyun _IOW(KBASE_IOCTL_TEST_TYPE, 1, struct kbase_ioctl_tlstream_test) 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun /** 545*4882a593Smuzhiyun * struct kbase_ioctl_tlstream_stats - Read tlstream stats for test purposes 546*4882a593Smuzhiyun * @bytes_collected: number of bytes read by user 547*4882a593Smuzhiyun * @bytes_generated: number of bytes generated by tracepoints 548*4882a593Smuzhiyun */ 549*4882a593Smuzhiyun struct kbase_ioctl_tlstream_stats { 550*4882a593Smuzhiyun __u32 bytes_collected; 551*4882a593Smuzhiyun __u32 bytes_generated; 552*4882a593Smuzhiyun }; 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun #define KBASE_IOCTL_TLSTREAM_STATS \ 555*4882a593Smuzhiyun _IOR(KBASE_IOCTL_TEST_TYPE, 2, struct kbase_ioctl_tlstream_stats) 556*4882a593Smuzhiyun 557*4882a593Smuzhiyun #endif 558*4882a593Smuzhiyun 559*4882a593Smuzhiyun /********************************** 560*4882a593Smuzhiyun * Definitions for GPU properties * 561*4882a593Smuzhiyun **********************************/ 562*4882a593Smuzhiyun #define KBASE_GPUPROP_VALUE_SIZE_U8 (0x0) 563*4882a593Smuzhiyun #define KBASE_GPUPROP_VALUE_SIZE_U16 (0x1) 564*4882a593Smuzhiyun #define KBASE_GPUPROP_VALUE_SIZE_U32 (0x2) 565*4882a593Smuzhiyun #define KBASE_GPUPROP_VALUE_SIZE_U64 (0x3) 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun #define KBASE_GPUPROP_PRODUCT_ID 1 568*4882a593Smuzhiyun #define KBASE_GPUPROP_VERSION_STATUS 2 569*4882a593Smuzhiyun #define KBASE_GPUPROP_MINOR_REVISION 3 570*4882a593Smuzhiyun #define KBASE_GPUPROP_MAJOR_REVISION 4 571*4882a593Smuzhiyun #define KBASE_GPUPROP_GPU_SPEED_MHZ 5 572*4882a593Smuzhiyun #define KBASE_GPUPROP_GPU_FREQ_KHZ_MAX 6 573*4882a593Smuzhiyun #define KBASE_GPUPROP_GPU_FREQ_KHZ_MIN 7 574*4882a593Smuzhiyun #define KBASE_GPUPROP_LOG2_PROGRAM_COUNTER_SIZE 8 575*4882a593Smuzhiyun #define KBASE_GPUPROP_TEXTURE_FEATURES_0 9 576*4882a593Smuzhiyun #define KBASE_GPUPROP_TEXTURE_FEATURES_1 10 577*4882a593Smuzhiyun #define KBASE_GPUPROP_TEXTURE_FEATURES_2 11 578*4882a593Smuzhiyun #define KBASE_GPUPROP_GPU_AVAILABLE_MEMORY_SIZE 12 579*4882a593Smuzhiyun 580*4882a593Smuzhiyun #define KBASE_GPUPROP_L2_LOG2_LINE_SIZE 13 581*4882a593Smuzhiyun #define KBASE_GPUPROP_L2_LOG2_CACHE_SIZE 14 582*4882a593Smuzhiyun #define KBASE_GPUPROP_L2_NUM_L2_SLICES 15 583*4882a593Smuzhiyun 584*4882a593Smuzhiyun #define KBASE_GPUPROP_TILER_BIN_SIZE_BYTES 16 585*4882a593Smuzhiyun #define KBASE_GPUPROP_TILER_MAX_ACTIVE_LEVELS 17 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun #define KBASE_GPUPROP_MAX_THREADS 18 588*4882a593Smuzhiyun #define KBASE_GPUPROP_MAX_WORKGROUP_SIZE 19 589*4882a593Smuzhiyun #define KBASE_GPUPROP_MAX_BARRIER_SIZE 20 590*4882a593Smuzhiyun #define KBASE_GPUPROP_MAX_REGISTERS 21 591*4882a593Smuzhiyun #define KBASE_GPUPROP_MAX_TASK_QUEUE 22 592*4882a593Smuzhiyun #define KBASE_GPUPROP_MAX_THREAD_GROUP_SPLIT 23 593*4882a593Smuzhiyun #define KBASE_GPUPROP_IMPL_TECH 24 594*4882a593Smuzhiyun 595*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_SHADER_PRESENT 25 596*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_TILER_PRESENT 26 597*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_L2_PRESENT 27 598*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_STACK_PRESENT 28 599*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_L2_FEATURES 29 600*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_SUSPEND_SIZE 30 601*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_MEM_FEATURES 31 602*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_MMU_FEATURES 32 603*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_AS_PRESENT 33 604*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_PRESENT 34 605*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_0 35 606*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_1 36 607*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_2 37 608*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_3 38 609*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_4 39 610*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_5 40 611*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_6 41 612*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_7 42 613*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_8 43 614*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_9 44 615*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_10 45 616*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_11 46 617*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_12 47 618*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_13 48 619*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_14 49 620*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_JS_FEATURES_15 50 621*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_TILER_FEATURES 51 622*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_TEXTURE_FEATURES_0 52 623*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_TEXTURE_FEATURES_1 53 624*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_TEXTURE_FEATURES_2 54 625*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_GPU_ID 55 626*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_THREAD_MAX_THREADS 56 627*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_THREAD_MAX_WORKGROUP_SIZE 57 628*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_THREAD_MAX_BARRIER_SIZE 58 629*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_THREAD_FEATURES 59 630*4882a593Smuzhiyun #define KBASE_GPUPROP_RAW_COHERENCY_MODE 60 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_NUM_GROUPS 61 633*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_NUM_CORE_GROUPS 62 634*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_COHERENCY 63 635*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_0 64 636*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_1 65 637*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_2 66 638*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_3 67 639*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_4 68 640*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_5 69 641*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_6 70 642*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_7 71 643*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_8 72 644*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_9 73 645*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_10 74 646*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_11 75 647*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_12 76 648*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_13 77 649*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_14 78 650*4882a593Smuzhiyun #define KBASE_GPUPROP_COHERENCY_GROUP_15 79 651*4882a593Smuzhiyun 652*4882a593Smuzhiyun #ifdef __cpluscplus 653*4882a593Smuzhiyun } 654*4882a593Smuzhiyun #endif 655*4882a593Smuzhiyun 656*4882a593Smuzhiyun #endif 657