1 Star 0 Fork 0

lispking/rCore-Tutorial-v3

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
sbi.rs 1.08 KB
一键复制 编辑 原始数据 按行查看 历史
lispking 提交于 2023-10-24 11:14 +08:00 . + æadd RISC-V study process
//! SBI call wrappers
#![allow(unused)]
use core::arch::asm;
const SBI_CONSOLE_PUTCHAR: usize = 1;
const SRST_EXTENSION: usize = 0x53525354;
const SYSTEM_RESET_FUNCTION: usize = 0;
enum SystemResetType {
Shutdown = 0,
ColdReboot = 1,
WarmReboot = 2
}
enum SystemResetReason {
NoReason = 0,
SystemFailure = 1
}
/// general sbi call
#[inline(always)]
fn sbi_call(eid: usize, fid: usize, arg0: usize, arg1: usize, arg2: usize) -> usize {
let mut ret;
unsafe {
asm!(
"ecall",
inlateout("x10") arg0 => ret,
in("x11") arg1,
in("x12") arg2,
in("x16") fid,
in("x17") eid,
);
}
ret
}
/// use sbi call to putchar in console (qemu uart handler)
pub fn console_putchar(c: usize) {
sbi_call(SBI_CONSOLE_PUTCHAR, 0, c, 0, 0);
}
/// use sbi call to shutdown the kernel
pub fn shutdown() -> ! {
sbi_call(SRST_EXTENSION, SYSTEM_RESET_FUNCTION,
SystemResetType::Shutdown as usize,
SystemResetReason::NoReason as usize,
0);
panic!("It should shutdown!")
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Rust
1
https://gitee.com/lispking/rCore-Tutorial-v3.git
git@gitee.com:lispking/rCore-Tutorial-v3.git
lispking
rCore-Tutorial-v3
rCore-Tutorial-v3
master

搜索帮助