1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Copyright (C) 2011 Texas Instruments Incorporated 4 * Author: Mark Salter <msalter@redhat.com> 5 */ 6 7#ifndef __ASM_C6X_SYSCALL_H 8#define __ASM_C6X_SYSCALL_H 9 10#include <uapi/linux/audit.h> 11#include <linux/err.h> 12#include <linux/sched.h> 13 14static inline int syscall_get_nr(struct task_struct *task, 15 struct pt_regs *regs) 16{ 17 return regs->b0; 18} 19 20static inline void syscall_rollback(struct task_struct *task, 21 struct pt_regs *regs) 22{ 23 /* do nothing */ 24} 25 26static inline long syscall_get_error(struct task_struct *task, 27 struct pt_regs *regs) 28{ 29 return IS_ERR_VALUE(regs->a4) ? regs->a4 : 0; 30} 31 32static inline long syscall_get_return_value(struct task_struct *task, 33 struct pt_regs *regs) 34{ 35 return regs->a4; 36} 37 38static inline void syscall_set_return_value(struct task_struct *task, 39 struct pt_regs *regs, 40 int error, long val) 41{ 42 regs->a4 = error ?: val; 43} 44 45static inline void syscall_get_arguments(struct task_struct *task, 46 struct pt_regs *regs, 47 unsigned long *args) 48{ 49 *args++ = regs->a4; 50 *args++ = regs->b4; 51 *args++ = regs->a6; 52 *args++ = regs->b6; 53 *args++ = regs->a8; 54 *args = regs->b8; 55} 56 57static inline void syscall_set_arguments(struct task_struct *task, 58 struct pt_regs *regs, 59 const unsigned long *args) 60{ 61 regs->a4 = *args++; 62 regs->b4 = *args++; 63 regs->a6 = *args++; 64 regs->b6 = *args++; 65 regs->a8 = *args++; 66 regs->a9 = *args; 67} 68 69static inline int syscall_get_arch(struct task_struct *task) 70{ 71 return IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) 72 ? AUDIT_ARCH_C6XBE : AUDIT_ARCH_C6X; 73} 74 75#endif /* __ASM_C6X_SYSCALLS_H */ 76