1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * (C) COPYRIGHT 2008-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 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #ifndef _KBASE_UKU_H_ 21*4882a593Smuzhiyun #define _KBASE_UKU_H_ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #include "mali_uk.h" 24*4882a593Smuzhiyun #include "mali_base_kernel.h" 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun /* This file needs to support being included from kernel and userside (which use different defines) */ 27*4882a593Smuzhiyun #if defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON 28*4882a593Smuzhiyun #define SUPPORT_MALI_ERROR_INJECT 29*4882a593Smuzhiyun #endif /* defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON */ 30*4882a593Smuzhiyun #if defined(CONFIG_MALI_NO_MALI) 31*4882a593Smuzhiyun #define SUPPORT_MALI_NO_MALI 32*4882a593Smuzhiyun #elif defined(MALI_NO_MALI) 33*4882a593Smuzhiyun #if MALI_NO_MALI 34*4882a593Smuzhiyun #define SUPPORT_MALI_NO_MALI 35*4882a593Smuzhiyun #endif 36*4882a593Smuzhiyun #endif 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #if defined(SUPPORT_MALI_NO_MALI) || defined(SUPPORT_MALI_ERROR_INJECT) 39*4882a593Smuzhiyun #include "backend/gpu/mali_kbase_model_dummy.h" 40*4882a593Smuzhiyun #endif 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #include "mali_kbase_gpuprops_types.h" 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /* 45*4882a593Smuzhiyun * 10.1: 46*4882a593Smuzhiyun * - Do mmap in kernel for SAME_VA memory allocations rather then 47*4882a593Smuzhiyun * calling back into the kernel as a 2nd stage of the allocation request. 48*4882a593Smuzhiyun * 49*4882a593Smuzhiyun * 10.2: 50*4882a593Smuzhiyun * - Add KBASE_FUNC_MEM_JIT_INIT which allows clients to request a custom VA 51*4882a593Smuzhiyun * region for use with JIT (ignored on 32-bit platforms) 52*4882a593Smuzhiyun * 53*4882a593Smuzhiyun * 10.3: 54*4882a593Smuzhiyun * - base_jd_core_req typedef-ed to u32 (instead of to u16) 55*4882a593Smuzhiyun * - two flags added: BASE_JD_REQ_SKIP_CACHE_STAT / _END 56*4882a593Smuzhiyun * 57*4882a593Smuzhiyun * 10.4: 58*4882a593Smuzhiyun * - Removed KBASE_FUNC_EXT_BUFFER_LOCK used only in internal tests 59*4882a593Smuzhiyun * 60*4882a593Smuzhiyun * 10.5: 61*4882a593Smuzhiyun * - Reverted to performing mmap in user space so that tools like valgrind work. 62*4882a593Smuzhiyun * 63*4882a593Smuzhiyun * 10.6: 64*4882a593Smuzhiyun * - Add flags input variable to KBASE_FUNC_TLSTREAM_ACQUIRE 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun #define BASE_UK_VERSION_MAJOR 10 67*4882a593Smuzhiyun #define BASE_UK_VERSION_MINOR 6 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #define LINUX_UK_BASE_MAGIC 0x80 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun struct kbase_uk_mem_alloc { 72*4882a593Smuzhiyun union uk_header header; 73*4882a593Smuzhiyun /* IN */ 74*4882a593Smuzhiyun u64 va_pages; 75*4882a593Smuzhiyun u64 commit_pages; 76*4882a593Smuzhiyun u64 extent; 77*4882a593Smuzhiyun /* IN/OUT */ 78*4882a593Smuzhiyun u64 flags; 79*4882a593Smuzhiyun /* OUT */ 80*4882a593Smuzhiyun u64 gpu_va; 81*4882a593Smuzhiyun u16 va_alignment; 82*4882a593Smuzhiyun u8 padding[6]; 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun struct kbase_uk_mem_free { 86*4882a593Smuzhiyun union uk_header header; 87*4882a593Smuzhiyun /* IN */ 88*4882a593Smuzhiyun u64 gpu_addr; 89*4882a593Smuzhiyun /* OUT */ 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun struct kbase_uk_mem_alias { 93*4882a593Smuzhiyun union uk_header header; 94*4882a593Smuzhiyun /* IN/OUT */ 95*4882a593Smuzhiyun u64 flags; 96*4882a593Smuzhiyun /* IN */ 97*4882a593Smuzhiyun u64 stride; 98*4882a593Smuzhiyun u64 nents; 99*4882a593Smuzhiyun union kbase_pointer ai; 100*4882a593Smuzhiyun /* OUT */ 101*4882a593Smuzhiyun u64 gpu_va; 102*4882a593Smuzhiyun u64 va_pages; 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun struct kbase_uk_mem_import { 106*4882a593Smuzhiyun union uk_header header; 107*4882a593Smuzhiyun /* IN */ 108*4882a593Smuzhiyun union kbase_pointer phandle; 109*4882a593Smuzhiyun u32 type; 110*4882a593Smuzhiyun u32 padding; 111*4882a593Smuzhiyun /* IN/OUT */ 112*4882a593Smuzhiyun u64 flags; 113*4882a593Smuzhiyun /* OUT */ 114*4882a593Smuzhiyun u64 gpu_va; 115*4882a593Smuzhiyun u64 va_pages; 116*4882a593Smuzhiyun }; 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun struct kbase_uk_mem_flags_change { 119*4882a593Smuzhiyun union uk_header header; 120*4882a593Smuzhiyun /* IN */ 121*4882a593Smuzhiyun u64 gpu_va; 122*4882a593Smuzhiyun u64 flags; 123*4882a593Smuzhiyun u64 mask; 124*4882a593Smuzhiyun }; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun struct kbase_uk_job_submit { 127*4882a593Smuzhiyun union uk_header header; 128*4882a593Smuzhiyun /* IN */ 129*4882a593Smuzhiyun union kbase_pointer addr; 130*4882a593Smuzhiyun u32 nr_atoms; 131*4882a593Smuzhiyun u32 stride; /* bytes between atoms, i.e. sizeof(base_jd_atom_v2) */ 132*4882a593Smuzhiyun /* OUT */ 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun struct kbase_uk_post_term { 136*4882a593Smuzhiyun union uk_header header; 137*4882a593Smuzhiyun }; 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun struct kbase_uk_sync_now { 140*4882a593Smuzhiyun union uk_header header; 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* IN */ 143*4882a593Smuzhiyun struct base_syncset sset; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* OUT */ 146*4882a593Smuzhiyun }; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun struct kbase_uk_hwcnt_setup { 149*4882a593Smuzhiyun union uk_header header; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* IN */ 152*4882a593Smuzhiyun u64 dump_buffer; 153*4882a593Smuzhiyun u32 jm_bm; 154*4882a593Smuzhiyun u32 shader_bm; 155*4882a593Smuzhiyun u32 tiler_bm; 156*4882a593Smuzhiyun u32 unused_1; /* keep for backwards compatibility */ 157*4882a593Smuzhiyun u32 mmu_l2_bm; 158*4882a593Smuzhiyun u32 padding; 159*4882a593Smuzhiyun /* OUT */ 160*4882a593Smuzhiyun }; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun /** 163*4882a593Smuzhiyun * struct kbase_uk_hwcnt_reader_setup - User/Kernel space data exchange structure 164*4882a593Smuzhiyun * @header: UK structure header 165*4882a593Smuzhiyun * @buffer_count: requested number of dumping buffers 166*4882a593Smuzhiyun * @jm_bm: counters selection bitmask (JM) 167*4882a593Smuzhiyun * @shader_bm: counters selection bitmask (Shader) 168*4882a593Smuzhiyun * @tiler_bm: counters selection bitmask (Tiler) 169*4882a593Smuzhiyun * @mmu_l2_bm: counters selection bitmask (MMU_L2) 170*4882a593Smuzhiyun * @fd: dumping notification file descriptor 171*4882a593Smuzhiyun * 172*4882a593Smuzhiyun * This structure sets up HWC dumper/reader for this context. 173*4882a593Smuzhiyun * Multiple instances can be created for single context. 174*4882a593Smuzhiyun */ 175*4882a593Smuzhiyun struct kbase_uk_hwcnt_reader_setup { 176*4882a593Smuzhiyun union uk_header header; 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun /* IN */ 179*4882a593Smuzhiyun u32 buffer_count; 180*4882a593Smuzhiyun u32 jm_bm; 181*4882a593Smuzhiyun u32 shader_bm; 182*4882a593Smuzhiyun u32 tiler_bm; 183*4882a593Smuzhiyun u32 mmu_l2_bm; 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun /* OUT */ 186*4882a593Smuzhiyun s32 fd; 187*4882a593Smuzhiyun }; 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun struct kbase_uk_hwcnt_dump { 190*4882a593Smuzhiyun union uk_header header; 191*4882a593Smuzhiyun }; 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun struct kbase_uk_hwcnt_clear { 194*4882a593Smuzhiyun union uk_header header; 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun struct kbase_uk_fence_validate { 198*4882a593Smuzhiyun union uk_header header; 199*4882a593Smuzhiyun /* IN */ 200*4882a593Smuzhiyun s32 fd; 201*4882a593Smuzhiyun u32 padding; 202*4882a593Smuzhiyun /* OUT */ 203*4882a593Smuzhiyun }; 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun struct kbase_uk_stream_create { 206*4882a593Smuzhiyun union uk_header header; 207*4882a593Smuzhiyun /* IN */ 208*4882a593Smuzhiyun char name[32]; 209*4882a593Smuzhiyun /* OUT */ 210*4882a593Smuzhiyun s32 fd; 211*4882a593Smuzhiyun u32 padding; 212*4882a593Smuzhiyun }; 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun struct kbase_uk_gpuprops { 215*4882a593Smuzhiyun union uk_header header; 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun /* IN */ 218*4882a593Smuzhiyun struct mali_base_gpu_props props; 219*4882a593Smuzhiyun /* OUT */ 220*4882a593Smuzhiyun }; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun struct kbase_uk_mem_query { 223*4882a593Smuzhiyun union uk_header header; 224*4882a593Smuzhiyun /* IN */ 225*4882a593Smuzhiyun u64 gpu_addr; 226*4882a593Smuzhiyun #define KBASE_MEM_QUERY_COMMIT_SIZE 1 227*4882a593Smuzhiyun #define KBASE_MEM_QUERY_VA_SIZE 2 228*4882a593Smuzhiyun #define KBASE_MEM_QUERY_FLAGS 3 229*4882a593Smuzhiyun u64 query; 230*4882a593Smuzhiyun /* OUT */ 231*4882a593Smuzhiyun u64 value; 232*4882a593Smuzhiyun }; 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun struct kbase_uk_mem_commit { 235*4882a593Smuzhiyun union uk_header header; 236*4882a593Smuzhiyun /* IN */ 237*4882a593Smuzhiyun u64 gpu_addr; 238*4882a593Smuzhiyun u64 pages; 239*4882a593Smuzhiyun /* OUT */ 240*4882a593Smuzhiyun u32 result_subcode; 241*4882a593Smuzhiyun u32 padding; 242*4882a593Smuzhiyun }; 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun struct kbase_uk_find_cpu_offset { 245*4882a593Smuzhiyun union uk_header header; 246*4882a593Smuzhiyun /* IN */ 247*4882a593Smuzhiyun u64 gpu_addr; 248*4882a593Smuzhiyun u64 cpu_addr; 249*4882a593Smuzhiyun u64 size; 250*4882a593Smuzhiyun /* OUT */ 251*4882a593Smuzhiyun u64 offset; 252*4882a593Smuzhiyun }; 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun #define KBASE_GET_VERSION_BUFFER_SIZE 64 255*4882a593Smuzhiyun struct kbase_uk_get_ddk_version { 256*4882a593Smuzhiyun union uk_header header; 257*4882a593Smuzhiyun /* OUT */ 258*4882a593Smuzhiyun char version_buffer[KBASE_GET_VERSION_BUFFER_SIZE]; 259*4882a593Smuzhiyun u32 version_string_size; 260*4882a593Smuzhiyun u32 padding; 261*4882a593Smuzhiyun u32 rk_version; 262*4882a593Smuzhiyun }; 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun struct kbase_uk_disjoint_query { 265*4882a593Smuzhiyun union uk_header header; 266*4882a593Smuzhiyun /* OUT */ 267*4882a593Smuzhiyun u32 counter; 268*4882a593Smuzhiyun u32 padding; 269*4882a593Smuzhiyun }; 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun struct kbase_uk_set_flags { 272*4882a593Smuzhiyun union uk_header header; 273*4882a593Smuzhiyun /* IN */ 274*4882a593Smuzhiyun u32 create_flags; 275*4882a593Smuzhiyun u32 padding; 276*4882a593Smuzhiyun }; 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun #if MALI_UNIT_TEST 279*4882a593Smuzhiyun #define TEST_ADDR_COUNT 4 280*4882a593Smuzhiyun #define KBASE_TEST_BUFFER_SIZE 128 281*4882a593Smuzhiyun struct kbase_exported_test_data { 282*4882a593Smuzhiyun u64 test_addr[TEST_ADDR_COUNT]; /**< memory address */ 283*4882a593Smuzhiyun u32 test_addr_pages[TEST_ADDR_COUNT]; /**< memory size in pages */ 284*4882a593Smuzhiyun union kbase_pointer kctx; /**< base context created by process */ 285*4882a593Smuzhiyun union kbase_pointer mm; /**< pointer to process address space */ 286*4882a593Smuzhiyun u8 buffer1[KBASE_TEST_BUFFER_SIZE]; /**< unit test defined parameter */ 287*4882a593Smuzhiyun u8 buffer2[KBASE_TEST_BUFFER_SIZE]; /**< unit test defined parameter */ 288*4882a593Smuzhiyun }; 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun struct kbase_uk_set_test_data { 291*4882a593Smuzhiyun union uk_header header; 292*4882a593Smuzhiyun /* IN */ 293*4882a593Smuzhiyun struct kbase_exported_test_data test_data; 294*4882a593Smuzhiyun }; 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun #endif /* MALI_UNIT_TEST */ 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun #ifdef SUPPORT_MALI_ERROR_INJECT 299*4882a593Smuzhiyun struct kbase_uk_error_params { 300*4882a593Smuzhiyun union uk_header header; 301*4882a593Smuzhiyun /* IN */ 302*4882a593Smuzhiyun struct kbase_error_params params; 303*4882a593Smuzhiyun }; 304*4882a593Smuzhiyun #endif /* SUPPORT_MALI_ERROR_INJECT */ 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun #ifdef SUPPORT_MALI_NO_MALI 307*4882a593Smuzhiyun struct kbase_uk_model_control_params { 308*4882a593Smuzhiyun union uk_header header; 309*4882a593Smuzhiyun /* IN */ 310*4882a593Smuzhiyun struct kbase_model_control_params params; 311*4882a593Smuzhiyun }; 312*4882a593Smuzhiyun #endif /* SUPPORT_MALI_NO_MALI */ 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun #ifdef BASE_LEGACY_UK8_SUPPORT 315*4882a593Smuzhiyun struct kbase_uk_keep_gpu_powered { 316*4882a593Smuzhiyun union uk_header header; 317*4882a593Smuzhiyun u32 enabled; 318*4882a593Smuzhiyun u32 padding; 319*4882a593Smuzhiyun }; 320*4882a593Smuzhiyun #endif /* BASE_LEGACY_UK8_SUPPORT */ 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun struct kbase_uk_profiling_controls { 323*4882a593Smuzhiyun union uk_header header; 324*4882a593Smuzhiyun u32 profiling_controls[FBDUMP_CONTROL_MAX]; 325*4882a593Smuzhiyun }; 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun struct kbase_uk_debugfs_mem_profile_add { 328*4882a593Smuzhiyun union uk_header header; 329*4882a593Smuzhiyun u32 len; 330*4882a593Smuzhiyun u32 padding; 331*4882a593Smuzhiyun union kbase_pointer buf; 332*4882a593Smuzhiyun }; 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun struct kbase_uk_context_id { 335*4882a593Smuzhiyun union uk_header header; 336*4882a593Smuzhiyun /* OUT */ 337*4882a593Smuzhiyun int id; 338*4882a593Smuzhiyun }; 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun /** 341*4882a593Smuzhiyun * struct kbase_uk_tlstream_acquire - User/Kernel space data exchange structure 342*4882a593Smuzhiyun * @header: UK structure header 343*4882a593Smuzhiyun * @flags: timeline stream flags 344*4882a593Smuzhiyun * @fd: timeline stream file descriptor 345*4882a593Smuzhiyun * 346*4882a593Smuzhiyun * This structure is used when performing a call to acquire kernel side timeline 347*4882a593Smuzhiyun * stream file descriptor. 348*4882a593Smuzhiyun */ 349*4882a593Smuzhiyun struct kbase_uk_tlstream_acquire { 350*4882a593Smuzhiyun union uk_header header; 351*4882a593Smuzhiyun /* IN */ 352*4882a593Smuzhiyun u32 flags; 353*4882a593Smuzhiyun /* OUT */ 354*4882a593Smuzhiyun s32 fd; 355*4882a593Smuzhiyun }; 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /** 358*4882a593Smuzhiyun * struct kbase_uk_tlstream_acquire_v10_4 - User/Kernel space data exchange 359*4882a593Smuzhiyun * structure 360*4882a593Smuzhiyun * @header: UK structure header 361*4882a593Smuzhiyun * @fd: timeline stream file descriptor 362*4882a593Smuzhiyun * 363*4882a593Smuzhiyun * This structure is used when performing a call to acquire kernel side timeline 364*4882a593Smuzhiyun * stream file descriptor. 365*4882a593Smuzhiyun */ 366*4882a593Smuzhiyun struct kbase_uk_tlstream_acquire_v10_4 { 367*4882a593Smuzhiyun union uk_header header; 368*4882a593Smuzhiyun /* IN */ 369*4882a593Smuzhiyun /* OUT */ 370*4882a593Smuzhiyun s32 fd; 371*4882a593Smuzhiyun }; 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /** 374*4882a593Smuzhiyun * struct kbase_uk_tlstream_flush - User/Kernel space data exchange structure 375*4882a593Smuzhiyun * @header: UK structure header 376*4882a593Smuzhiyun * 377*4882a593Smuzhiyun * This structure is used when performing a call to flush kernel side 378*4882a593Smuzhiyun * timeline streams. 379*4882a593Smuzhiyun */ 380*4882a593Smuzhiyun struct kbase_uk_tlstream_flush { 381*4882a593Smuzhiyun union uk_header header; 382*4882a593Smuzhiyun /* IN */ 383*4882a593Smuzhiyun /* OUT */ 384*4882a593Smuzhiyun }; 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun #if MALI_UNIT_TEST 387*4882a593Smuzhiyun /** 388*4882a593Smuzhiyun * struct kbase_uk_tlstream_test - User/Kernel space data exchange structure 389*4882a593Smuzhiyun * @header: UK structure header 390*4882a593Smuzhiyun * @tpw_count: number of trace point writers in each context 391*4882a593Smuzhiyun * @msg_delay: time delay between tracepoints from one writer in milliseconds 392*4882a593Smuzhiyun * @msg_count: number of trace points written by one writer 393*4882a593Smuzhiyun * @aux_msg: if non-zero aux messages will be included 394*4882a593Smuzhiyun * 395*4882a593Smuzhiyun * This structure is used when performing a call to start timeline stream test 396*4882a593Smuzhiyun * embedded in kernel. 397*4882a593Smuzhiyun */ 398*4882a593Smuzhiyun struct kbase_uk_tlstream_test { 399*4882a593Smuzhiyun union uk_header header; 400*4882a593Smuzhiyun /* IN */ 401*4882a593Smuzhiyun u32 tpw_count; 402*4882a593Smuzhiyun u32 msg_delay; 403*4882a593Smuzhiyun u32 msg_count; 404*4882a593Smuzhiyun u32 aux_msg; 405*4882a593Smuzhiyun /* OUT */ 406*4882a593Smuzhiyun }; 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun /** 409*4882a593Smuzhiyun * struct kbase_uk_tlstream_stats - User/Kernel space data exchange structure 410*4882a593Smuzhiyun * @header: UK structure header 411*4882a593Smuzhiyun * @bytes_collected: number of bytes read by user 412*4882a593Smuzhiyun * @bytes_generated: number of bytes generated by tracepoints 413*4882a593Smuzhiyun * 414*4882a593Smuzhiyun * This structure is used when performing a call to obtain timeline stream 415*4882a593Smuzhiyun * statistics. 416*4882a593Smuzhiyun */ 417*4882a593Smuzhiyun struct kbase_uk_tlstream_stats { 418*4882a593Smuzhiyun union uk_header header; /**< UK structure header. */ 419*4882a593Smuzhiyun /* IN */ 420*4882a593Smuzhiyun /* OUT */ 421*4882a593Smuzhiyun u32 bytes_collected; 422*4882a593Smuzhiyun u32 bytes_generated; 423*4882a593Smuzhiyun }; 424*4882a593Smuzhiyun #endif /* MALI_UNIT_TEST */ 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun /** 427*4882a593Smuzhiyun * struct struct kbase_uk_prfcnt_value for the KBASE_FUNC_SET_PRFCNT_VALUES ioctl 428*4882a593Smuzhiyun * @header: UK structure header 429*4882a593Smuzhiyun * @data: Counter samples for the dummy model 430*4882a593Smuzhiyun * @size:............Size of the counter sample data 431*4882a593Smuzhiyun */ 432*4882a593Smuzhiyun struct kbase_uk_prfcnt_values { 433*4882a593Smuzhiyun union uk_header header; 434*4882a593Smuzhiyun /* IN */ 435*4882a593Smuzhiyun u32 *data; 436*4882a593Smuzhiyun u32 size; 437*4882a593Smuzhiyun }; 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun /** 440*4882a593Smuzhiyun * struct kbase_uk_soft_event_update - User/Kernel space data exchange structure 441*4882a593Smuzhiyun * @header: UK structure header 442*4882a593Smuzhiyun * @evt: the GPU address containing the event 443*4882a593Smuzhiyun * @new_status: the new event status, must be either BASE_JD_SOFT_EVENT_SET or 444*4882a593Smuzhiyun * BASE_JD_SOFT_EVENT_RESET 445*4882a593Smuzhiyun * @flags: reserved for future uses, must be set to 0 446*4882a593Smuzhiyun * 447*4882a593Smuzhiyun * This structure is used to update the status of a software event. If the 448*4882a593Smuzhiyun * event's status is set to BASE_JD_SOFT_EVENT_SET, any job currently waiting 449*4882a593Smuzhiyun * on this event will complete. 450*4882a593Smuzhiyun */ 451*4882a593Smuzhiyun struct kbase_uk_soft_event_update { 452*4882a593Smuzhiyun union uk_header header; 453*4882a593Smuzhiyun /* IN */ 454*4882a593Smuzhiyun u64 evt; 455*4882a593Smuzhiyun u32 new_status; 456*4882a593Smuzhiyun u32 flags; 457*4882a593Smuzhiyun }; 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun /** 460*4882a593Smuzhiyun * struct kbase_uk_mem_jit_init - User/Kernel space data exchange structure 461*4882a593Smuzhiyun * @header: UK structure header 462*4882a593Smuzhiyun * @va_pages: Number of virtual pages required for JIT 463*4882a593Smuzhiyun * 464*4882a593Smuzhiyun * This structure is used when requesting initialization of JIT. 465*4882a593Smuzhiyun */ 466*4882a593Smuzhiyun struct kbase_uk_mem_jit_init { 467*4882a593Smuzhiyun union uk_header header; 468*4882a593Smuzhiyun /* IN */ 469*4882a593Smuzhiyun u64 va_pages; 470*4882a593Smuzhiyun }; 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun enum kbase_uk_function_id { 473*4882a593Smuzhiyun KBASE_FUNC_MEM_ALLOC = (UK_FUNC_ID + 0), 474*4882a593Smuzhiyun KBASE_FUNC_MEM_IMPORT = (UK_FUNC_ID + 1), 475*4882a593Smuzhiyun KBASE_FUNC_MEM_COMMIT = (UK_FUNC_ID + 2), 476*4882a593Smuzhiyun KBASE_FUNC_MEM_QUERY = (UK_FUNC_ID + 3), 477*4882a593Smuzhiyun KBASE_FUNC_MEM_FREE = (UK_FUNC_ID + 4), 478*4882a593Smuzhiyun KBASE_FUNC_MEM_FLAGS_CHANGE = (UK_FUNC_ID + 5), 479*4882a593Smuzhiyun KBASE_FUNC_MEM_ALIAS = (UK_FUNC_ID + 6), 480*4882a593Smuzhiyun 481*4882a593Smuzhiyun #ifdef BASE_LEGACY_UK6_SUPPORT 482*4882a593Smuzhiyun KBASE_FUNC_JOB_SUBMIT_UK6 = (UK_FUNC_ID + 7), 483*4882a593Smuzhiyun #endif /* BASE_LEGACY_UK6_SUPPORT */ 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun KBASE_FUNC_SYNC = (UK_FUNC_ID + 8), 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun KBASE_FUNC_POST_TERM = (UK_FUNC_ID + 9), 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun KBASE_FUNC_HWCNT_SETUP = (UK_FUNC_ID + 10), 490*4882a593Smuzhiyun KBASE_FUNC_HWCNT_DUMP = (UK_FUNC_ID + 11), 491*4882a593Smuzhiyun KBASE_FUNC_HWCNT_CLEAR = (UK_FUNC_ID + 12), 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun KBASE_FUNC_GPU_PROPS_REG_DUMP = (UK_FUNC_ID + 14), 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun KBASE_FUNC_FIND_CPU_OFFSET = (UK_FUNC_ID + 15), 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun KBASE_FUNC_GET_VERSION = (UK_FUNC_ID + 16), 498*4882a593Smuzhiyun KBASE_FUNC_SET_FLAGS = (UK_FUNC_ID + 18), 499*4882a593Smuzhiyun 500*4882a593Smuzhiyun KBASE_FUNC_SET_TEST_DATA = (UK_FUNC_ID + 19), 501*4882a593Smuzhiyun KBASE_FUNC_INJECT_ERROR = (UK_FUNC_ID + 20), 502*4882a593Smuzhiyun KBASE_FUNC_MODEL_CONTROL = (UK_FUNC_ID + 21), 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun #ifdef BASE_LEGACY_UK8_SUPPORT 505*4882a593Smuzhiyun KBASE_FUNC_KEEP_GPU_POWERED = (UK_FUNC_ID + 22), 506*4882a593Smuzhiyun #endif /* BASE_LEGACY_UK8_SUPPORT */ 507*4882a593Smuzhiyun 508*4882a593Smuzhiyun KBASE_FUNC_FENCE_VALIDATE = (UK_FUNC_ID + 23), 509*4882a593Smuzhiyun KBASE_FUNC_STREAM_CREATE = (UK_FUNC_ID + 24), 510*4882a593Smuzhiyun KBASE_FUNC_GET_PROFILING_CONTROLS = (UK_FUNC_ID + 25), 511*4882a593Smuzhiyun KBASE_FUNC_SET_PROFILING_CONTROLS = (UK_FUNC_ID + 26), 512*4882a593Smuzhiyun /* to be used only for testing 513*4882a593Smuzhiyun * purposes, otherwise these controls 514*4882a593Smuzhiyun * are set through gator API */ 515*4882a593Smuzhiyun 516*4882a593Smuzhiyun KBASE_FUNC_DEBUGFS_MEM_PROFILE_ADD = (UK_FUNC_ID + 27), 517*4882a593Smuzhiyun KBASE_FUNC_JOB_SUBMIT = (UK_FUNC_ID + 28), 518*4882a593Smuzhiyun KBASE_FUNC_DISJOINT_QUERY = (UK_FUNC_ID + 29), 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun KBASE_FUNC_GET_CONTEXT_ID = (UK_FUNC_ID + 31), 521*4882a593Smuzhiyun 522*4882a593Smuzhiyun KBASE_FUNC_TLSTREAM_ACQUIRE_V10_4 = (UK_FUNC_ID + 32), 523*4882a593Smuzhiyun #if MALI_UNIT_TEST 524*4882a593Smuzhiyun KBASE_FUNC_TLSTREAM_TEST = (UK_FUNC_ID + 33), 525*4882a593Smuzhiyun KBASE_FUNC_TLSTREAM_STATS = (UK_FUNC_ID + 34), 526*4882a593Smuzhiyun #endif /* MALI_UNIT_TEST */ 527*4882a593Smuzhiyun KBASE_FUNC_TLSTREAM_FLUSH = (UK_FUNC_ID + 35), 528*4882a593Smuzhiyun 529*4882a593Smuzhiyun KBASE_FUNC_HWCNT_READER_SETUP = (UK_FUNC_ID + 36), 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun #ifdef SUPPORT_MALI_NO_MALI 532*4882a593Smuzhiyun KBASE_FUNC_SET_PRFCNT_VALUES = (UK_FUNC_ID + 37), 533*4882a593Smuzhiyun #endif 534*4882a593Smuzhiyun 535*4882a593Smuzhiyun KBASE_FUNC_SOFT_EVENT_UPDATE = (UK_FUNC_ID + 38), 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun KBASE_FUNC_MEM_JIT_INIT = (UK_FUNC_ID + 39), 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun KBASE_FUNC_TLSTREAM_ACQUIRE = (UK_FUNC_ID + 40), 540*4882a593Smuzhiyun 541*4882a593Smuzhiyun KBASE_FUNC_MAX 542*4882a593Smuzhiyun }; 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun #endif /* _KBASE_UKU_H_ */ 545*4882a593Smuzhiyun 546