1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #ifndef __ASM_SYSCALL_H 4 #define __ASM_SYSCALL_H 5 6 #include <linux/sched.h> 7 #include <linux/err.h> 8 #include <abi/regdef.h> 9 #include <uapi/linux/audit.h> 10 11 extern void *sys_call_table[]; 12 13 static inline int 14 syscall_get_nr(struct task_struct *task, struct pt_regs *regs) 15 { 16 return regs_syscallid(regs); 17 } 18 19 static inline void 20 syscall_set_nr(struct task_struct *task, struct pt_regs *regs, 21 int sysno) 22 { 23 regs_syscallid(regs) = sysno; 24 } 25 26 static inline void 27 syscall_rollback(struct task_struct *task, struct pt_regs *regs) 28 { 29 regs->a0 = regs->orig_a0; 30 } 31 32 static inline long 33 syscall_get_error(struct task_struct *task, struct pt_regs *regs) 34 { 35 unsigned long error = regs->a0; 36 37 return IS_ERR_VALUE(error) ? error : 0; 38 } 39 40 static inline long 41 syscall_get_return_value(struct task_struct *task, struct pt_regs *regs) 42 { 43 return regs->a0; 44 } 45 46 static inline void 47 syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, 48 int error, long val) 49 { 50 regs->a0 = (long) error ?: val; 51 } 52 53 static inline void 54 syscall_get_arguments(struct task_struct *task, struct pt_regs *regs, 55 unsigned long *args) 56 { 57 args[0] = regs->orig_a0; 58 args++; 59 memcpy(args, ®s->a1, 5 * sizeof(args[0])); 60 } 61 62 static inline void 63 syscall_set_arguments(struct task_struct *task, struct pt_regs *regs, 64 const unsigned long *args) 65 { 66 regs->orig_a0 = args[0]; 67 args++; 68 memcpy(®s->a1, args, 5 * sizeof(regs->a1)); 69 } 70 71 static inline int 72 syscall_get_arch(struct task_struct *task) 73 { 74 return AUDIT_ARCH_CSKY; 75 } 76 77 #endif /* __ASM_SYSCALL_H */ 78