/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * * (C) COPYRIGHT 2020-2021 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 license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, you can access it online at * http://www.gnu.org/licenses/gpl-2.0.html. * */ #ifndef _UAPI_KBASE_JM_IOCTL_H_ #define _UAPI_KBASE_JM_IOCTL_H_ #include #include /* * 11.1: * - Add BASE_MEM_TILER_ALIGN_TOP under base_mem_alloc_flags * 11.2: * - KBASE_MEM_QUERY_FLAGS can return KBASE_REG_PF_GROW and KBASE_REG_PROTECTED, * which some user-side clients prior to 11.2 might fault if they received * them * 11.3: * - New ioctls KBASE_IOCTL_STICKY_RESOURCE_MAP and * KBASE_IOCTL_STICKY_RESOURCE_UNMAP * 11.4: * - New ioctl KBASE_IOCTL_MEM_FIND_GPU_START_AND_OFFSET * 11.5: * - New ioctl: KBASE_IOCTL_MEM_JIT_INIT (old ioctl renamed to _OLD) * 11.6: * - Added flags field to base_jit_alloc_info structure, which can be used to * specify pseudo chunked tiler alignment for JIT allocations. * 11.7: * - Removed UMP support * 11.8: * - Added BASE_MEM_UNCACHED_GPU under base_mem_alloc_flags * 11.9: * - Added BASE_MEM_PERMANENT_KERNEL_MAPPING and BASE_MEM_FLAGS_KERNEL_ONLY * under base_mem_alloc_flags * 11.10: * - Enabled the use of nr_extres field of base_jd_atom_v2 structure for * JIT_ALLOC and JIT_FREE type softjobs to enable multiple JIT allocations * with one softjob. * 11.11: * - Added BASE_MEM_GPU_VA_SAME_4GB_PAGE under base_mem_alloc_flags * 11.12: * - Removed ioctl: KBASE_IOCTL_GET_PROFILING_CONTROLS * 11.13: * - New ioctl: KBASE_IOCTL_MEM_EXEC_INIT * 11.14: * - Add BASE_MEM_GROUP_ID_MASK, base_mem_group_id_get, base_mem_group_id_set * under base_mem_alloc_flags * 11.15: * - Added BASEP_CONTEXT_MMU_GROUP_ID_MASK under base_context_create_flags. * - Require KBASE_IOCTL_SET_FLAGS before BASE_MEM_MAP_TRACKING_HANDLE can be * passed to mmap(). * 11.16: * - Extended ioctl KBASE_IOCTL_MEM_SYNC to accept imported dma-buf. * - Modified (backwards compatible) ioctl KBASE_IOCTL_MEM_IMPORT behavior for * dma-buf. Now, buffers are mapped on GPU when first imported, no longer * requiring external resource or sticky resource tracking. UNLESS, * CONFIG_MALI_DMA_BUF_MAP_ON_DEMAND is enabled. * 11.17: * - Added BASE_JD_REQ_JOB_SLOT. * - Reused padding field in base_jd_atom_v2 to pass job slot number. * - New ioctl: KBASE_IOCTL_GET_CPU_GPU_TIMEINFO * 11.18: * - Added BASE_MEM_IMPORT_SYNC_ON_MAP_UNMAP under base_mem_alloc_flags * 11.19: * - Extended base_jd_atom_v2 to allow a renderpass ID to be specified. * 11.20: * - Added new phys_pages member to kbase_ioctl_mem_jit_init for * KBASE_IOCTL_MEM_JIT_INIT, previous variants of this renamed to use _10_2 * (replacing '_OLD') and _11_5 suffixes * - Replaced compat_core_req (deprecated in 10.3) with jit_id[2] in * base_jd_atom_v2. It must currently be initialized to zero. * - Added heap_info_gpu_addr to base_jit_alloc_info, and * BASE_JIT_ALLOC_HEAP_INFO_IS_SIZE allowable in base_jit_alloc_info's * flags member. Previous variants of this structure are kept and given _10_2 * and _11_5 suffixes. * - The above changes are checked for safe values in usual builds * 11.21: * - v2.0 of mali_trace debugfs file, which now versions the file separately * 11.22: * - Added base_jd_atom (v3), which is seq_nr + base_jd_atom_v2. * KBASE_IOCTL_JOB_SUBMIT supports both in parallel. * 11.23: * - Modified KBASE_IOCTL_MEM_COMMIT behavior to reject requests to modify * the physical memory backing of JIT allocations. This was not supposed * to be a valid use case, but it was allowed by the previous implementation. * 11.24: * - Added a sysfs file 'serialize_jobs' inside a new sub-directory * 'scheduling'. * 11.25: * - Enabled JIT pressure limit in base/kbase by default * 11.26 * - Added kinstr_jm API * 11.27 * - Backwards compatible extension to HWC ioctl. * 11.28: * - Added kernel side cache ops needed hint * 11.29: * - Reserve ioctl 52 * 11.30: * - Add a new priority level BASE_JD_PRIO_REALTIME * - Add ioctl 54: This controls the priority setting. * 11.31: * - Added BASE_JD_REQ_LIMITED_CORE_MASK. * - Added ioctl 55: set_limited_core_count. */ #define BASE_UK_VERSION_MAJOR 11 #define BASE_UK_VERSION_MINOR 31 /** * struct kbase_ioctl_version_check - Check version compatibility between * kernel and userspace * * @major: Major version number * @minor: Minor version number */ struct kbase_ioctl_version_check { __u16 major; __u16 minor; }; #define KBASE_IOCTL_VERSION_CHECK \ _IOWR(KBASE_IOCTL_TYPE, 0, struct kbase_ioctl_version_check) /** * struct kbase_ioctl_job_submit - Submit jobs/atoms to the kernel * * @addr: Memory address of an array of struct base_jd_atom_v2 or v3 * @nr_atoms: Number of entries in the array * @stride: sizeof(struct base_jd_atom_v2) or sizeof(struct base_jd_atom) */ struct kbase_ioctl_job_submit { __u64 addr; __u32 nr_atoms; __u32 stride; }; #define KBASE_IOCTL_JOB_SUBMIT \ _IOW(KBASE_IOCTL_TYPE, 2, struct kbase_ioctl_job_submit) #define KBASE_IOCTL_POST_TERM \ _IO(KBASE_IOCTL_TYPE, 4) /** * struct kbase_ioctl_soft_event_update - Update the status of a soft-event * @event: GPU address of the event which has been updated * @new_status: The new status to set * @flags: Flags for future expansion */ struct kbase_ioctl_soft_event_update { __u64 event; __u32 new_status; __u32 flags; }; #define KBASE_IOCTL_SOFT_EVENT_UPDATE \ _IOW(KBASE_IOCTL_TYPE, 28, struct kbase_ioctl_soft_event_update) /** * struct kbase_kinstr_jm_fd_out - Explains the compatibility information for * the `struct kbase_kinstr_jm_atom_state_change` structure returned from the * kernel * * @size: The size of the `struct kbase_kinstr_jm_atom_state_change` * @version: Represents a breaking change in the * `struct kbase_kinstr_jm_atom_state_change` * @padding: Explicit padding to get the structure up to 64bits. See * https://www.kernel.org/doc/Documentation/ioctl/botching-up-ioctls.rst * * The `struct kbase_kinstr_jm_atom_state_change` may have extra members at the * end of the structure that older user space might not understand. If the * `version` is the same, the structure is still compatible with newer kernels. * The `size` can be used to cast the opaque memory returned from the kernel. */ struct kbase_kinstr_jm_fd_out { __u16 size; __u8 version; __u8 padding[5]; }; /** * struct kbase_kinstr_jm_fd_in - Options when creating the file descriptor * * @count: Number of atom states that can be stored in the kernel circular * buffer. Must be a power of two * @padding: Explicit padding to get the structure up to 64bits. See * https://www.kernel.org/doc/Documentation/ioctl/botching-up-ioctls.rst */ struct kbase_kinstr_jm_fd_in { __u16 count; __u8 padding[6]; }; union kbase_kinstr_jm_fd { struct kbase_kinstr_jm_fd_in in; struct kbase_kinstr_jm_fd_out out; }; #define KBASE_IOCTL_KINSTR_JM_FD \ _IOWR(KBASE_IOCTL_TYPE, 51, union kbase_kinstr_jm_fd) #define KBASE_IOCTL_VERSION_CHECK_RESERVED \ _IOWR(KBASE_IOCTL_TYPE, 52, struct kbase_ioctl_version_check) #endif /* _UAPI_KBASE_JM_IOCTL_H_ */