162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#ifndef __ASM_SYSCALL_H 462306a36Sopenharmony_ci#define __ASM_SYSCALL_H 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/sched.h> 762306a36Sopenharmony_ci#include <linux/err.h> 862306a36Sopenharmony_ci#include <abi/regdef.h> 962306a36Sopenharmony_ci#include <uapi/linux/audit.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ciextern void *sys_call_table[]; 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistatic inline int 1462306a36Sopenharmony_cisyscall_get_nr(struct task_struct *task, struct pt_regs *regs) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci return regs_syscallid(regs); 1762306a36Sopenharmony_ci} 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic inline void 2062306a36Sopenharmony_cisyscall_set_nr(struct task_struct *task, struct pt_regs *regs, 2162306a36Sopenharmony_ci int sysno) 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci regs_syscallid(regs) = sysno; 2462306a36Sopenharmony_ci} 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistatic inline void 2762306a36Sopenharmony_cisyscall_rollback(struct task_struct *task, struct pt_regs *regs) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci regs->a0 = regs->orig_a0; 3062306a36Sopenharmony_ci} 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistatic inline long 3362306a36Sopenharmony_cisyscall_get_error(struct task_struct *task, struct pt_regs *regs) 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci unsigned long error = regs->a0; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci return IS_ERR_VALUE(error) ? error : 0; 3862306a36Sopenharmony_ci} 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic inline long 4162306a36Sopenharmony_cisyscall_get_return_value(struct task_struct *task, struct pt_regs *regs) 4262306a36Sopenharmony_ci{ 4362306a36Sopenharmony_ci return regs->a0; 4462306a36Sopenharmony_ci} 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cistatic inline void 4762306a36Sopenharmony_cisyscall_set_return_value(struct task_struct *task, struct pt_regs *regs, 4862306a36Sopenharmony_ci int error, long val) 4962306a36Sopenharmony_ci{ 5062306a36Sopenharmony_ci regs->a0 = (long) error ?: val; 5162306a36Sopenharmony_ci} 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistatic inline void 5462306a36Sopenharmony_cisyscall_get_arguments(struct task_struct *task, struct pt_regs *regs, 5562306a36Sopenharmony_ci unsigned long *args) 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci args[0] = regs->orig_a0; 5862306a36Sopenharmony_ci args++; 5962306a36Sopenharmony_ci memcpy(args, ®s->a1, 5 * sizeof(args[0])); 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistatic inline int 6362306a36Sopenharmony_cisyscall_get_arch(struct task_struct *task) 6462306a36Sopenharmony_ci{ 6562306a36Sopenharmony_ci return AUDIT_ARCH_CSKY; 6662306a36Sopenharmony_ci} 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#endif /* __ASM_SYSCALL_H */ 69