kernel/arch/riscv64/instruction/
mod.rs

1use 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}