xref: /openbmc/linux/arch/ia64/include/asm/syscall.h (revision 9cf0666f)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Access to user system call parameters and results
4  *
5  * Copyright (C) 2008 Intel Corp.  Shaohua Li <shaohua.li@intel.com>
6  *
7  * See asm-generic/syscall.h for descriptions of what we must do here.
8  */
9 
10 #ifndef _ASM_SYSCALL_H
11 #define _ASM_SYSCALL_H	1
12 
13 #include <uapi/linux/audit.h>
14 #include <linux/sched.h>
15 #include <linux/err.h>
16 
17 static inline long syscall_get_nr(struct task_struct *task,
18 				  struct pt_regs *regs)
19 {
20 	if ((long)regs->cr_ifs < 0) /* Not a syscall */
21 		return -1;
22 
23 	return regs->r15;
24 }
25 
26 static inline void syscall_rollback(struct task_struct *task,
27 				    struct pt_regs *regs)
28 {
29 	/* do nothing */
30 }
31 
32 static inline long syscall_get_error(struct task_struct *task,
33 				     struct pt_regs *regs)
34 {
35 	return regs->r10 == -1 ? -regs->r8:0;
36 }
37 
38 static inline long syscall_get_return_value(struct task_struct *task,
39 					    struct pt_regs *regs)
40 {
41 	return regs->r8;
42 }
43 
44 static inline void syscall_set_return_value(struct task_struct *task,
45 					    struct pt_regs *regs,
46 					    int error, long val)
47 {
48 	if (error) {
49 		/* error < 0, but ia64 uses > 0 return value */
50 		regs->r8 = -error;
51 		regs->r10 = -1;
52 	} else {
53 		regs->r8 = val;
54 		regs->r10 = 0;
55 	}
56 }
57 
58 extern void syscall_get_arguments(struct task_struct *task,
59 	struct pt_regs *regs, unsigned long *args);
60 
61 static inline int syscall_get_arch(struct task_struct *task)
62 {
63 	return AUDIT_ARCH_IA64;
64 }
65 #endif	/* _ASM_SYSCALL_H */
66