1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Syscall support for the Hexagon architecture 4 * 5 * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. 6 */ 7 8 #ifndef _ASM_HEXAGON_SYSCALL_H 9 #define _ASM_HEXAGON_SYSCALL_H 10 11 #include <uapi/linux/audit.h> 12 #include <linux/err.h> 13 #include <asm/ptrace.h> 14 15 typedef long (*syscall_fn)(unsigned long, unsigned long, 16 unsigned long, unsigned long, 17 unsigned long, unsigned long); 18 19 #include <asm-generic/syscalls.h> 20 21 extern void *sys_call_table[]; 22 23 static inline long syscall_get_nr(struct task_struct *task, 24 struct pt_regs *regs) 25 { 26 return regs->r06; 27 } 28 29 static inline void syscall_set_nr(struct task_struct *task, 30 struct pt_regs *regs, 31 int nr) 32 { 33 regs->r06 = nr; 34 } 35 36 static inline void syscall_get_arguments(struct task_struct *task, 37 struct pt_regs *regs, 38 unsigned long *args) 39 { 40 memcpy(args, &(®s->r00)[0], 6 * sizeof(args[0])); 41 } 42 43 static inline void syscall_set_arguments(struct task_struct *task, 44 struct pt_regs *regs, 45 unsigned long *args) 46 { 47 memcpy(&(®s->r00)[0], args, 6 * sizeof(args[0])); 48 } 49 50 static inline long syscall_get_error(struct task_struct *task, 51 struct pt_regs *regs) 52 { 53 return IS_ERR_VALUE(regs->r00) ? regs->r00 : 0; 54 } 55 56 static inline long syscall_get_return_value(struct task_struct *task, 57 struct pt_regs *regs) 58 { 59 return regs->r00; 60 } 61 62 static inline void syscall_set_return_value(struct task_struct *task, 63 struct pt_regs *regs, 64 int error, long val) 65 { 66 regs->r00 = (long) error ?: val; 67 } 68 69 static inline int syscall_get_arch(struct task_struct *task) 70 { 71 return AUDIT_ARCH_HEXAGON; 72 } 73 74 #endif 75