update comment for bbl module, but have not finished.
//! Port from sbi.h
+//!
+//! This code is used for OS to use hardware outside with calling these implements
+/*
+** @brief translate implement calling message to RISCV asm
+** @param which: usize ecall type
+** arg0, arg1, arg2: usize ecall args
+** @retval ret: usize the result of the asm
+*/
#[inline(always)]
fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize {
let ret;
@@ -13,18 +21,38 @@ fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize {
ret
}
+/*
+** @brief output char to console
+** @param ch: usize the char to output to console
+** @retval none
+*/
pub fn console_putchar(ch: usize) {
sbi_call(SBI_CONSOLE_PUTCHAR, ch, 0, 0);
}
+/*
+** @brief input char from console
+** @param none
+** @retval ch: usize the char get from console
+*/
pub fn console_getchar() -> usize {
sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0)
}
+/*
+** @brief call this function to shutdown
+** @param none
+** @retval none
+*/
pub fn shutdown() {
sbi_call(SBI_SHUTDOWN, 0, 0, 0);
}
+/*
+** @brief set a timer when running
+** @param stime_value: u64 time to be set
+** @retval none
+*/
pub fn set_timer(stime_value: u64) {
#[cfg(target_pointer_width = "32")]
sbi_call(SBI_SET_TIMER, stime_value as usize, (stime_value >> 32) as usize, 0);
@@ -32,22 +60,47 @@ pub fn set_timer(stime_value: u64) {
sbi_call(SBI_SET_TIMER, stime_value as usize, 0, 0);
}
+/*
+** @brief clear the ipi
+** @param none
+** @retval none
+*/
pub fn clear_ipi() {
sbi_call(SBI_CLEAR_IPI, 0, 0, 0);
}
+/*
+** @brief
+** @param
+** @retval none
+*/
pub fn send_ipi(hart_mask: *const usize) {
sbi_call(SBI_SEND_IPI, hart_mask as usize, 0, 0);
}
+/*
+** @brief
+** @param
+** @retval none
+*/
pub fn remote_fence_i(hart_mask: *const usize) {
sbi_call(SBI_REMOTE_FENCE_I, hart_mask as usize, 0, 0);
}
+/*
+** @brief
+** @param
+** @retval none
+*/
pub fn remote_sfence_vma(hart_mask: *const usize, _start: usize, _size: usize) {
sbi_call(SBI_REMOTE_SFENCE_VMA, hart_mask as usize, 0, 0);
}
+/*
+** @brief
+** @param
+** @retval none
+*/
pub fn remote_sfence_vma_asid(hart_mask: *const usize, _start: usize, _size: usize, _asid: usize) {
sbi_call(SBI_REMOTE_SFENCE_VMA_ASID, hart_mask as usize, 0, 0);
}
