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