2007-08-03 15:55:07 -07:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 2001 - 2007 Tensilica Inc .
2018-11-09 14:39:24 -08:00
* Copyright ( C ) 2018 Cadence Design Systems Inc .
2007-08-03 15:55:07 -07:00
*/
2018-11-09 14:39:24 -08:00
# ifndef _ASM_SYSCALL_H
# define _ASM_SYSCALL_H
2018-11-09 15:45:53 -08:00
# include <linux/err.h>
# include <asm/ptrace.h>
2018-11-20 03:17:01 +03:00
# include <uapi/linux/audit.h>
2019-03-18 02:30:18 +03:00
static inline int syscall_get_arch ( struct task_struct * task )
2018-11-20 03:17:01 +03:00
{
return AUDIT_ARCH_XTENSA ;
}
2018-11-11 21:51:49 -08:00
typedef void ( * syscall_t ) ( void ) ;
extern syscall_t sys_call_table [ ] ;
2018-11-09 15:45:53 -08:00
static inline long syscall_get_nr ( struct task_struct * task ,
struct pt_regs * regs )
{
return regs - > syscall ;
}
static inline void syscall_rollback ( struct task_struct * task ,
struct pt_regs * regs )
{
/* Do nothing. */
}
static inline long syscall_get_error ( struct task_struct * task ,
struct pt_regs * regs )
{
/* 0 if syscall succeeded, otherwise -Errorcode */
return IS_ERR_VALUE ( regs - > areg [ 2 ] ) ? regs - > areg [ 2 ] : 0 ;
}
static inline long syscall_get_return_value ( struct task_struct * task ,
struct pt_regs * regs )
{
return regs - > areg [ 2 ] ;
}
static inline void syscall_set_return_value ( struct task_struct * task ,
struct pt_regs * regs ,
int error , long val )
{
2019-11-14 15:05:40 -08:00
regs - > areg [ 2 ] = ( long ) error ? error : val ;
2018-11-09 15:45:53 -08:00
}
# define SYSCALL_MAX_ARGS 6
# define XTENSA_SYSCALL_ARGUMENT_REGS {6, 3, 4, 5, 8, 9}
static inline void syscall_get_arguments ( struct task_struct * task ,
struct pt_regs * regs ,
unsigned long * args )
{
static const unsigned int reg [ ] = XTENSA_SYSCALL_ARGUMENT_REGS ;
2016-11-07 16:26:37 -05:00
unsigned int i ;
2018-11-09 15:45:53 -08:00
2016-11-07 16:26:37 -05:00
for ( i = 0 ; i < 6 ; + + i )
args [ i ] = regs - > areg [ reg [ i ] ] ;
2018-11-09 15:45:53 -08:00
}
2019-11-29 01:25:20 -08:00
asmlinkage long xtensa_rt_sigreturn ( void ) ;
2007-08-03 15:55:07 -07:00
asmlinkage long xtensa_shmat ( int , char __user * , int ) ;
2007-08-05 10:22:58 -07:00
asmlinkage long xtensa_fadvise64_64 ( int , int ,
unsigned long long , unsigned long long ) ;
2007-08-03 15:55:07 -07:00
2018-11-09 14:39:24 -08:00
# endif