1use crate::Sysno;
2
3macro_rules! sys {
4 ($($tt:tt)+) => {
5 ::core::arch::asm!(
6 "sc",
7 "bns 0f",
8 "neg 3, 3",
9 "0:",
10 $($tt)+
11 );
12 };
13}
14
15#[allow(clippy::missing_safety_doc)]
16#[inline(always)]
17pub unsafe fn raw_syscall0(sysno: Sysno) -> usize {
18 let ret;
19 sys!(
20 inlateout("r0") sysno as usize => _,
21 lateout("r3") ret,
22 lateout("r4") _,
23 lateout("r5") _,
24 lateout("r6") _,
25 lateout("r7") _,
26 lateout("r8") _,
27 lateout("r9") _,
28 lateout("r10") _,
29 lateout("r11") _,
30 lateout("r12") _,
31 lateout("cr0") _,
32 options(nostack, preserves_flags, readonly)
33
34 );
35 ret
36}
37
38pub use raw_syscall0 as raw_syscall0_readonly;
39
40#[allow(clippy::missing_safety_doc)]
41#[inline(always)]
42pub unsafe fn raw_syscall1(sysno: Sysno, arg0: usize) -> usize {
43 let ret;
44 sys!(
45 inlateout("r0") sysno as usize => _,
46 inlateout("r3") arg0 => ret,
47 lateout("r4") _,
48 lateout("r5") _,
49 lateout("r6") _,
50 lateout("r7") _,
51 lateout("r8") _,
52 lateout("r9") _,
53 lateout("r10") _,
54 lateout("r11") _,
55 lateout("r12") _,
56 lateout("cr0") _,
57 options(nostack, preserves_flags)
58 );
59 ret
60}
61
62#[allow(clippy::missing_safety_doc)]
63#[inline(always)]
64pub unsafe fn raw_syscall1_readonly(sysno: Sysno, arg0: usize) -> usize {
65 let ret;
66 sys!(
67 inlateout("r0") sysno as usize => _,
68 inlateout("r3") arg0 => ret,
69 lateout("r4") _,
70 lateout("r5") _,
71 lateout("r6") _,
72 lateout("r7") _,
73 lateout("r8") _,
74 lateout("r9") _,
75 lateout("r10") _,
76 lateout("r11") _,
77 lateout("r12") _,
78 lateout("cr0") _,
79 options(nostack, preserves_flags, readonly)
80 );
81 ret
82}
83
84#[allow(clippy::missing_safety_doc)]
85#[inline(always)]
86pub unsafe fn syscall1_noreturn(sysno: Sysno, arg0: usize) -> ! {
87 ::core::arch::asm!(
88 "sc",
89 "trap",
90 in("r0") sysno as usize,
91 in("r3") arg0,
92 options(noreturn)
93 );
94}
95
96#[allow(clippy::missing_safety_doc)]
97#[inline(always)]
98pub unsafe fn raw_syscall2(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
99 let ret;
100 sys!(
101 inlateout("r0") sysno as usize => _,
102 inlateout("r3") arg0 => ret,
103 inlateout("r4") arg1 => _,
104 lateout("r5") _,
105 lateout("r6") _,
106 lateout("r7") _,
107 lateout("r8") _,
108 lateout("r9") _,
109 lateout("r10") _,
110 lateout("r11") _,
111 lateout("r12") _,
112 lateout("cr0") _,
113 options(nostack, preserves_flags)
114 );
115 ret
116}
117
118#[allow(clippy::missing_safety_doc)]
119#[inline(always)]
120pub unsafe fn raw_syscall2_readonly(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
121 let ret;
122 sys!(
123 inlateout("r0") sysno as usize => _,
124 inlateout("r3") arg0 => ret,
125 inlateout("r4") arg1 => _,
126 lateout("r5") _,
127 lateout("r6") _,
128 lateout("r7") _,
129 lateout("r8") _,
130 lateout("r9") _,
131 lateout("r10") _,
132 lateout("r11") _,
133 lateout("r12") _,
134 lateout("cr0") _,
135 options(nostack, preserves_flags, readonly)
136 );
137 ret
138}
139
140#[allow(clippy::missing_safety_doc)]
141#[inline(always)]
142pub unsafe fn raw_syscall3(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
143 let ret;
144 sys!(
145 inlateout("r0") sysno as usize => _,
146 inlateout("r3") arg0 => ret,
147 inlateout("r4") arg1 => _,
148 inlateout("r5") arg2 => _,
149 lateout("r6") _,
150 lateout("r7") _,
151 lateout("r8") _,
152 lateout("r9") _,
153 lateout("r10") _,
154 lateout("r11") _,
155 lateout("r12") _,
156 lateout("cr0") _,
157 options(nostack, preserves_flags)
158 );
159 ret
160}
161
162#[allow(clippy::missing_safety_doc)]
163#[inline(always)]
164pub unsafe fn raw_syscall3_readonly(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
165 let ret;
166 sys!(
167 inlateout("r0") sysno as usize => _,
168 inlateout("r3") arg0 => ret,
169 inlateout("r4") arg1 => _,
170 inlateout("r5") arg2 => _,
171 lateout("r6") _,
172 lateout("r7") _,
173 lateout("r8") _,
174 lateout("r9") _,
175 lateout("r10") _,
176 lateout("r11") _,
177 lateout("r12") _,
178 lateout("cr0") _,
179 options(nostack, preserves_flags, readonly)
180 );
181 ret
182}
183
184#[allow(clippy::missing_safety_doc)]
185#[inline(always)]
186pub unsafe fn raw_syscall4(
187 sysno: Sysno,
188 arg0: usize,
189 arg1: usize,
190 arg2: usize,
191 arg3: usize,
192) -> usize {
193 let ret;
194 sys!(
195 inlateout("r0") sysno as usize => _,
196 inlateout("r3") arg0 => ret,
197 inlateout("r4") arg1 => _,
198 inlateout("r5") arg2 => _,
199 inlateout("r6") arg3 => _,
200 lateout("r7") _,
201 lateout("r8") _,
202 lateout("r9") _,
203 lateout("r10") _,
204 lateout("r11") _,
205 lateout("r12") _,
206 lateout("cr0") _,
207 options(nostack, preserves_flags)
208 );
209 ret
210}
211
212#[allow(clippy::missing_safety_doc)]
213#[inline(always)]
214pub unsafe fn raw_syscall4_readonly(
215 sysno: Sysno,
216 arg0: usize,
217 arg1: usize,
218 arg2: usize,
219 arg3: usize,
220) -> usize {
221 let ret;
222 sys!(
223 inlateout("r0") sysno as usize => _,
224 inlateout("r3") arg0 => ret,
225 inlateout("r4") arg1 => _,
226 inlateout("r5") arg2 => _,
227 inlateout("r6") arg3 => _,
228 lateout("r7") _,
229 lateout("r8") _,
230 lateout("r9") _,
231 lateout("r10") _,
232 lateout("r11") _,
233 lateout("r12") _,
234 lateout("cr0") _,
235 options(nostack, preserves_flags, readonly)
236 );
237 ret
238}
239
240#[allow(clippy::missing_safety_doc)]
241#[inline(always)]
242pub unsafe fn raw_syscall5(
243 sysno: Sysno,
244 arg0: usize,
245 arg1: usize,
246 arg2: usize,
247 arg3: usize,
248 arg4: usize,
249) -> usize {
250 let ret;
251 sys!(
252 inlateout("r0") sysno as usize => _,
253 inlateout("r3") arg0 => ret,
254 inlateout("r4") arg1 => _,
255 inlateout("r5") arg2 => _,
256 inlateout("r6") arg3 => _,
257 inlateout("r7") arg4 => _,
258 lateout("r8") _,
259 lateout("r9") _,
260 lateout("r10") _,
261 lateout("r11") _,
262 lateout("r12") _,
263 lateout("cr0") _,
264 options(nostack, preserves_flags)
265 );
266 ret
267}
268
269#[allow(clippy::missing_safety_doc)]
270#[inline(always)]
271pub unsafe fn raw_syscall5_readonly(
272 sysno: Sysno,
273 arg0: usize,
274 arg1: usize,
275 arg2: usize,
276 arg3: usize,
277 arg4: usize,
278) -> usize {
279 let ret;
280 sys!(
281 inlateout("r0") sysno as usize => _,
282 inlateout("r3") arg0 => ret,
283 inlateout("r4") arg1 => _,
284 inlateout("r5") arg2 => _,
285 inlateout("r6") arg3 => _,
286 inlateout("r7") arg4 => _,
287 lateout("r8") _,
288 lateout("r9") _,
289 lateout("r10") _,
290 lateout("r11") _,
291 lateout("r12") _,
292 lateout("cr0") _,
293 options(nostack, preserves_flags, readonly)
294 );
295 ret
296}
297
298#[allow(clippy::missing_safety_doc)]
299#[inline(always)]
300pub unsafe fn raw_syscall6(
301 sysno: Sysno,
302 arg0: usize,
303 arg1: usize,
304 arg2: usize,
305 arg3: usize,
306 arg4: usize,
307 arg5: usize,
308) -> usize {
309 let ret;
310 sys!(
311 inlateout("r0") sysno as usize => _,
312 inlateout("r3") arg0 => ret,
313 inlateout("r4") arg1 => _,
314 inlateout("r5") arg2 => _,
315 inlateout("r6") arg3 => _,
316 inlateout("r7") arg4 => _,
317 inlateout("r8") arg5 => _,
318 lateout("r9") _,
319 lateout("r10") _,
320 lateout("r11") _,
321 lateout("r12") _,
322 lateout("cr0") _,
323 options(nostack, preserves_flags)
324 );
325 ret
326}
327
328#[allow(clippy::missing_safety_doc)]
329#[inline(always)]
330pub unsafe fn raw_syscall6_readonly(
331 sysno: Sysno,
332 arg0: usize,
333 arg1: usize,
334 arg2: usize,
335 arg3: usize,
336 arg4: usize,
337 arg5: usize,
338) -> usize {
339 let ret;
340 sys!(
341 inlateout("r0") sysno as usize => _,
342 inlateout("r3") arg0 => ret,
343 inlateout("r4") arg1 => _,
344 inlateout("r5") arg2 => _,
345 inlateout("r6") arg3 => _,
346 inlateout("r7") arg4 => _,
347 inlateout("r8") arg5 => _,
348 lateout("r9") _,
349 lateout("r10") _,
350 lateout("r11") _,
351 lateout("r12") _,
352 lateout("cr0") _,
353 options(nostack, preserves_flags, readonly)
354 );
355 ret
356}
357
358include!("_syscalls.rs");
359
360#[inline(always)]
361pub(crate) unsafe fn init() {}