rustsbi 0.3.0-rc.2

Minimal RISC-V's SBI implementation library in Rust
Documentation
use sbi_spec::binary::SbiRet;

#[inline]
pub fn handle_ecall(
    function: usize,
    param0: usize,
    param1: usize,
    param2: usize,
    param3: usize,
    param4: usize,
) -> SbiRet {
    use crate::rfence::*;
    use sbi_spec::rfnc::*;
    let hart_mask = crate::HartMask::from_mask_base(param0, param1);
    match function {
        REMOTE_FENCE_I => remote_fence_i(hart_mask),
        REMOTE_SFENCE_VMA => remote_sfence_vma(hart_mask, param2, param3),
        REMOTE_SFENCE_VMA_ASID => remote_sfence_vma_asid(hart_mask, param2, param3, param4),
        REMOTE_HFENCE_GVMA_VMID => remote_hfence_gvma_vmid(hart_mask, param2, param3, param4),
        REMOTE_HFENCE_GVMA => remote_hfence_gvma(hart_mask, param2, param3),
        REMOTE_HFENCE_VVMA_ASID => remote_hfence_vvma_asid(hart_mask, param2, param3, param4),
        REMOTE_HFENCE_VVMA => remote_hfence_vvma(hart_mask, param2, param3),
        _ => SbiRet::not_supported(),
    }
}