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