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 "svc 0",
11 in("x8") sysno as usize,
12 lateout("x0") ret,
13 options(nostack, preserves_flags, readonly)
14 );
15 ret
16}
17
18pub use raw_syscall0 as raw_syscall0_readonly;
19
20#[allow(clippy::missing_safety_doc)]
21#[inline(always)]
22pub unsafe fn raw_syscall1(sysno: Sysno, arg0: usize) -> usize {
23 let ret;
24 asm!(
25 "svc 0",
26 in("x8") sysno as usize,
27 inlateout("x0") arg0 => ret,
28 options(nostack, preserves_flags)
29 );
30 ret
31}
32
33#[allow(clippy::missing_safety_doc)]
34#[inline(always)]
35pub unsafe fn raw_syscall1_readonly(sysno: Sysno, arg0: usize) -> usize {
36 let ret;
37 asm!(
38 "svc 0",
39 in("x8") sysno as usize,
40 inlateout("x0") arg0 => ret,
41 options(nostack, preserves_flags, readonly)
42 );
43 ret
44}
45
46#[allow(clippy::missing_safety_doc)]
47#[inline(always)]
48pub unsafe fn syscall1_noreturn(sysno: Sysno, arg0: usize) -> ! {
49 asm!(
50 "svc 0",
51 "brk 1",
52 in("x8") sysno as usize,
53 in("x0") arg0,
54 options(noreturn)
55 )
56}
57
58#[allow(clippy::missing_safety_doc)]
59#[inline(always)]
60pub unsafe fn raw_syscall2(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
61 let ret;
62 asm!(
63 "svc 0",
64 in("x8") sysno as usize,
65 inlateout("x0") arg0 => ret,
66 in("x1") arg1,
67 options(nostack, preserves_flags)
68 );
69 ret
70}
71
72#[allow(clippy::missing_safety_doc)]
73#[inline(always)]
74pub unsafe fn raw_syscall2_readonly(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
75 let ret;
76 asm!(
77 "svc 0",
78 in("x8") sysno as usize,
79 inlateout("x0") arg0 => ret,
80 in("x1") arg1,
81 options(nostack, preserves_flags, readonly)
82 );
83 ret
84}
85
86#[allow(clippy::missing_safety_doc)]
87#[inline(always)]
88pub unsafe fn raw_syscall3(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
89 let ret;
90 asm!(
91 "svc 0",
92 in("x8") sysno as usize,
93 inlateout("x0") arg0 => ret,
94 in("x1") arg1,
95 in("x2") arg2,
96 options(nostack, preserves_flags)
97 );
98 ret
99}
100
101#[allow(clippy::missing_safety_doc)]
102#[inline(always)]
103pub unsafe fn raw_syscall3_readonly(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
104 let ret;
105 asm!(
106 "svc 0",
107 in("x8") sysno as usize,
108 inlateout("x0") arg0 => ret,
109 in("x1") arg1,
110 in("x2") arg2,
111 options(nostack, preserves_flags, readonly)
112 );
113 ret
114}
115
116#[allow(clippy::missing_safety_doc)]
117#[inline(always)]
118pub unsafe fn raw_syscall4(
119 sysno: Sysno,
120 arg0: usize,
121 arg1: usize,
122 arg2: usize,
123 arg3: usize,
124) -> usize {
125 let ret;
126 asm!(
127 "svc 0",
128 in("x8") sysno as usize,
129 inlateout("x0") arg0 => ret,
130 in("x1") arg1,
131 in("x2") arg2,
132 in("x3") arg3,
133 options(nostack, preserves_flags)
134 );
135 ret
136}
137
138#[allow(clippy::missing_safety_doc)]
139#[inline(always)]
140pub unsafe fn raw_syscall4_readonly(
141 sysno: Sysno,
142 arg0: usize,
143 arg1: usize,
144 arg2: usize,
145 arg3: usize,
146) -> usize {
147 let ret;
148 asm!(
149 "svc 0",
150 in("x8") sysno as usize,
151 inlateout("x0") arg0 => ret,
152 in("x1") arg1,
153 in("x2") arg2,
154 in("x3") arg3,
155 options(nostack, preserves_flags, readonly)
156 );
157 ret
158}
159
160#[allow(clippy::missing_safety_doc)]
161#[inline(always)]
162pub unsafe fn raw_syscall5(
163 sysno: Sysno,
164 arg0: usize,
165 arg1: usize,
166 arg2: usize,
167 arg3: usize,
168 arg4: usize,
169) -> usize {
170 let ret;
171 asm!(
172 "svc 0",
173 in("x8") sysno as usize,
174 inlateout("x0") arg0 => ret,
175 in("x1") arg1,
176 in("x2") arg2,
177 in("x3") arg3,
178 in("x4") arg4,
179 options(nostack, preserves_flags)
180 );
181 ret
182}
183
184#[allow(clippy::missing_safety_doc)]
185#[inline(always)]
186pub unsafe fn raw_syscall5_readonly(
187 sysno: Sysno,
188 arg0: usize,
189 arg1: usize,
190 arg2: usize,
191 arg3: usize,
192 arg4: usize,
193) -> usize {
194 let ret;
195 asm!(
196 "svc 0",
197 in("x8") sysno as usize,
198 inlateout("x0") arg0 => ret,
199 in("x1") arg1,
200 in("x2") arg2,
201 in("x3") arg3,
202 in("x4") arg4,
203 options(nostack, preserves_flags, readonly)
204 );
205 ret
206}
207
208#[allow(clippy::missing_safety_doc)]
209#[inline(always)]
210pub unsafe fn raw_syscall6(
211 sysno: Sysno,
212 arg0: usize,
213 arg1: usize,
214 arg2: usize,
215 arg3: usize,
216 arg4: usize,
217 arg5: usize,
218) -> usize {
219 let ret;
220 asm!(
221 "svc 0",
222 in("x8") sysno as usize,
223 inlateout("x0") arg0 => ret,
224 in("x1") arg1,
225 in("x2") arg2,
226 in("x3") arg3,
227 in("x4") arg4,
228 in("x5") arg5,
229 options(nostack, preserves_flags)
230 );
231 ret
232}
233
234#[allow(clippy::missing_safety_doc)]
235#[inline(always)]
236pub unsafe fn raw_syscall6_readonly(
237 sysno: Sysno,
238 arg0: usize,
239 arg1: usize,
240 arg2: usize,
241 arg3: usize,
242 arg4: usize,
243 arg5: usize,
244) -> usize {
245 let ret;
246 asm!(
247 "svc 0",
248 in("x8") sysno as usize,
249 inlateout("x0") arg0 => ret,
250 in("x1") arg1,
251 in("x2") arg2,
252 in("x3") arg3,
253 in("x4") arg4,
254 in("x5") arg5,
255 options(nostack, preserves_flags, readonly)
256 );
257 ret
258}
259
260include!("_syscalls.rs");
261
262#[inline(always)]
263pub(crate) fn init() {}