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

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

INCLUDED FROM


DEFINITIONS

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

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright Altera Corporation (C) <2014>. All rights reserved
   4  */
   5 
   6 #ifndef __ASM_NIOS2_SYSCALL_H__
   7 #define __ASM_NIOS2_SYSCALL_H__
   8 
   9 #include <uapi/linux/audit.h>
  10 #include <linux/err.h>
  11 #include <linux/sched.h>
  12 
  13 static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
  14 {
  15         return regs->r2;
  16 }
  17 
  18 static inline void syscall_rollback(struct task_struct *task,
  19                                 struct pt_regs *regs)
  20 {
  21         regs->r2 = regs->orig_r2;
  22         regs->r7 = regs->orig_r7;
  23 }
  24 
  25 static inline long syscall_get_error(struct task_struct *task,
  26                                 struct pt_regs *regs)
  27 {
  28         return regs->r7 ? regs->r2 : 0;
  29 }
  30 
  31 static inline long syscall_get_return_value(struct task_struct *task,
  32         struct pt_regs *regs)
  33 {
  34         return regs->r2;
  35 }
  36 
  37 static inline void syscall_set_return_value(struct task_struct *task,
  38         struct pt_regs *regs, int error, long val)
  39 {
  40         if (error) {
  41                 /* error < 0, but nios2 uses > 0 return value */
  42                 regs->r2 = -error;
  43                 regs->r7 = 1;
  44         } else {
  45                 regs->r2 = val;
  46                 regs->r7 = 0;
  47         }
  48 }
  49 
  50 static inline void syscall_get_arguments(struct task_struct *task,
  51         struct pt_regs *regs, unsigned long *args)
  52 {
  53         *args++ = regs->r4;
  54         *args++ = regs->r5;
  55         *args++ = regs->r6;
  56         *args++ = regs->r7;
  57         *args++ = regs->r8;
  58         *args   = regs->r9;
  59 }
  60 
  61 static inline void syscall_set_arguments(struct task_struct *task,
  62         struct pt_regs *regs, const unsigned long *args)
  63 {
  64         regs->r4 = *args++;
  65         regs->r5 = *args++;
  66         regs->r6 = *args++;
  67         regs->r7 = *args++;
  68         regs->r8 = *args++;
  69         regs->r9 = *args;
  70 }
  71 
  72 static inline int syscall_get_arch(struct task_struct *task)
  73 {
  74         return AUDIT_ARCH_NIOS2;
  75 }
  76 
  77 #endif

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