Linux Audio

Check our new training course

Loading...
v6.9.4
 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, ...)						\
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
v6.13.7
 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, ...)						\
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