#![allow(clippy::too_many_arguments)]
use sbi_spec::binary::SbiRet;
#[inline(always)]
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
pub(crate) fn sbi_call_0(eid: usize, fid: usize) -> SbiRet {
let (error, value);
unsafe {
core::arch::asm!(
"ecall",
in("a7") eid,
in("a6") fid,
lateout("a0") error,
lateout("a1") value,
);
}
SbiRet { error, value }
}
#[inline(always)]
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
pub(crate) fn sbi_call_0(_eid: usize, _fid: usize) -> SbiRet {
unimplemented!("unsupported architecture")
}
#[inline(always)]
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
pub(crate) fn sbi_call_1(eid: usize, fid: usize, arg0: usize) -> SbiRet {
let (error, value);
unsafe {
core::arch::asm!(
"ecall",
in("a7") eid,
in("a6") fid,
inlateout("a0") arg0 => error,
lateout("a1") value,
);
}
SbiRet { error, value }
}
#[inline(always)]
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
pub(crate) fn sbi_call_1(_eid: usize, _fid: usize, _arg0: usize) -> SbiRet {
unimplemented!("unsupported architecture")
}
#[inline(always)]
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
pub(crate) fn sbi_call_2(eid: usize, fid: usize, arg0: usize, arg1: usize) -> SbiRet {
let (error, value);
unsafe {
core::arch::asm!(
"ecall",
in("a7") eid,
in("a6") fid,
inlateout("a0") arg0 => error,
inlateout("a1") arg1 => value,
);
}
SbiRet { error, value }
}
#[inline(always)]
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
pub(crate) fn sbi_call_2(_eid: usize, _fid: usize, _arg0: usize, _arg1: usize) -> SbiRet {
unimplemented!("unsupported architecture")
}
#[inline(always)]
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
pub(crate) fn sbi_call_3(eid: usize, fid: usize, arg0: usize, arg1: usize, arg2: usize) -> SbiRet {
let (error, value);
unsafe {
core::arch::asm!(
"ecall",
in("a7") eid,
in("a6") fid,
inlateout("a0") arg0 => error,
inlateout("a1") arg1 => value,
in("a2") arg2,
);
}
SbiRet { error, value }
}
#[inline(always)]
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
pub(crate) fn sbi_call_3(
_eid: usize,
_fid: usize,
_arg0: usize,
_arg1: usize,
_arg2: usize,
) -> SbiRet {
unimplemented!("unsupported architecture")
}
#[inline(always)]
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
pub(crate) fn sbi_call_4(
eid: usize,
fid: usize,
arg0: usize,
arg1: usize,
arg2: usize,
arg3: usize,
) -> SbiRet {
let (error, value);
unsafe {
core::arch::asm!(
"ecall",
in("a7") eid,
in("a6") fid,
inlateout("a0") arg0 => error,
inlateout("a1") arg1 => value,
in("a2") arg2,
in("a3") arg3,
);
}
SbiRet { error, value }
}
#[inline(always)]
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
pub(crate) fn sbi_call_4(
_eid: usize,
_fid: usize,
_arg0: usize,
_arg1: usize,
_arg2: usize,
_arg3: usize,
) -> SbiRet {
unimplemented!("unsupported architecture")
}
#[inline(always)]
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
pub(crate) fn sbi_call_5(
eid: usize,
fid: usize,
arg0: usize,
arg1: usize,
arg2: usize,
arg3: usize,
arg4: usize,
) -> SbiRet {
let (error, value);
unsafe {
core::arch::asm!(
"ecall",
in("a7") eid,
in("a6") fid,
inlateout("a0") arg0 => error,
inlateout("a1") arg1 => value,
in("a2") arg2,
in("a3") arg3,
in("a4") arg4,
);
}
SbiRet { error, value }
}
#[inline(always)]
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
pub(crate) fn sbi_call_5(
_eid: usize,
_fid: usize,
_arg0: usize,
_arg1: usize,
_arg2: usize,
_arg3: usize,
_arg4: usize,
) -> SbiRet {
unimplemented!("unsupported architecture")
}
#[inline(always)]
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
#[allow(unused)] pub(crate) fn sbi_call_6(
eid: usize,
fid: usize,
arg0: usize,
arg1: usize,
arg2: usize,
arg3: usize,
arg4: usize,
arg5: usize,
) -> SbiRet {
let (error, value);
unsafe {
core::arch::asm!(
"ecall",
in("a7") eid,
in("a6") fid,
inlateout("a0") arg0 => error,
inlateout("a1") arg1 => value,
in("a2") arg2,
in("a3") arg3,
in("a4") arg4,
in("a5") arg5,
);
}
SbiRet { error, value }
}
#[inline(always)]
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
#[allow(unused)] pub(crate) fn sbi_call_6(
_eid: usize,
_fid: usize,
_arg0: usize,
_arg1: usize,
_arg2: usize,
_arg3: usize,
_arg4: usize,
_arg5: usize,
) -> SbiRet {
unimplemented!("unsupported architecture")
}