546 lines
13 KiB
C
546 lines
13 KiB
C
/*
|
|
*
|
|
* (C) COPYRIGHT 2008-2017 ARM Limited. All rights reserved.
|
|
*
|
|
* This program is free software and is provided to you under the terms of the
|
|
* GNU General Public License version 2 as published by the Free Software
|
|
* Foundation, and any use by you of this program is subject to the terms
|
|
* of such GNU licence.
|
|
*
|
|
* A copy of the licence is included with the program, and can also be obtained
|
|
* from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef _KBASE_UKU_H_
|
|
#define _KBASE_UKU_H_
|
|
|
|
#include "mali_uk.h"
|
|
#include "mali_base_kernel.h"
|
|
|
|
/* This file needs to support being included from kernel and userside (which use different defines) */
|
|
#if defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON
|
|
#define SUPPORT_MALI_ERROR_INJECT
|
|
#endif /* defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON */
|
|
#if defined(CONFIG_MALI_NO_MALI)
|
|
#define SUPPORT_MALI_NO_MALI
|
|
#elif defined(MALI_NO_MALI)
|
|
#if MALI_NO_MALI
|
|
#define SUPPORT_MALI_NO_MALI
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(SUPPORT_MALI_NO_MALI) || defined(SUPPORT_MALI_ERROR_INJECT)
|
|
#include "backend/gpu/mali_kbase_model_dummy.h"
|
|
#endif
|
|
|
|
#include "mali_kbase_gpuprops_types.h"
|
|
|
|
/*
|
|
* 10.1:
|
|
* - Do mmap in kernel for SAME_VA memory allocations rather then
|
|
* calling back into the kernel as a 2nd stage of the allocation request.
|
|
*
|
|
* 10.2:
|
|
* - Add KBASE_FUNC_MEM_JIT_INIT which allows clients to request a custom VA
|
|
* region for use with JIT (ignored on 32-bit platforms)
|
|
*
|
|
* 10.3:
|
|
* - base_jd_core_req typedef-ed to u32 (instead of to u16)
|
|
* - two flags added: BASE_JD_REQ_SKIP_CACHE_STAT / _END
|
|
*
|
|
* 10.4:
|
|
* - Removed KBASE_FUNC_EXT_BUFFER_LOCK used only in internal tests
|
|
*
|
|
* 10.5:
|
|
* - Reverted to performing mmap in user space so that tools like valgrind work.
|
|
*
|
|
* 10.6:
|
|
* - Add flags input variable to KBASE_FUNC_TLSTREAM_ACQUIRE
|
|
*/
|
|
#define BASE_UK_VERSION_MAJOR 10
|
|
#define BASE_UK_VERSION_MINOR 6
|
|
|
|
#define LINUX_UK_BASE_MAGIC 0x80
|
|
|
|
struct kbase_uk_mem_alloc {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 va_pages;
|
|
u64 commit_pages;
|
|
u64 extent;
|
|
/* IN/OUT */
|
|
u64 flags;
|
|
/* OUT */
|
|
u64 gpu_va;
|
|
u16 va_alignment;
|
|
u8 padding[6];
|
|
};
|
|
|
|
struct kbase_uk_mem_free {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 gpu_addr;
|
|
/* OUT */
|
|
};
|
|
|
|
struct kbase_uk_mem_alias {
|
|
union uk_header header;
|
|
/* IN/OUT */
|
|
u64 flags;
|
|
/* IN */
|
|
u64 stride;
|
|
u64 nents;
|
|
union kbase_pointer ai;
|
|
/* OUT */
|
|
u64 gpu_va;
|
|
u64 va_pages;
|
|
};
|
|
|
|
struct kbase_uk_mem_import {
|
|
union uk_header header;
|
|
/* IN */
|
|
union kbase_pointer phandle;
|
|
u32 type;
|
|
u32 padding;
|
|
/* IN/OUT */
|
|
u64 flags;
|
|
/* OUT */
|
|
u64 gpu_va;
|
|
u64 va_pages;
|
|
};
|
|
|
|
struct kbase_uk_mem_flags_change {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 gpu_va;
|
|
u64 flags;
|
|
u64 mask;
|
|
};
|
|
|
|
struct kbase_uk_job_submit {
|
|
union uk_header header;
|
|
/* IN */
|
|
union kbase_pointer addr;
|
|
u32 nr_atoms;
|
|
u32 stride; /* bytes between atoms, i.e. sizeof(base_jd_atom_v2) */
|
|
/* OUT */
|
|
};
|
|
|
|
struct kbase_uk_post_term {
|
|
union uk_header header;
|
|
};
|
|
|
|
struct kbase_uk_sync_now {
|
|
union uk_header header;
|
|
|
|
/* IN */
|
|
struct base_syncset sset;
|
|
|
|
/* OUT */
|
|
};
|
|
|
|
struct kbase_uk_hwcnt_setup {
|
|
union uk_header header;
|
|
|
|
/* IN */
|
|
u64 dump_buffer;
|
|
u32 jm_bm;
|
|
u32 shader_bm;
|
|
u32 tiler_bm;
|
|
u32 unused_1; /* keep for backwards compatibility */
|
|
u32 mmu_l2_bm;
|
|
u32 padding;
|
|
/* OUT */
|
|
};
|
|
|
|
/**
|
|
* struct kbase_uk_hwcnt_reader_setup - User/Kernel space data exchange structure
|
|
* @header: UK structure header
|
|
* @buffer_count: requested number of dumping buffers
|
|
* @jm_bm: counters selection bitmask (JM)
|
|
* @shader_bm: counters selection bitmask (Shader)
|
|
* @tiler_bm: counters selection bitmask (Tiler)
|
|
* @mmu_l2_bm: counters selection bitmask (MMU_L2)
|
|
* @fd: dumping notification file descriptor
|
|
*
|
|
* This structure sets up HWC dumper/reader for this context.
|
|
* Multiple instances can be created for single context.
|
|
*/
|
|
struct kbase_uk_hwcnt_reader_setup {
|
|
union uk_header header;
|
|
|
|
/* IN */
|
|
u32 buffer_count;
|
|
u32 jm_bm;
|
|
u32 shader_bm;
|
|
u32 tiler_bm;
|
|
u32 mmu_l2_bm;
|
|
|
|
/* OUT */
|
|
s32 fd;
|
|
};
|
|
|
|
struct kbase_uk_hwcnt_dump {
|
|
union uk_header header;
|
|
};
|
|
|
|
struct kbase_uk_hwcnt_clear {
|
|
union uk_header header;
|
|
};
|
|
|
|
struct kbase_uk_fence_validate {
|
|
union uk_header header;
|
|
/* IN */
|
|
s32 fd;
|
|
u32 padding;
|
|
/* OUT */
|
|
};
|
|
|
|
struct kbase_uk_stream_create {
|
|
union uk_header header;
|
|
/* IN */
|
|
char name[32];
|
|
/* OUT */
|
|
s32 fd;
|
|
u32 padding;
|
|
};
|
|
|
|
struct kbase_uk_gpuprops {
|
|
union uk_header header;
|
|
|
|
/* IN */
|
|
struct mali_base_gpu_props props;
|
|
/* OUT */
|
|
};
|
|
|
|
struct kbase_uk_mem_query {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 gpu_addr;
|
|
#define KBASE_MEM_QUERY_COMMIT_SIZE 1
|
|
#define KBASE_MEM_QUERY_VA_SIZE 2
|
|
#define KBASE_MEM_QUERY_FLAGS 3
|
|
u64 query;
|
|
/* OUT */
|
|
u64 value;
|
|
};
|
|
|
|
struct kbase_uk_mem_commit {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 gpu_addr;
|
|
u64 pages;
|
|
/* OUT */
|
|
u32 result_subcode;
|
|
u32 padding;
|
|
};
|
|
|
|
struct kbase_uk_find_cpu_offset {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 gpu_addr;
|
|
u64 cpu_addr;
|
|
u64 size;
|
|
/* OUT */
|
|
u64 offset;
|
|
};
|
|
|
|
#define KBASE_GET_VERSION_BUFFER_SIZE 64
|
|
struct kbase_uk_get_ddk_version {
|
|
union uk_header header;
|
|
/* OUT */
|
|
char version_buffer[KBASE_GET_VERSION_BUFFER_SIZE];
|
|
u32 version_string_size;
|
|
u32 padding;
|
|
u32 rk_version;
|
|
};
|
|
|
|
struct kbase_uk_disjoint_query {
|
|
union uk_header header;
|
|
/* OUT */
|
|
u32 counter;
|
|
u32 padding;
|
|
};
|
|
|
|
struct kbase_uk_set_flags {
|
|
union uk_header header;
|
|
/* IN */
|
|
u32 create_flags;
|
|
u32 padding;
|
|
};
|
|
|
|
#if MALI_UNIT_TEST
|
|
#define TEST_ADDR_COUNT 4
|
|
#define KBASE_TEST_BUFFER_SIZE 128
|
|
struct kbase_exported_test_data {
|
|
u64 test_addr[TEST_ADDR_COUNT]; /**< memory address */
|
|
u32 test_addr_pages[TEST_ADDR_COUNT]; /**< memory size in pages */
|
|
union kbase_pointer kctx; /**< base context created by process */
|
|
union kbase_pointer mm; /**< pointer to process address space */
|
|
u8 buffer1[KBASE_TEST_BUFFER_SIZE]; /**< unit test defined parameter */
|
|
u8 buffer2[KBASE_TEST_BUFFER_SIZE]; /**< unit test defined parameter */
|
|
};
|
|
|
|
struct kbase_uk_set_test_data {
|
|
union uk_header header;
|
|
/* IN */
|
|
struct kbase_exported_test_data test_data;
|
|
};
|
|
|
|
#endif /* MALI_UNIT_TEST */
|
|
|
|
#ifdef SUPPORT_MALI_ERROR_INJECT
|
|
struct kbase_uk_error_params {
|
|
union uk_header header;
|
|
/* IN */
|
|
struct kbase_error_params params;
|
|
};
|
|
#endif /* SUPPORT_MALI_ERROR_INJECT */
|
|
|
|
#ifdef SUPPORT_MALI_NO_MALI
|
|
struct kbase_uk_model_control_params {
|
|
union uk_header header;
|
|
/* IN */
|
|
struct kbase_model_control_params params;
|
|
};
|
|
#endif /* SUPPORT_MALI_NO_MALI */
|
|
|
|
#ifdef BASE_LEGACY_UK8_SUPPORT
|
|
struct kbase_uk_keep_gpu_powered {
|
|
union uk_header header;
|
|
u32 enabled;
|
|
u32 padding;
|
|
};
|
|
#endif /* BASE_LEGACY_UK8_SUPPORT */
|
|
|
|
struct kbase_uk_profiling_controls {
|
|
union uk_header header;
|
|
u32 profiling_controls[FBDUMP_CONTROL_MAX];
|
|
};
|
|
|
|
struct kbase_uk_debugfs_mem_profile_add {
|
|
union uk_header header;
|
|
u32 len;
|
|
u32 padding;
|
|
union kbase_pointer buf;
|
|
};
|
|
|
|
struct kbase_uk_context_id {
|
|
union uk_header header;
|
|
/* OUT */
|
|
int id;
|
|
};
|
|
|
|
/**
|
|
* struct kbase_uk_tlstream_acquire - User/Kernel space data exchange structure
|
|
* @header: UK structure header
|
|
* @flags: timeline stream flags
|
|
* @fd: timeline stream file descriptor
|
|
*
|
|
* This structure is used when performing a call to acquire kernel side timeline
|
|
* stream file descriptor.
|
|
*/
|
|
struct kbase_uk_tlstream_acquire {
|
|
union uk_header header;
|
|
/* IN */
|
|
u32 flags;
|
|
/* OUT */
|
|
s32 fd;
|
|
};
|
|
|
|
/**
|
|
* struct kbase_uk_tlstream_acquire_v10_4 - User/Kernel space data exchange
|
|
* structure
|
|
* @header: UK structure header
|
|
* @fd: timeline stream file descriptor
|
|
*
|
|
* This structure is used when performing a call to acquire kernel side timeline
|
|
* stream file descriptor.
|
|
*/
|
|
struct kbase_uk_tlstream_acquire_v10_4 {
|
|
union uk_header header;
|
|
/* IN */
|
|
/* OUT */
|
|
s32 fd;
|
|
};
|
|
|
|
/**
|
|
* struct kbase_uk_tlstream_flush - User/Kernel space data exchange structure
|
|
* @header: UK structure header
|
|
*
|
|
* This structure is used when performing a call to flush kernel side
|
|
* timeline streams.
|
|
*/
|
|
struct kbase_uk_tlstream_flush {
|
|
union uk_header header;
|
|
/* IN */
|
|
/* OUT */
|
|
};
|
|
|
|
#if MALI_UNIT_TEST
|
|
/**
|
|
* struct kbase_uk_tlstream_test - User/Kernel space data exchange structure
|
|
* @header: UK structure header
|
|
* @tpw_count: number of trace point writers in each context
|
|
* @msg_delay: time delay between tracepoints from one writer in milliseconds
|
|
* @msg_count: number of trace points written by one writer
|
|
* @aux_msg: if non-zero aux messages will be included
|
|
*
|
|
* This structure is used when performing a call to start timeline stream test
|
|
* embedded in kernel.
|
|
*/
|
|
struct kbase_uk_tlstream_test {
|
|
union uk_header header;
|
|
/* IN */
|
|
u32 tpw_count;
|
|
u32 msg_delay;
|
|
u32 msg_count;
|
|
u32 aux_msg;
|
|
/* OUT */
|
|
};
|
|
|
|
/**
|
|
* struct kbase_uk_tlstream_stats - User/Kernel space data exchange structure
|
|
* @header: UK structure header
|
|
* @bytes_collected: number of bytes read by user
|
|
* @bytes_generated: number of bytes generated by tracepoints
|
|
*
|
|
* This structure is used when performing a call to obtain timeline stream
|
|
* statistics.
|
|
*/
|
|
struct kbase_uk_tlstream_stats {
|
|
union uk_header header; /**< UK structure header. */
|
|
/* IN */
|
|
/* OUT */
|
|
u32 bytes_collected;
|
|
u32 bytes_generated;
|
|
};
|
|
#endif /* MALI_UNIT_TEST */
|
|
|
|
/**
|
|
* struct struct kbase_uk_prfcnt_value for the KBASE_FUNC_SET_PRFCNT_VALUES ioctl
|
|
* @header: UK structure header
|
|
* @data: Counter samples for the dummy model
|
|
* @size:............Size of the counter sample data
|
|
*/
|
|
struct kbase_uk_prfcnt_values {
|
|
union uk_header header;
|
|
/* IN */
|
|
u32 *data;
|
|
u32 size;
|
|
};
|
|
|
|
/**
|
|
* struct kbase_uk_soft_event_update - User/Kernel space data exchange structure
|
|
* @header: UK structure header
|
|
* @evt: the GPU address containing the event
|
|
* @new_status: the new event status, must be either BASE_JD_SOFT_EVENT_SET or
|
|
* BASE_JD_SOFT_EVENT_RESET
|
|
* @flags: reserved for future uses, must be set to 0
|
|
*
|
|
* This structure is used to update the status of a software event. If the
|
|
* event's status is set to BASE_JD_SOFT_EVENT_SET, any job currently waiting
|
|
* on this event will complete.
|
|
*/
|
|
struct kbase_uk_soft_event_update {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 evt;
|
|
u32 new_status;
|
|
u32 flags;
|
|
};
|
|
|
|
/**
|
|
* struct kbase_uk_mem_jit_init - User/Kernel space data exchange structure
|
|
* @header: UK structure header
|
|
* @va_pages: Number of virtual pages required for JIT
|
|
*
|
|
* This structure is used when requesting initialization of JIT.
|
|
*/
|
|
struct kbase_uk_mem_jit_init {
|
|
union uk_header header;
|
|
/* IN */
|
|
u64 va_pages;
|
|
};
|
|
|
|
enum kbase_uk_function_id {
|
|
KBASE_FUNC_MEM_ALLOC = (UK_FUNC_ID + 0),
|
|
KBASE_FUNC_MEM_IMPORT = (UK_FUNC_ID + 1),
|
|
KBASE_FUNC_MEM_COMMIT = (UK_FUNC_ID + 2),
|
|
KBASE_FUNC_MEM_QUERY = (UK_FUNC_ID + 3),
|
|
KBASE_FUNC_MEM_FREE = (UK_FUNC_ID + 4),
|
|
KBASE_FUNC_MEM_FLAGS_CHANGE = (UK_FUNC_ID + 5),
|
|
KBASE_FUNC_MEM_ALIAS = (UK_FUNC_ID + 6),
|
|
|
|
#ifdef BASE_LEGACY_UK6_SUPPORT
|
|
KBASE_FUNC_JOB_SUBMIT_UK6 = (UK_FUNC_ID + 7),
|
|
#endif /* BASE_LEGACY_UK6_SUPPORT */
|
|
|
|
KBASE_FUNC_SYNC = (UK_FUNC_ID + 8),
|
|
|
|
KBASE_FUNC_POST_TERM = (UK_FUNC_ID + 9),
|
|
|
|
KBASE_FUNC_HWCNT_SETUP = (UK_FUNC_ID + 10),
|
|
KBASE_FUNC_HWCNT_DUMP = (UK_FUNC_ID + 11),
|
|
KBASE_FUNC_HWCNT_CLEAR = (UK_FUNC_ID + 12),
|
|
|
|
KBASE_FUNC_GPU_PROPS_REG_DUMP = (UK_FUNC_ID + 14),
|
|
|
|
KBASE_FUNC_FIND_CPU_OFFSET = (UK_FUNC_ID + 15),
|
|
|
|
KBASE_FUNC_GET_VERSION = (UK_FUNC_ID + 16),
|
|
KBASE_FUNC_SET_FLAGS = (UK_FUNC_ID + 18),
|
|
|
|
KBASE_FUNC_SET_TEST_DATA = (UK_FUNC_ID + 19),
|
|
KBASE_FUNC_INJECT_ERROR = (UK_FUNC_ID + 20),
|
|
KBASE_FUNC_MODEL_CONTROL = (UK_FUNC_ID + 21),
|
|
|
|
#ifdef BASE_LEGACY_UK8_SUPPORT
|
|
KBASE_FUNC_KEEP_GPU_POWERED = (UK_FUNC_ID + 22),
|
|
#endif /* BASE_LEGACY_UK8_SUPPORT */
|
|
|
|
KBASE_FUNC_FENCE_VALIDATE = (UK_FUNC_ID + 23),
|
|
KBASE_FUNC_STREAM_CREATE = (UK_FUNC_ID + 24),
|
|
KBASE_FUNC_GET_PROFILING_CONTROLS = (UK_FUNC_ID + 25),
|
|
KBASE_FUNC_SET_PROFILING_CONTROLS = (UK_FUNC_ID + 26),
|
|
/* to be used only for testing
|
|
* purposes, otherwise these controls
|
|
* are set through gator API */
|
|
|
|
KBASE_FUNC_DEBUGFS_MEM_PROFILE_ADD = (UK_FUNC_ID + 27),
|
|
KBASE_FUNC_JOB_SUBMIT = (UK_FUNC_ID + 28),
|
|
KBASE_FUNC_DISJOINT_QUERY = (UK_FUNC_ID + 29),
|
|
|
|
KBASE_FUNC_GET_CONTEXT_ID = (UK_FUNC_ID + 31),
|
|
|
|
KBASE_FUNC_TLSTREAM_ACQUIRE_V10_4 = (UK_FUNC_ID + 32),
|
|
#if MALI_UNIT_TEST
|
|
KBASE_FUNC_TLSTREAM_TEST = (UK_FUNC_ID + 33),
|
|
KBASE_FUNC_TLSTREAM_STATS = (UK_FUNC_ID + 34),
|
|
#endif /* MALI_UNIT_TEST */
|
|
KBASE_FUNC_TLSTREAM_FLUSH = (UK_FUNC_ID + 35),
|
|
|
|
KBASE_FUNC_HWCNT_READER_SETUP = (UK_FUNC_ID + 36),
|
|
|
|
#ifdef SUPPORT_MALI_NO_MALI
|
|
KBASE_FUNC_SET_PRFCNT_VALUES = (UK_FUNC_ID + 37),
|
|
#endif
|
|
|
|
KBASE_FUNC_SOFT_EVENT_UPDATE = (UK_FUNC_ID + 38),
|
|
|
|
KBASE_FUNC_MEM_JIT_INIT = (UK_FUNC_ID + 39),
|
|
|
|
KBASE_FUNC_TLSTREAM_ACQUIRE = (UK_FUNC_ID + 40),
|
|
|
|
KBASE_FUNC_MAX
|
|
};
|
|
|
|
#endif /* _KBASE_UKU_H_ */
|
|
|