xref: /linux/arch/m68k/include/asm/syscall.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
192f922f3SDmitry V. Levin /* SPDX-License-Identifier: GPL-2.0 */
292f922f3SDmitry V. Levin #ifndef _ASM_M68K_SYSCALL_H
392f922f3SDmitry V. Levin #define _ASM_M68K_SYSCALL_H
492f922f3SDmitry V. Levin 
592f922f3SDmitry V. Levin #include <uapi/linux/audit.h>
692f922f3SDmitry V. Levin 
7*6baaade1SMichael Schmitz #include <asm/unistd.h>
8*6baaade1SMichael Schmitz 
9*6baaade1SMichael Schmitz extern const unsigned long sys_call_table[];
10*6baaade1SMichael Schmitz 
syscall_get_nr(struct task_struct * task,struct pt_regs * regs)11*6baaade1SMichael Schmitz static inline int syscall_get_nr(struct task_struct *task,
12*6baaade1SMichael Schmitz 				 struct pt_regs *regs)
13*6baaade1SMichael Schmitz {
14*6baaade1SMichael Schmitz 	return regs->orig_d0;
15*6baaade1SMichael Schmitz }
16*6baaade1SMichael Schmitz 
syscall_rollback(struct task_struct * task,struct pt_regs * regs)17*6baaade1SMichael Schmitz static inline void syscall_rollback(struct task_struct *task,
18*6baaade1SMichael Schmitz 				    struct pt_regs *regs)
19*6baaade1SMichael Schmitz {
20*6baaade1SMichael Schmitz 	regs->d0 = regs->orig_d0;
21*6baaade1SMichael Schmitz }
22*6baaade1SMichael Schmitz 
syscall_get_error(struct task_struct * task,struct pt_regs * regs)23*6baaade1SMichael Schmitz static inline long syscall_get_error(struct task_struct *task,
24*6baaade1SMichael Schmitz 				     struct pt_regs *regs)
25*6baaade1SMichael Schmitz {
26*6baaade1SMichael Schmitz 	unsigned long error = regs->d0;
27*6baaade1SMichael Schmitz 
28*6baaade1SMichael Schmitz 	return IS_ERR_VALUE(error) ? error : 0;
29*6baaade1SMichael Schmitz }
30*6baaade1SMichael Schmitz 
syscall_get_return_value(struct task_struct * task,struct pt_regs * regs)31*6baaade1SMichael Schmitz static inline long syscall_get_return_value(struct task_struct *task,
32*6baaade1SMichael Schmitz 					    struct pt_regs *regs)
33*6baaade1SMichael Schmitz {
34*6baaade1SMichael Schmitz 	return regs->d0;
35*6baaade1SMichael Schmitz }
36*6baaade1SMichael Schmitz 
syscall_set_return_value(struct task_struct * task,struct pt_regs * regs,int error,long val)37*6baaade1SMichael Schmitz static inline void syscall_set_return_value(struct task_struct *task,
38*6baaade1SMichael Schmitz 					    struct pt_regs *regs,
39*6baaade1SMichael Schmitz 					    int error, long val)
40*6baaade1SMichael Schmitz {
41*6baaade1SMichael Schmitz 	regs->d0 = (long)error ?: val;
42*6baaade1SMichael Schmitz }
43*6baaade1SMichael Schmitz 
syscall_get_arguments(struct task_struct * task,struct pt_regs * regs,unsigned long * args)44*6baaade1SMichael Schmitz static inline void syscall_get_arguments(struct task_struct *task,
45*6baaade1SMichael Schmitz 					 struct pt_regs *regs,
46*6baaade1SMichael Schmitz 					 unsigned long *args)
47*6baaade1SMichael Schmitz {
48*6baaade1SMichael Schmitz 	args[0] = regs->orig_d0;
49*6baaade1SMichael Schmitz 	args++;
50*6baaade1SMichael Schmitz 
51*6baaade1SMichael Schmitz 	memcpy(args, &regs->d1, 5 * sizeof(args[0]));
52*6baaade1SMichael Schmitz }
53*6baaade1SMichael Schmitz 
syscall_set_arguments(struct task_struct * task,struct pt_regs * regs,unsigned long * args)54*6baaade1SMichael Schmitz static inline void syscall_set_arguments(struct task_struct *task,
55*6baaade1SMichael Schmitz 					 struct pt_regs *regs,
56*6baaade1SMichael Schmitz 					 unsigned long *args)
57*6baaade1SMichael Schmitz {
58*6baaade1SMichael Schmitz 	regs->orig_d0 = args[0];
59*6baaade1SMichael Schmitz 	args++;
60*6baaade1SMichael Schmitz 
61*6baaade1SMichael Schmitz 	memcpy(&regs->d1, args, 5 * sizeof(args[0]));
62*6baaade1SMichael Schmitz }
63*6baaade1SMichael Schmitz 
syscall_get_arch(struct task_struct * task)6416add411SDmitry V. Levin static inline int syscall_get_arch(struct task_struct *task)
6592f922f3SDmitry V. Levin {
6692f922f3SDmitry V. Levin 	return AUDIT_ARCH_M68K;
6792f922f3SDmitry V. Levin }
6892f922f3SDmitry V. Levin 
6992f922f3SDmitry V. Levin #endif	/* _ASM_M68K_SYSCALL_H */
70