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