syscall.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. #ifndef _ASM_SYSCALL_H
  10. #define _ASM_SYSCALL_H
  11. #include <linux/err.h>
  12. #include <asm/ptrace.h>
  13. #include <uapi/linux/audit.h>
  14. static inline int syscall_get_arch(struct task_struct *task)
  15. {
  16. return AUDIT_ARCH_XTENSA;
  17. }
  18. typedef void (*syscall_t)(void);
  19. extern syscall_t sys_call_table[];
  20. static inline long syscall_get_nr(struct task_struct *task,
  21. struct pt_regs *regs)
  22. {
  23. return regs->syscall;
  24. }
  25. static inline void syscall_rollback(struct task_struct *task,
  26. struct pt_regs *regs)
  27. {
  28. /* Do nothing. */
  29. }
  30. static inline long syscall_get_error(struct task_struct *task,
  31. struct pt_regs *regs)
  32. {
  33. /* 0 if syscall succeeded, otherwise -Errorcode */
  34. return IS_ERR_VALUE(regs->areg[2]) ? regs->areg[2] : 0;
  35. }
  36. static inline long syscall_get_return_value(struct task_struct *task,
  37. struct pt_regs *regs)
  38. {
  39. return regs->areg[2];
  40. }
  41. static inline void syscall_set_return_value(struct task_struct *task,
  42. struct pt_regs *regs,
  43. int error, long val)
  44. {
  45. regs->areg[2] = (long) error ? error : val;
  46. }
  47. #define SYSCALL_MAX_ARGS 6
  48. #define XTENSA_SYSCALL_ARGUMENT_REGS {6, 3, 4, 5, 8, 9}
  49. static inline void syscall_get_arguments(struct task_struct *task,
  50. struct pt_regs *regs,
  51. unsigned long *args)
  52. {
  53. static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;
  54. unsigned int i;
  55. for (i = 0; i < 6; ++i)
  56. args[i] = regs->areg[reg[i]];
  57. }
  58. asmlinkage long xtensa_rt_sigreturn(void);
  59. asmlinkage long xtensa_shmat(int, char __user *, int);
  60. asmlinkage long xtensa_fadvise64_64(int, int,
  61. unsigned long long, unsigned long long);
  62. #endif