Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * syscall_wrapper.h - s390 specific wrappers to syscall definitions
4 *
5 */
6
7#ifndef _ASM_S390_SYSCALL_WRAPPER_H
8#define _ASM_S390_SYSCALL_WRAPPER_H
9
10/* Mapping of registers to parameters for syscalls */
11#define SC_S390_REGS_TO_ARGS(x, ...) \
12 __MAP(x, __SC_ARGS \
13 ,, regs->orig_gpr2,, regs->gprs[3],, regs->gprs[4] \
14 ,, regs->gprs[5],, regs->gprs[6],, regs->gprs[7])
15
16#define SYSCALL_DEFINE0(sname) \
17 SYSCALL_METADATA(_##sname, 0); \
18 long __s390x_sys_##sname(struct pt_regs *__unused); \
19 ALLOW_ERROR_INJECTION(__s390x_sys_##sname, ERRNO); \
20 static inline long __do_sys_##sname(void); \
21 long __s390x_sys_##sname(struct pt_regs *__unused) \
22 { \
23 return __do_sys_##sname(); \
24 } \
25 static inline long __do_sys_##sname(void)
26
27#define COND_SYSCALL(name) \
28 cond_syscall(__s390x_sys_##name)
29
30#define __S390_SYS_STUBx(x, fullname, name, ...)
31
32#define __SYSCALL_DEFINEx(x, name, ...) \
33 long __s390x_sys##name(struct pt_regs *regs); \
34 ALLOW_ERROR_INJECTION(__s390x_sys##name, ERRNO); \
35 static inline long __se_sys##name(__MAP(x, __SC_LONG, __VA_ARGS__)); \
36 static inline long __do_sys##name(__MAP(x, __SC_DECL, __VA_ARGS__)); \
37 __S390_SYS_STUBx(x, name, __VA_ARGS__); \
38 long __s390x_sys##name(struct pt_regs *regs) \
39 { \
40 return __se_sys##name(SC_S390_REGS_TO_ARGS(x, __VA_ARGS__)); \
41 } \
42 static inline long __se_sys##name(__MAP(x, __SC_LONG, __VA_ARGS__)) \
43 { \
44 __MAP(x, __SC_TEST, __VA_ARGS__); \
45 return __do_sys##name(__MAP(x, __SC_CAST, __VA_ARGS__)); \
46 } \
47 static inline long __do_sys##name(__MAP(x, __SC_DECL, __VA_ARGS__))
48
49#endif /* _ASM_S390_SYSCALL_WRAPPER_H */