Skip to content

Commit 6252fcf

Browse files
dcpleungcarlescufi
authored andcommitted
xtensa: userspace: simplify syscall helper
Consolidate all syscall helpers into one functions. Signed-off-by: Daniel Leung <[email protected]>
1 parent d9f643d commit 6252fcf

File tree

2 files changed

+27
-138
lines changed

2 files changed

+27
-138
lines changed

arch/xtensa/core/syscall_helper.c

Lines changed: 4 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
#include <zephyr/arch/xtensa/syscall.h>
88

9-
uintptr_t arch_syscall_invoke6_helper(uintptr_t arg1, uintptr_t arg2,
10-
uintptr_t arg3, uintptr_t arg4,
11-
uintptr_t arg5, uintptr_t arg6,
12-
uintptr_t call_id)
9+
uintptr_t xtensa_syscall_helper(uintptr_t arg1, uintptr_t arg2,
10+
uintptr_t arg3, uintptr_t arg4,
11+
uintptr_t arg5, uintptr_t arg6,
12+
uintptr_t call_id)
1313
{
1414
register uintptr_t a2 __asm__("%a2") = call_id;
1515
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -27,98 +27,3 @@ uintptr_t arch_syscall_invoke6_helper(uintptr_t arg1, uintptr_t arg2,
2727

2828
return a2;
2929
}
30-
31-
uintptr_t arch_syscall_invoke5_helper(uintptr_t arg1, uintptr_t arg2,
32-
uintptr_t arg3, uintptr_t arg4,
33-
uintptr_t arg5, uintptr_t call_id)
34-
{
35-
register uintptr_t a2 __asm__("%a2") = call_id;
36-
register uintptr_t a6 __asm__("%a6") = arg1;
37-
register uintptr_t a3 __asm__("%a3") = arg2;
38-
register uintptr_t a4 __asm__("%a4") = arg3;
39-
register uintptr_t a5 __asm__("%a5") = arg4;
40-
register uintptr_t a8 __asm__("%a8") = arg5;
41-
42-
__asm__ volatile("syscall\n\t"
43-
: "=r" (a2)
44-
: "r" (a2), "r" (a6), "r" (a3), "r" (a4),
45-
"r" (a5), "r" (a8)
46-
: "memory");
47-
48-
return a2;
49-
}
50-
51-
uintptr_t arch_syscall_invoke4_helper(uintptr_t arg1, uintptr_t arg2,
52-
uintptr_t arg3, uintptr_t arg4,
53-
uintptr_t call_id)
54-
{
55-
register uintptr_t a2 __asm__("%a2") = call_id;
56-
register uintptr_t a6 __asm__("%a6") = arg1;
57-
register uintptr_t a3 __asm__("%a3") = arg2;
58-
register uintptr_t a4 __asm__("%a4") = arg3;
59-
register uintptr_t a5 __asm__("%a5") = arg4;
60-
61-
__asm__ volatile("syscall\n\t"
62-
: "=r" (a2)
63-
: "r" (a2), "r" (a6), "r" (a3), "r" (a4),
64-
"r" (a5)
65-
: "memory");
66-
67-
return a2;
68-
}
69-
70-
uintptr_t arch_syscall_invoke3_helper(uintptr_t arg1, uintptr_t arg2,
71-
uintptr_t arg3, uintptr_t call_id)
72-
{
73-
register uintptr_t a2 __asm__("%a2") = call_id;
74-
register uintptr_t a6 __asm__("%a6") = arg1;
75-
register uintptr_t a3 __asm__("%a3") = arg2;
76-
register uintptr_t a4 __asm__("%a4") = arg3;
77-
78-
__asm__ volatile("syscall\n\t"
79-
: "=r" (a2)
80-
: "r" (a2), "r" (a6), "r" (a3), "r" (a4)
81-
: "memory");
82-
83-
return a2;
84-
}
85-
86-
uintptr_t arch_syscall_invoke2_helper(uintptr_t arg1, uintptr_t arg2,
87-
uintptr_t call_id)
88-
{
89-
register uintptr_t a2 __asm__("%a2") = call_id;
90-
register uintptr_t a6 __asm__("%a6") = arg1;
91-
register uintptr_t a3 __asm__("%a3") = arg2;
92-
93-
__asm__ volatile("syscall\n\t"
94-
: "=r" (a2)
95-
: "r" (a2), "r" (a6), "r" (a3)
96-
: "memory");
97-
98-
return a2;
99-
}
100-
101-
uintptr_t arch_syscall_invoke1_helper(uintptr_t arg1, uintptr_t call_id)
102-
{
103-
register uintptr_t a2 __asm__("%a2") = call_id;
104-
register uintptr_t a6 __asm__("%a6") = arg1;
105-
106-
__asm__ volatile("syscall\n\t"
107-
: "=r" (a2)
108-
: "r" (a2), "r" (a6)
109-
: "memory");
110-
111-
return a2;
112-
}
113-
114-
uintptr_t arch_syscall_invoke0_helper(uintptr_t call_id)
115-
{
116-
register uintptr_t a2 __asm__("%a2") = call_id;
117-
118-
__asm__ volatile("syscall\n\t"
119-
: "=r" (a2)
120-
: "r" (a2)
121-
: "memory");
122-
123-
return a2;
124-
}

include/zephyr/arch/xtensa/syscall.h

Lines changed: 23 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,14 @@ extern "C" {
2929
#endif
3030

3131
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
32-
uintptr_t arch_syscall_invoke6_helper(uintptr_t arg1, uintptr_t arg2,
33-
uintptr_t arg3, uintptr_t arg4,
34-
uintptr_t arg5, uintptr_t arg6,
35-
uintptr_t call_id);
32+
uintptr_t xtensa_syscall_helper(uintptr_t arg1, uintptr_t arg2,
33+
uintptr_t arg3, uintptr_t arg4,
34+
uintptr_t arg5, uintptr_t arg6,
35+
uintptr_t call_id);
3636

37-
uintptr_t arch_syscall_invoke5_helper(uintptr_t arg1, uintptr_t arg2,
38-
uintptr_t arg3, uintptr_t arg4,
39-
uintptr_t arg5,
40-
uintptr_t call_id);
41-
42-
uintptr_t arch_syscall_invoke4_helper(uintptr_t arg1, uintptr_t arg2,
43-
uintptr_t arg3, uintptr_t arg4,
44-
uintptr_t call_id);
45-
46-
uintptr_t arch_syscall_invoke3_helper(uintptr_t arg1, uintptr_t arg2,
47-
uintptr_t arg3, uintptr_t call_id);
48-
49-
uintptr_t arch_syscall_invoke2_helper(uintptr_t arg1, uintptr_t arg2,
50-
uintptr_t call_id);
51-
52-
uintptr_t arch_syscall_invoke1_helper(uintptr_t arg1, uintptr_t call_id);
53-
54-
uintptr_t arch_syscall_invoke0_helper(uintptr_t call_id);
37+
#define SYSINL ALWAYS_INLINE
38+
#else
39+
#define SYSINL inline
5540
#endif /* CONFIG_XTENSA_SYSCALL_USE_HELPER */
5641

5742
/**
@@ -63,15 +48,13 @@ uintptr_t arch_syscall_invoke0_helper(uintptr_t call_id);
6348
*
6449
**/
6550

66-
static inline uintptr_t arch_syscall_invoke6(uintptr_t arg1, uintptr_t arg2,
51+
static SYSINL uintptr_t arch_syscall_invoke6(uintptr_t arg1, uintptr_t arg2,
6752
uintptr_t arg3, uintptr_t arg4,
6853
uintptr_t arg5, uintptr_t arg6,
6954
uintptr_t call_id)
7055
{
7156
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
72-
return arch_syscall_invoke6_helper(arg1, arg2, arg3,
73-
arg4, arg5, arg6,
74-
call_id);
57+
return xtensa_syscall_helper(arg1, arg2, arg3, arg4, arg5, arg6, call_id);
7558
#else
7659
register uintptr_t a2 __asm__("%a2") = call_id;
7760
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -91,13 +74,12 @@ static inline uintptr_t arch_syscall_invoke6(uintptr_t arg1, uintptr_t arg2,
9174
#endif /* CONFIG_XTENSA_SYSCALL_USE_HELPER */
9275
}
9376

94-
static inline uintptr_t arch_syscall_invoke5(uintptr_t arg1, uintptr_t arg2,
77+
static SYSINL uintptr_t arch_syscall_invoke5(uintptr_t arg1, uintptr_t arg2,
9578
uintptr_t arg3, uintptr_t arg4,
9679
uintptr_t arg5, uintptr_t call_id)
9780
{
9881
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
99-
return arch_syscall_invoke5_helper(arg1, arg2, arg3,
100-
arg4, arg5, call_id);
82+
return xtensa_syscall_helper(arg1, arg2, arg3, arg4, arg5, 0, call_id);
10183
#else
10284
register uintptr_t a2 __asm__("%a2") = call_id;
10385
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -116,12 +98,12 @@ static inline uintptr_t arch_syscall_invoke5(uintptr_t arg1, uintptr_t arg2,
11698
#endif /* CONFIG_XTENSA_SYSCALL_USE_HELPER */
11799
}
118100

119-
static inline uintptr_t arch_syscall_invoke4(uintptr_t arg1, uintptr_t arg2,
101+
static SYSINL uintptr_t arch_syscall_invoke4(uintptr_t arg1, uintptr_t arg2,
120102
uintptr_t arg3, uintptr_t arg4,
121103
uintptr_t call_id)
122104
{
123105
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
124-
return arch_syscall_invoke4_helper(arg1, arg2, arg3, arg4, call_id);
106+
return xtensa_syscall_helper(arg1, arg2, arg3, arg4, 0, 0, call_id);
125107
#else
126108
register uintptr_t a2 __asm__("%a2") = call_id;
127109
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -139,11 +121,11 @@ static inline uintptr_t arch_syscall_invoke4(uintptr_t arg1, uintptr_t arg2,
139121
#endif /* CONFIG_XTENSA_SYSCALL_USE_HELPER */
140122
}
141123

142-
static inline uintptr_t arch_syscall_invoke3(uintptr_t arg1, uintptr_t arg2,
124+
static SYSINL uintptr_t arch_syscall_invoke3(uintptr_t arg1, uintptr_t arg2,
143125
uintptr_t arg3, uintptr_t call_id)
144126
{
145127
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
146-
return arch_syscall_invoke3_helper(arg1, arg2, arg3, call_id);
128+
return xtensa_syscall_helper(arg1, arg2, arg3, 0, 0, 0, call_id);
147129
#else
148130
register uintptr_t a2 __asm__("%a2") = call_id;
149131
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -159,11 +141,11 @@ static inline uintptr_t arch_syscall_invoke3(uintptr_t arg1, uintptr_t arg2,
159141
#endif /* CONFIG_XTENSA_SYSCALL_USE_HELPER */
160142
}
161143

162-
static inline uintptr_t arch_syscall_invoke2(uintptr_t arg1, uintptr_t arg2,
144+
static SYSINL uintptr_t arch_syscall_invoke2(uintptr_t arg1, uintptr_t arg2,
163145
uintptr_t call_id)
164146
{
165147
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
166-
return arch_syscall_invoke2_helper(arg1, arg2, call_id);
148+
return xtensa_syscall_helper(arg1, arg2, 0, 0, 0, 0, call_id);
167149
#else
168150
register uintptr_t a2 __asm__("%a2") = call_id;
169151
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -178,11 +160,11 @@ static inline uintptr_t arch_syscall_invoke2(uintptr_t arg1, uintptr_t arg2,
178160
#endif
179161
}
180162

181-
static inline uintptr_t arch_syscall_invoke1(uintptr_t arg1,
163+
static SYSINL uintptr_t arch_syscall_invoke1(uintptr_t arg1,
182164
uintptr_t call_id)
183165
{
184166
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
185-
return arch_syscall_invoke1_helper(arg1, call_id);
167+
return xtensa_syscall_helper(arg1, 0, 0, 0, 0, 0, call_id);
186168
#else
187169
register uintptr_t a2 __asm__("%a2") = call_id;
188170
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -196,10 +178,10 @@ static inline uintptr_t arch_syscall_invoke1(uintptr_t arg1,
196178
#endif
197179
}
198180

199-
static inline uintptr_t arch_syscall_invoke0(uintptr_t call_id)
181+
static SYSINL uintptr_t arch_syscall_invoke0(uintptr_t call_id)
200182
{
201183
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
202-
return arch_syscall_invoke0_helper(call_id);
184+
return xtensa_syscall_helper(0, 0, 0, 0, 0, 0, call_id);
203185
#else
204186
register uintptr_t a2 __asm__("%a2") = call_id;
205187

@@ -229,6 +211,8 @@ static inline bool arch_is_user_context(void)
229211
return !!thread;
230212
}
231213

214+
#undef SYSINL
215+
232216
#ifdef __cplusplus
233217
}
234218
#endif

0 commit comments

Comments
 (0)