kernel/arch/riscv64/instruction/
mod.rs1use core::arch::asm;
2
3pub mod sbi;
4
5pub fn idle() {
6 loop {
7 unsafe {
8 asm!("wfi", options(nostack));
9 }
10 }
11}
12
13pub fn syscall(num: usize, arg0: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize, arg6: usize) -> usize {
14 ecall(num, arg0, arg1, arg2, arg3, arg4, arg5, arg6)
15}
16
17pub fn ecall(a0: usize, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize, a6: usize, a7: usize) -> usize {
18 let ret: usize;
19 unsafe {
20 asm!(
21 "ecall",
22 inout("a0") a0 => ret,
23 in("a1") a1,
24 in("a2") a2,
25 in("a3") a3,
26 in("a4") a4,
27 in("a5") a5,
28 in("a6") a6,
29 in("a7") a7,
30 options(nostack),
31 );
32 }
33 ret
34}