1*fc82e622SJens Wiklander /* SPDX-License-Identifier: BSD-2-Clause */ 2*fc82e622SJens Wiklander /* 3*fc82e622SJens Wiklander * Copyright (c) 2014-2022, Linaro Limited 4*fc82e622SJens Wiklander * Copyright (c) 2020, Arm Limited 5*fc82e622SJens Wiklander */ 6*fc82e622SJens Wiklander #ifndef __KERNEL_SCALL_H 7*fc82e622SJens Wiklander #define __KERNEL_SCALL_H 8*fc82e622SJens Wiklander 9*fc82e622SJens Wiklander #include <types_ext.h> 10*fc82e622SJens Wiklander 11*fc82e622SJens Wiklander /* 12*fc82e622SJens Wiklander * Generic "pointer to function" type. Actual syscalls take zero or more 13*fc82e622SJens Wiklander * arguments and return TEE_Result. 14*fc82e622SJens Wiklander */ 15*fc82e622SJens Wiklander typedef void (*syscall_t)(void); 16*fc82e622SJens Wiklander 17*fc82e622SJens Wiklander struct thread_scall_regs; 18*fc82e622SJens Wiklander 19*fc82e622SJens Wiklander /* Helper function for scall_handle_user_ta() and scall_handle_ldelf() */ 20*fc82e622SJens Wiklander uint32_t scall_do_call(struct thread_scall_regs *regs, syscall_t func); 21*fc82e622SJens Wiklander 22*fc82e622SJens Wiklander /* Registered as .handle_scall in struct tee_ta_ops for user TAs. */ 23*fc82e622SJens Wiklander bool scall_handle_user_ta(struct thread_scall_regs *regs); 24*fc82e622SJens Wiklander 25*fc82e622SJens Wiklander /* Separate syscall handler for calls from ldelf */ 26*fc82e622SJens Wiklander bool scall_handle_ldelf(struct thread_scall_regs *regs); 27*fc82e622SJens Wiklander 28*fc82e622SJens Wiklander /* 29*fc82e622SJens Wiklander * Called from the assembly functions syscall_sys_return() and 30*fc82e622SJens Wiklander * syscall_panic() to update the register values in the struct 31*fc82e622SJens Wiklander * thread_scall_regs to return back to TEE Core from an earlier call to 32*fc82e622SJens Wiklander * thread_enter_user_mode(). 33*fc82e622SJens Wiklander */ 34*fc82e622SJens Wiklander uint32_t scall_sys_return_helper(uint32_t ret, bool panic, uint32_t panic_code, 35*fc82e622SJens Wiklander struct thread_scall_regs *regs); 36*fc82e622SJens Wiklander 37*fc82e622SJens Wiklander /* Saves TA panic stack, arch-specific implementation */ 38*fc82e622SJens Wiklander void scall_save_panic_stack(struct thread_scall_regs *regs); 39*fc82e622SJens Wiklander 40*fc82e622SJens Wiklander #endif /*__KERNEL_SCALL_H*/ 41