xref: /optee_os/core/include/kernel/scall.h (revision fc82e622bbf3ff4675437ff0b25b6005afcea229)
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