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, unsigned int i, 22 unsigned int n, unsigned long *args) 23 { 24 BUG_ON(i); 25 26 switch (n) { 27 case 6: 28 args[5] = regs->gr[21]; 29 case 5: 30 args[4] = regs->gr[22]; 31 case 4: 32 args[3] = regs->gr[23]; 33 case 3: 34 args[2] = regs->gr[24]; 35 case 2: 36 args[1] = regs->gr[25]; 37 case 1: 38 args[0] = regs->gr[26]; 39 case 0: 40 break; 41 default: 42 BUG(); 43 } 44 } 45 46 static inline long syscall_get_return_value(struct task_struct *task, 47 struct pt_regs *regs) 48 { 49 return regs->gr[28]; 50 } 51 52 static inline void syscall_set_return_value(struct task_struct *task, 53 struct pt_regs *regs, 54 int error, long val) 55 { 56 regs->gr[28] = error ? error : val; 57 } 58 59 static inline void syscall_rollback(struct task_struct *task, 60 struct pt_regs *regs) 61 { 62 /* do nothing */ 63 } 64 65 static inline int syscall_get_arch(void) 66 { 67 int arch = AUDIT_ARCH_PARISC; 68 #ifdef CONFIG_64BIT 69 if (!is_compat_task()) 70 arch = AUDIT_ARCH_PARISC64; 71 #endif 72 return arch; 73 } 74 #endif /*_ASM_PARISC_SYSCALL_H_*/ 75