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_set_nr(struct task_struct *tsk, 21 struct pt_regs *regs, 22 int nr) 23 { 24 regs->gr[20] = nr; 25 } 26 27 static inline void syscall_get_arguments(struct task_struct *tsk, 28 struct pt_regs *regs, 29 unsigned long *args) 30 { 31 args[5] = regs->gr[21]; 32 args[4] = regs->gr[22]; 33 args[3] = regs->gr[23]; 34 args[2] = regs->gr[24]; 35 args[1] = regs->gr[25]; 36 args[0] = regs->gr[26]; 37 } 38 39 static inline void syscall_set_arguments(struct task_struct *tsk, 40 struct pt_regs *regs, 41 unsigned long *args) 42 { 43 regs->gr[21] = args[5]; 44 regs->gr[22] = args[4]; 45 regs->gr[23] = args[3]; 46 regs->gr[24] = args[2]; 47 regs->gr[25] = args[1]; 48 regs->gr[26] = args[0]; 49 } 50 51 static inline long syscall_get_error(struct task_struct *task, 52 struct pt_regs *regs) 53 { 54 unsigned long error = regs->gr[28]; 55 return IS_ERR_VALUE(error) ? error : 0; 56 } 57 58 static inline long syscall_get_return_value(struct task_struct *task, 59 struct pt_regs *regs) 60 { 61 return regs->gr[28]; 62 } 63 64 static inline void syscall_set_return_value(struct task_struct *task, 65 struct pt_regs *regs, 66 int error, long val) 67 { 68 regs->gr[28] = error ? error : val; 69 } 70 71 static inline void syscall_rollback(struct task_struct *task, 72 struct pt_regs *regs) 73 { 74 /* do nothing */ 75 } 76 77 static inline int syscall_get_arch(struct task_struct *task) 78 { 79 int arch = AUDIT_ARCH_PARISC; 80 #ifdef CONFIG_64BIT 81 if (!__is_compat_task(task)) 82 arch = AUDIT_ARCH_PARISC64; 83 #endif 84 return arch; 85 } 86 #endif /*_ASM_PARISC_SYSCALL_H_*/ 87