xref: /optee_os/core/arch/riscv/include/kernel/arch_scall.h (revision 50f17a34bbb8aa3a1ffc3fc778c32aa0afdcb5c4)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright 2022-2023 NXP
4  */
5 
6 #ifndef __KERNEL_ARCH_SCALL_H
7 #define __KERNEL_ARCH_SCALL_H
8 
9 #include <kernel/thread.h>
10 #include <riscv.h>
11 #include <types_ext.h>
12 
scall_get_max_args(struct thread_scall_regs * regs,size_t * scn,size_t * max_args)13 static inline void scall_get_max_args(struct thread_scall_regs *regs,
14 				      size_t *scn, size_t *max_args)
15 {
16 	*scn = regs->t0;
17 	*max_args = regs->t1;
18 }
19 
scall_set_retval(struct thread_scall_regs * regs,uint32_t ret_val)20 static inline void scall_set_retval(struct thread_scall_regs *regs,
21 				    uint32_t ret_val)
22 {
23 	regs->a0 = ret_val;
24 }
25 
scall_set_sys_return_regs(struct thread_scall_regs * regs,bool panic,uint32_t panic_code)26 static inline void scall_set_sys_return_regs(struct thread_scall_regs *regs,
27 					     bool panic, uint32_t panic_code)
28 {
29 	regs->a1 = panic;
30 	regs->a2 = panic_code;
31 }
32 
33 #endif /*__KERNEL_ARCH_SCALL_H*/
34