root/arch/xtensa/include/asm/syscall.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. syscall_get_arch
  2. syscall_get_nr
  3. syscall_rollback
  4. syscall_get_error
  5. syscall_get_return_value
  6. syscall_set_return_value
  7. syscall_get_arguments
  8. syscall_set_arguments

   1 /*
   2  * This file is subject to the terms and conditions of the GNU General Public
   3  * License.  See the file "COPYING" in the main directory of this archive
   4  * for more details.
   5  *
   6  * Copyright (C) 2001 - 2007 Tensilica Inc.
   7  * Copyright (C) 2018 Cadence Design Systems Inc.
   8  */
   9 
  10 #ifndef _ASM_SYSCALL_H
  11 #define _ASM_SYSCALL_H
  12 
  13 #include <linux/err.h>
  14 #include <asm/ptrace.h>
  15 #include <uapi/linux/audit.h>
  16 
  17 static inline int syscall_get_arch(struct task_struct *task)
  18 {
  19         return AUDIT_ARCH_XTENSA;
  20 }
  21 
  22 typedef void (*syscall_t)(void);
  23 extern syscall_t sys_call_table[];
  24 
  25 static inline long syscall_get_nr(struct task_struct *task,
  26                                   struct pt_regs *regs)
  27 {
  28         return regs->syscall;
  29 }
  30 
  31 static inline void syscall_rollback(struct task_struct *task,
  32                                     struct pt_regs *regs)
  33 {
  34         /* Do nothing. */
  35 }
  36 
  37 static inline long syscall_get_error(struct task_struct *task,
  38                                      struct pt_regs *regs)
  39 {
  40         /* 0 if syscall succeeded, otherwise -Errorcode */
  41         return IS_ERR_VALUE(regs->areg[2]) ? regs->areg[2] : 0;
  42 }
  43 
  44 static inline long syscall_get_return_value(struct task_struct *task,
  45                                             struct pt_regs *regs)
  46 {
  47         return regs->areg[2];
  48 }
  49 
  50 static inline void syscall_set_return_value(struct task_struct *task,
  51                                             struct pt_regs *regs,
  52                                             int error, long val)
  53 {
  54         regs->areg[2] = (long) error ? error : val;
  55 }
  56 
  57 #define SYSCALL_MAX_ARGS 6
  58 #define XTENSA_SYSCALL_ARGUMENT_REGS {6, 3, 4, 5, 8, 9}
  59 
  60 static inline void syscall_get_arguments(struct task_struct *task,
  61                                          struct pt_regs *regs,
  62                                          unsigned long *args)
  63 {
  64         static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;
  65         unsigned int i;
  66 
  67         for (i = 0; i < 6; ++i)
  68                 args[i] = regs->areg[reg[i]];
  69 }
  70 
  71 static inline void syscall_set_arguments(struct task_struct *task,
  72                                          struct pt_regs *regs,
  73                                          const unsigned long *args)
  74 {
  75         static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;
  76         unsigned int i;
  77 
  78         for (i = 0; i < 6; ++i)
  79                 regs->areg[reg[i]] = args[i];
  80 }
  81 
  82 asmlinkage long xtensa_rt_sigreturn(struct pt_regs*);
  83 asmlinkage long xtensa_shmat(int, char __user *, int);
  84 asmlinkage long xtensa_fadvise64_64(int, int,
  85                                     unsigned long long, unsigned long long);
  86 
  87 #endif

/* [<][>][^][v][top][bottom][index][help] */