]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - arch/arc/include/asm/syscall.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
[mirror_ubuntu-jammy-kernel.git] / arch / arc / include / asm / syscall.h
CommitLineData
d2912cb1 1/* SPDX-License-Identifier: GPL-2.0-only */
4adeefe1
VG
2/*
3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
4adeefe1
VG
4 */
5
6#ifndef _ASM_ARC_SYSCALL_H
7#define _ASM_ARC_SYSCALL_H 1
8
67f2a8a2 9#include <uapi/linux/audit.h>
4adeefe1
VG
10#include <linux/err.h>
11#include <linux/sched.h>
12#include <asm/unistd.h>
13#include <asm/ptrace.h> /* in_syscall() */
14
15static inline long
16syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
17{
18 if (user_mode(regs) && in_syscall(regs))
352c1d95 19 return regs->r8;
4adeefe1
VG
20 else
21 return -1;
22}
23
24static inline void
25syscall_rollback(struct task_struct *task, struct pt_regs *regs)
26{
352c1d95 27 regs->r0 = regs->orig_r0;
4adeefe1
VG
28}
29
30static inline long
31syscall_get_error(struct task_struct *task, struct pt_regs *regs)
32{
33 /* 0 if syscall succeeded, otherwise -Errorcode */
34 return IS_ERR_VALUE(regs->r0) ? regs->r0 : 0;
35}
36
37static inline long
38syscall_get_return_value(struct task_struct *task, struct pt_regs *regs)
39{
40 return regs->r0;
41}
42
43static inline void
44syscall_set_return_value(struct task_struct *task, struct pt_regs *regs,
45 int error, long val)
46{
47 regs->r0 = (long) error ?: val;
48}
49
50/*
51 * @i: argument index [0,5]
52 * @n: number of arguments; n+i must be [1,6].
53 */
54static inline void
55syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
b35f549d 56 unsigned long *args)
4adeefe1
VG
57{
58 unsigned long *inside_ptregs = &(regs->r0);
b35f549d
SRRH
59 unsigned int n = 6;
60 unsigned int i = 0;
4adeefe1
VG
61
62 while (n--) {
63 args[i++] = (*inside_ptregs);
64 inside_ptregs--;
65 }
66}
67
67f2a8a2 68static inline int
16add411 69syscall_get_arch(struct task_struct *task)
67f2a8a2
DL
70{
71 return IS_ENABLED(CONFIG_ISA_ARCOMPACT)
72 ? (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)
73 ? AUDIT_ARCH_ARCOMPACTBE : AUDIT_ARCH_ARCOMPACT)
74 : (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)
75 ? AUDIT_ARCH_ARCV2BE : AUDIT_ARCH_ARCV2);
76}
77
4adeefe1 78#endif