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: usize;
9 asm!(
10 "svc 0",
11 in("r1") sysno as usize,
12 lateout("r2") 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: usize;
24 asm!(
25 "svc 0",
26 in("r1") sysno as usize,
27 inlateout("r2") 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: usize;
37 asm!(
38 "svc 0",
39 in("r1") sysno as usize,
40 inlateout("r2") 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 "trap2",
52 in("r1") sysno as usize,
53 in("r2") 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: usize;
62 asm!(
63 "svc 0",
64 in("r1") sysno as usize,
65 inlateout("r2") arg0 => ret,
66 in("r3") 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: usize;
76 asm!(
77 "svc 0",
78 in("r1") sysno as usize,
79 inlateout("r2") arg0 => ret,
80 in("r3") 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: usize;
90 asm!(
91 "svc 0",
92 in("r1") sysno as usize,
93 inlateout("r2") arg0 => ret,
94 in("r3") arg1,
95 in("r4") 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: usize;
105 asm!(
106 "svc 0",
107 in("r1") sysno as usize,
108 inlateout("r2") arg0 => ret,
109 in("r3") arg1,
110 in("r4") 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: usize;
126 asm!(
127 "svc 0",
128 in("r1") sysno as usize,
129 inlateout("r2") arg0 => ret,
130 in("r3") arg1,
131 in("r4") arg2,
132 in("r5") 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: usize;
148 asm!(
149 "svc 0",
150 in("r1") sysno as usize,
151 inlateout("r2") arg0 => ret,
152 in("r3") arg1,
153 in("r4") arg2,
154 in("r5") 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: usize;
171 asm!(
172 "svc 0",
173 in("r1") sysno as usize,
174 inlateout("r2") arg0 => ret,
175 in("r3") arg1,
176 in("r4") arg2,
177 in("r5") arg3,
178 in("r6") arg4,
179 options(preserves_flags)
180 );
181 ret
182}
183
184pub use raw_syscall5 as raw_syscall5_readonly;
185
186#[allow(clippy::missing_safety_doc)]
187#[inline(always)]
188pub unsafe fn raw_syscall6(
189 sysno: Sysno,
190 arg0: usize,
191 arg1: usize,
192 arg2: usize,
193 arg3: usize,
194 arg4: usize,
195 arg5: usize,
196) -> usize {
197 let ret: usize;
198 asm!(
199 "svc 0",
200 in("r1") sysno as usize,
201 inlateout("r2") arg0 => ret,
202 in("r3") arg1,
203 in("r4") arg2,
204 in("r5") arg3,
205 in("r6") arg4,
206 in("r7") arg5,
207 options(nostack, preserves_flags, readonly)
208 );
209 ret
210}
211
212pub use raw_syscall6 as raw_syscall6_readonly;
213
214include!("_syscalls.rs");
215
216#[inline(always)]
217pub(crate) unsafe fn init() {}