xref: /linux/arch/parisc/include/asm/syscall.h (revision 0898782247ae533d1f4e47a06bc5d4870931b284)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
240e03b68SKyle McMartin /* syscall.h */
340e03b68SKyle McMartin 
440e03b68SKyle McMartin #ifndef _ASM_PARISC_SYSCALL_H_
540e03b68SKyle McMartin #define _ASM_PARISC_SYSCALL_H_
640e03b68SKyle McMartin 
7ce5d1128SEric Paris #include <uapi/linux/audit.h>
8ce5d1128SEric Paris #include <linux/compat.h>
940e03b68SKyle McMartin #include <linux/err.h>
1040e03b68SKyle McMartin #include <asm/ptrace.h>
1140e03b68SKyle McMartin 
12fc79168aSHelge Deller #define NR_syscalls (__NR_Linux_syscalls)
13fc79168aSHelge Deller 
syscall_get_nr(struct task_struct * tsk,struct pt_regs * regs)1440e03b68SKyle McMartin static inline long syscall_get_nr(struct task_struct *tsk,
1540e03b68SKyle McMartin 				  struct pt_regs *regs)
1640e03b68SKyle McMartin {
1740e03b68SKyle McMartin 	return regs->gr[20];
1840e03b68SKyle McMartin }
1940e03b68SKyle McMartin 
syscall_get_arguments(struct task_struct * tsk,struct pt_regs * regs,unsigned long * args)2040e03b68SKyle McMartin static inline void syscall_get_arguments(struct task_struct *tsk,
21b35f549dSSteven Rostedt (Red Hat) 					 struct pt_regs *regs,
22b35f549dSSteven Rostedt (Red Hat) 					 unsigned long *args)
2340e03b68SKyle McMartin {
2440e03b68SKyle McMartin 	args[5] = regs->gr[21];
2540e03b68SKyle McMartin 	args[4] = regs->gr[22];
2640e03b68SKyle McMartin 	args[3] = regs->gr[23];
2740e03b68SKyle McMartin 	args[2] = regs->gr[24];
2840e03b68SKyle McMartin 	args[1] = regs->gr[25];
2940e03b68SKyle McMartin 	args[0] = regs->gr[26];
3040e03b68SKyle McMartin }
3140e03b68SKyle McMartin 
syscall_get_error(struct task_struct * task,struct pt_regs * regs)32*2938c1f8SDmitry V. Levin static inline long syscall_get_error(struct task_struct *task,
33*2938c1f8SDmitry V. Levin 				     struct pt_regs *regs)
34*2938c1f8SDmitry V. Levin {
35*2938c1f8SDmitry V. Levin 	unsigned long error = regs->gr[28];
36*2938c1f8SDmitry V. Levin 	return IS_ERR_VALUE(error) ? error : 0;
37*2938c1f8SDmitry V. Levin }
38*2938c1f8SDmitry V. Levin 
syscall_get_return_value(struct task_struct * task,struct pt_regs * regs)39fc79168aSHelge Deller static inline long syscall_get_return_value(struct task_struct *task,
40fc79168aSHelge Deller 						struct pt_regs *regs)
41fc79168aSHelge Deller {
42fc79168aSHelge Deller 	return regs->gr[28];
43fc79168aSHelge Deller }
44fc79168aSHelge Deller 
syscall_set_return_value(struct task_struct * task,struct pt_regs * regs,int error,long val)45910cd32eSHelge Deller static inline void syscall_set_return_value(struct task_struct *task,
46910cd32eSHelge Deller 					    struct pt_regs *regs,
47910cd32eSHelge Deller 					    int error, long val)
48910cd32eSHelge Deller {
49910cd32eSHelge Deller 	regs->gr[28] = error ? error : val;
50910cd32eSHelge Deller }
51910cd32eSHelge Deller 
syscall_rollback(struct task_struct * task,struct pt_regs * regs)52910cd32eSHelge Deller static inline void syscall_rollback(struct task_struct *task,
53910cd32eSHelge Deller 				    struct pt_regs *regs)
54910cd32eSHelge Deller {
55910cd32eSHelge Deller 	/* do nothing */
56910cd32eSHelge Deller }
57910cd32eSHelge Deller 
syscall_get_arch(struct task_struct * task)5816add411SDmitry V. Levin static inline int syscall_get_arch(struct task_struct *task)
59ce5d1128SEric Paris {
60ce5d1128SEric Paris 	int arch = AUDIT_ARCH_PARISC;
61ce5d1128SEric Paris #ifdef CONFIG_64BIT
6216add411SDmitry V. Levin 	if (!__is_compat_task(task))
63ce5d1128SEric Paris 		arch = AUDIT_ARCH_PARISC64;
64ce5d1128SEric Paris #endif
65ce5d1128SEric Paris 	return arch;
66ce5d1128SEric Paris }
6740e03b68SKyle McMartin #endif /*_ASM_PARISC_SYSCALL_H_*/
68