1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* syscall.h */ 3 4 #ifndef _ASM_PARISC_SYSCALL_H_ 5 #define _ASM_PARISC_SYSCALL_H_ 6 7 #include <uapi/linux/audit.h> 8 #include <linux/compat.h> 9 #include <linux/err.h> 10 #include <asm/ptrace.h> 11 12 #define NR_syscalls (__NR_Linux_syscalls) 13 14 static inline long syscall_get_nr(struct task_struct *tsk, 15 struct pt_regs *regs) 16 { 17 return regs->gr[20]; 18 } 19 20 static inline void syscall_get_arguments(struct task_struct *tsk, 21 struct pt_regs *regs, 22 unsigned long *args) 23 { 24 args[5] = regs->gr[21]; 25 args[4] = regs->gr[22]; 26 args[3] = regs->gr[23]; 27 args[2] = regs->gr[24]; 28 args[1] = regs->gr[25]; 29 args[0] = regs->gr[26]; 30 } 31 32 static inline long syscall_get_return_value(struct task_struct *task, 33 struct pt_regs *regs) 34 { 35 return regs->gr[28]; 36 } 37 38 static inline void syscall_set_return_value(struct task_struct *task, 39 struct pt_regs *regs, 40 int error, long val) 41 { 42 regs->gr[28] = error ? error : val; 43 } 44 45 static inline void syscall_rollback(struct task_struct *task, 46 struct pt_regs *regs) 47 { 48 /* do nothing */ 49 } 50 51 static inline int syscall_get_arch(struct task_struct *task) 52 { 53 int arch = AUDIT_ARCH_PARISC; 54 #ifdef CONFIG_64BIT 55 if (!__is_compat_task(task)) 56 arch = AUDIT_ARCH_PARISC64; 57 #endif 58 return arch; 59 } 60 #endif /*_ASM_PARISC_SYSCALL_H_*/ 61