16#ifndef ZEPHYR_INCLUDE_ARCH_XTENSA_SYSCALL_H_
17#define ZEPHYR_INCLUDE_ARCH_XTENSA_SYSCALL_H_
19#ifdef CONFIG_USERSPACE
27#include <xtensa/config/core-isa.h>
47#ifdef XCHAL_HAVE_LOOPS
48#define XTENSA_SYSCALL_ASM "syscall; nop;"
50#define XTENSA_SYSCALL_ASM "syscall"
53#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
67#define SYSINL ALWAYS_INLINE
72#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER_ALL
99#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
100 return xtensa_syscall_helper_args_6(arg1, arg2, arg3, arg4, arg5, arg6, call_id);
102 register uintptr_t a2 __asm__(
"%a2") = call_id;
103 register uintptr_t a6 __asm__(
"%a6") = arg1;
104 register uintptr_t a3 __asm__(
"%a3") = arg2;
105 register uintptr_t a4 __asm__(
"%a4") = arg3;
106 register uintptr_t a5 __asm__(
"%a5") = arg4;
107 register uintptr_t a8 __asm__(
"%a8") = arg5;
108 register uintptr_t a9 __asm__(
"%a9") = arg6;
112 :
"r" (a2),
"r" (a6),
"r" (a3),
"r" (a4),
113 "r" (a5),
"r" (a8),
"r" (a9)
124#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
125 return xtensa_syscall_helper_args_5(arg1, arg2, arg3, arg4, arg5, call_id);
127 register uintptr_t a2 __asm__(
"%a2") = call_id;
128 register uintptr_t a6 __asm__(
"%a6") = arg1;
129 register uintptr_t a3 __asm__(
"%a3") = arg2;
130 register uintptr_t a4 __asm__(
"%a4") = arg3;
131 register uintptr_t a5 __asm__(
"%a5") = arg4;
132 register uintptr_t a8 __asm__(
"%a8") = arg5;
136 :
"r" (a2),
"r" (a6),
"r" (a3),
"r" (a4),
148#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
149 return xtensa_syscall_helper_args_4(arg1, arg2, arg3, arg4, call_id);
151 register uintptr_t a2 __asm__(
"%a2") = call_id;
152 register uintptr_t a6 __asm__(
"%a6") = arg1;
153 register uintptr_t a3 __asm__(
"%a3") = arg2;
154 register uintptr_t a4 __asm__(
"%a4") = arg3;
155 register uintptr_t a5 __asm__(
"%a5") = arg4;
159 :
"r" (a2),
"r" (a6),
"r" (a3),
"r" (a4),
170#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER_ALL
171 return xtensa_syscall_helper_args_3(arg1, arg2, arg3, call_id);
173 register uintptr_t a2 __asm__(
"%a2") = call_id;
174 register uintptr_t a6 __asm__(
"%a6") = arg1;
175 register uintptr_t a3 __asm__(
"%a3") = arg2;
176 register uintptr_t a4 __asm__(
"%a4") = arg3;
180 :
"r" (a2),
"r" (a6),
"r" (a3),
"r" (a4)
190#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER_ALL
191 return xtensa_syscall_helper_args_2(arg1, arg2, call_id);
193 register uintptr_t a2 __asm__(
"%a2") = call_id;
194 register uintptr_t a6 __asm__(
"%a6") = arg1;
195 register uintptr_t a3 __asm__(
"%a3") = arg2;
199 :
"r" (a2),
"r" (a6),
"r" (a3)
208#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER_ALL
209 return xtensa_syscall_helper_args_1(arg1, call_id);
211 register uintptr_t a2 __asm__(
"%a2") = call_id;
212 register uintptr_t a6 __asm__(
"%a6") = arg1;
225#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER_ALL
226 return xtensa_syscall_helper_args_0(call_id);
228 register uintptr_t a2 __asm__(
"%a2") = call_id;
246#if XCHAL_HAVE_THREADPTR
250 "rur.THREADPTR %0\n\t"
253#ifdef CONFIG_THREAD_LOCAL_STORAGE
254 extern Z_THREAD_LOCAL
uint32_t is_user_mode;
260 return is_user_mode != 0;
266 extern bool xtensa_is_user_context(
void);
268 return xtensa_is_user_context();
static uintptr_t arch_syscall_invoke4(uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t call_id)
Definition syscall.h:89
static uintptr_t arch_syscall_invoke2(uintptr_t arg1, uintptr_t arg2, uintptr_t call_id)
Definition syscall.h:131
static uintptr_t arch_syscall_invoke1(uintptr_t arg1, uintptr_t call_id)
Definition syscall.h:149
static uintptr_t arch_syscall_invoke0(uintptr_t call_id)
Definition syscall.h:165
static bool arch_is_user_context(void)
Definition syscall.h:181
static uintptr_t arch_syscall_invoke5(uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5, uintptr_t call_id)
Definition syscall.h:65
static uintptr_t arch_syscall_invoke3(uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t call_id)
Definition syscall.h:111
static uintptr_t arch_syscall_invoke6(uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5, uintptr_t arg6, uintptr_t call_id)
Definition syscall.h:40
#define SYSINL
Definition syscall.h:69
#define XTENSA_SYSCALL_ASM
Definition syscall.h:50
Definitions of various linker Sections.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105