First commit
This commit is contained in:
22
src/riscv.rs
Normal file
22
src/riscv.rs
Normal file
@@ -0,0 +1,22 @@
|
||||
use core::arch::asm;
|
||||
|
||||
const MSTATUS_MIE: usize = 0x8;
|
||||
|
||||
pub fn get_interrupt_state() -> bool {
|
||||
let res: u64;
|
||||
unsafe { asm!("csrr {}, mstatus", out(reg) res) };
|
||||
(res & MSTATUS_MIE as u64) != 0
|
||||
}
|
||||
pub fn enable_interrupt() {
|
||||
unsafe { asm!("csrs mstatus, {}", in(reg) MSTATUS_MIE) };
|
||||
}
|
||||
pub fn disable_interrupt() {
|
||||
unsafe { asm!("csrc mstatus, {}", in(reg) MSTATUS_MIE) };
|
||||
}
|
||||
pub fn restore_interrupt(previous_state: bool) {
|
||||
if previous_state {
|
||||
enable_interrupt();
|
||||
} else {
|
||||
disable_interrupt();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user