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 11 struct 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, ...) \ 19 long sys##name(const struct pt_regs *regs); \ 20 ALLOW_ERROR_INJECTION(sys##name, ERRNO); \ 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__)); \ 23 long sys##name(const struct pt_regs *regs) \ 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); \ 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) 41 42 #define COND_SYSCALL(name) \ 43 long sys_##name(const struct pt_regs *regs); \ 44 long __weak sys_##name(const struct pt_regs *regs) \ 45 { \ 46 return sys_ni_syscall(); \ 47 } 48 49 #endif // __ASM_POWERPC_SYSCALL_WRAPPER_H 50