use crate::{ecall2, ecall4, ecall5, HartMask, SbiError};
pub const EXTENSION_ID: usize = 0x52464E43;
#[inline]
#[doc(alias = "sbi_remote_fence_i")]
pub fn remote_fence_i(hart_mask: HartMask) -> Result<(), SbiError> {
unsafe { ecall2(hart_mask.mask, hart_mask.base, EXTENSION_ID, 0).map(drop) }
}
#[inline]
#[doc(alias = "sbi_remote_sfence_vma")]
pub fn remote_sfence_vma(
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> Result<(), SbiError> {
unsafe {
ecall4(
hart_mask.mask,
hart_mask.base,
start_addr,
size,
EXTENSION_ID,
1,
)
.map(drop)
}
}
#[inline]
#[doc(alias = "sbi_remote_sfence_vma_asid")]
pub fn remote_sfence_vma_asid(
hart_mask: HartMask,
start_addr: usize,
size: usize,
asid: usize,
) -> Result<(), SbiError> {
unsafe {
ecall5(
hart_mask.mask,
hart_mask.base,
start_addr,
size,
asid,
EXTENSION_ID,
2,
)
.map(drop)
}
}
#[inline]
#[doc(alias = "sbi_remote_hfence_gvma_vmid")]
pub fn remote_hfence_gvma_vmid(
hart_mask: HartMask,
start_addr: usize,
size: usize,
vmid: usize,
) -> Result<(), SbiError> {
unsafe {
ecall5(
hart_mask.mask,
hart_mask.base,
start_addr,
size,
vmid,
EXTENSION_ID,
3,
)
.map(drop)
}
}
#[inline]
#[doc(alias = "sbi_remote_hfence_gvma")]
pub fn remote_hfence_gvma(
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> Result<(), SbiError> {
unsafe {
ecall4(
hart_mask.mask,
hart_mask.base,
start_addr,
size,
EXTENSION_ID,
4,
)
.map(drop)
}
}
#[inline]
#[doc(alias = "sbi_remote_hfence_vvma_asid")]
pub fn remote_hfence_vvma_asid(
hart_mask: HartMask,
start_addr: usize,
size: usize,
asid: usize,
) -> Result<(), SbiError> {
unsafe {
ecall5(
hart_mask.mask,
hart_mask.base,
start_addr,
size,
asid,
EXTENSION_ID,
5,
)
.map(drop)
}
}
#[inline]
#[doc(alias = "sbi_remote_hfence_vvma")]
pub fn remote_hfence_vvma(
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> Result<(), SbiError> {
unsafe {
ecall4(
hart_mask.mask,
hart_mask.base,
start_addr,
size,
EXTENSION_ID,
6,
)
.map(drop)
}
}