.. | .. |
---|
1 | 1 | /* |
---|
2 | | - * include/asm-xtensa/syscall.h |
---|
3 | | - * |
---|
4 | 2 | * This file is subject to the terms and conditions of the GNU General Public |
---|
5 | 3 | * License. See the file "COPYING" in the main directory of this archive |
---|
6 | 4 | * for more details. |
---|
7 | 5 | * |
---|
8 | 6 | * Copyright (C) 2001 - 2007 Tensilica Inc. |
---|
| 7 | + * Copyright (C) 2018 Cadence Design Systems Inc. |
---|
9 | 8 | */ |
---|
10 | 9 | |
---|
11 | | -struct pt_regs; |
---|
12 | | -asmlinkage long xtensa_ptrace(long, long, long, long); |
---|
13 | | -asmlinkage long xtensa_sigreturn(struct pt_regs*); |
---|
14 | | -asmlinkage long xtensa_rt_sigreturn(struct pt_regs*); |
---|
| 10 | +#ifndef _ASM_SYSCALL_H |
---|
| 11 | +#define _ASM_SYSCALL_H |
---|
| 12 | + |
---|
| 13 | +#include <linux/err.h> |
---|
| 14 | +#include <asm/ptrace.h> |
---|
| 15 | +#include <uapi/linux/audit.h> |
---|
| 16 | + |
---|
| 17 | +static inline int syscall_get_arch(struct task_struct *task) |
---|
| 18 | +{ |
---|
| 19 | + return AUDIT_ARCH_XTENSA; |
---|
| 20 | +} |
---|
| 21 | + |
---|
| 22 | +typedef void (*syscall_t)(void); |
---|
| 23 | +extern syscall_t sys_call_table[]; |
---|
| 24 | + |
---|
| 25 | +static inline long syscall_get_nr(struct task_struct *task, |
---|
| 26 | + struct pt_regs *regs) |
---|
| 27 | +{ |
---|
| 28 | + return regs->syscall; |
---|
| 29 | +} |
---|
| 30 | + |
---|
| 31 | +static inline void syscall_rollback(struct task_struct *task, |
---|
| 32 | + struct pt_regs *regs) |
---|
| 33 | +{ |
---|
| 34 | + /* Do nothing. */ |
---|
| 35 | +} |
---|
| 36 | + |
---|
| 37 | +static inline long syscall_get_error(struct task_struct *task, |
---|
| 38 | + struct pt_regs *regs) |
---|
| 39 | +{ |
---|
| 40 | + /* 0 if syscall succeeded, otherwise -Errorcode */ |
---|
| 41 | + return IS_ERR_VALUE(regs->areg[2]) ? regs->areg[2] : 0; |
---|
| 42 | +} |
---|
| 43 | + |
---|
| 44 | +static inline long syscall_get_return_value(struct task_struct *task, |
---|
| 45 | + struct pt_regs *regs) |
---|
| 46 | +{ |
---|
| 47 | + return regs->areg[2]; |
---|
| 48 | +} |
---|
| 49 | + |
---|
| 50 | +static inline void syscall_set_return_value(struct task_struct *task, |
---|
| 51 | + struct pt_regs *regs, |
---|
| 52 | + int error, long val) |
---|
| 53 | +{ |
---|
| 54 | + regs->areg[2] = (long) error ? error : val; |
---|
| 55 | +} |
---|
| 56 | + |
---|
| 57 | +#define SYSCALL_MAX_ARGS 6 |
---|
| 58 | +#define XTENSA_SYSCALL_ARGUMENT_REGS {6, 3, 4, 5, 8, 9} |
---|
| 59 | + |
---|
| 60 | +static inline void syscall_get_arguments(struct task_struct *task, |
---|
| 61 | + struct pt_regs *regs, |
---|
| 62 | + unsigned long *args) |
---|
| 63 | +{ |
---|
| 64 | + static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS; |
---|
| 65 | + unsigned int i; |
---|
| 66 | + |
---|
| 67 | + for (i = 0; i < 6; ++i) |
---|
| 68 | + args[i] = regs->areg[reg[i]]; |
---|
| 69 | +} |
---|
| 70 | + |
---|
| 71 | +static inline void syscall_set_arguments(struct task_struct *task, |
---|
| 72 | + struct pt_regs *regs, |
---|
| 73 | + const unsigned long *args) |
---|
| 74 | +{ |
---|
| 75 | + static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS; |
---|
| 76 | + unsigned int i; |
---|
| 77 | + |
---|
| 78 | + for (i = 0; i < 6; ++i) |
---|
| 79 | + regs->areg[reg[i]] = args[i]; |
---|
| 80 | +} |
---|
| 81 | + |
---|
| 82 | +asmlinkage long xtensa_rt_sigreturn(void); |
---|
15 | 83 | asmlinkage long xtensa_shmat(int, char __user *, int); |
---|
16 | 84 | asmlinkage long xtensa_fadvise64_64(int, int, |
---|
17 | 85 | unsigned long long, unsigned long long); |
---|
18 | 86 | |
---|
19 | | -/* Should probably move to linux/syscalls.h */ |
---|
20 | | -struct pollfd; |
---|
21 | | -asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp, |
---|
22 | | - fd_set __user *exp, struct timespec __user *tsp, |
---|
23 | | - void __user *sig); |
---|
24 | | -asmlinkage long sys_ppoll(struct pollfd __user *ufds, unsigned int nfds, |
---|
25 | | - struct timespec __user *tsp, |
---|
26 | | - const sigset_t __user *sigmask, |
---|
27 | | - size_t sigsetsize); |
---|
| 87 | +#endif |
---|