Merge tag 'for-linus-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw...
[linux-2.6-block.git] / arch / powerpc / include / asm / syscall_wrapper.h
CommitLineData
7e92e01b
RM
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * syscall_wrapper.h - powerpc specific wrappers to syscall definitions
4 *
5 * Based on arch/{x86,arm64}/include/asm/syscall_wrapper.h
6 */
7
8#ifndef __ASM_POWERPC_SYSCALL_WRAPPER_H
9#define __ASM_POWERPC_SYSCALL_WRAPPER_H
10
11struct pt_regs;
12
13#define SC_POWERPC_REGS_TO_ARGS(x, ...) \
14 __MAP(x,__SC_ARGS \
15 ,,regs->gpr[3],,regs->gpr[4],,regs->gpr[5] \
16 ,,regs->gpr[6],,regs->gpr[7],,regs->gpr[8])
17
18#define __SYSCALL_DEFINEx(x, name, ...) \
94746890
ME
19 long sys##name(const struct pt_regs *regs); \
20 ALLOW_ERROR_INJECTION(sys##name, ERRNO); \
7e92e01b
RM
21 static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
22 static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
94746890 23 long sys##name(const struct pt_regs *regs) \
7e92e01b
RM
24 { \
25 return __se_sys##name(SC_POWERPC_REGS_TO_ARGS(x,__VA_ARGS__)); \
26 } \
27 static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
28 { \
29 long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \
30 __MAP(x,__SC_TEST,__VA_ARGS__); \
31 __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
32 return ret; \
33 } \
34 static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
35
36#define SYSCALL_DEFINE0(sname) \
37 SYSCALL_METADATA(_##sname, 0); \
94746890
ME
38 long sys_##sname(const struct pt_regs *__unused); \
39 ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \
40 long sys_##sname(const struct pt_regs *__unused)
7e92e01b
RM
41
42#define COND_SYSCALL(name) \
94746890
ME
43 long sys_##name(const struct pt_regs *regs); \
44 long __weak sys_##name(const struct pt_regs *regs) \
7e92e01b
RM
45 { \
46 return sys_ni_syscall(); \
47 }
48
7e92e01b 49#endif // __ASM_POWERPC_SYSCALL_WRAPPER_H