Skip to content

Commit eba5995

Browse files
committed
feat: add local_irq_save_and_disable and local_irq_restore for mclass target
1 parent 8243b53 commit eba5995

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

src/arch/arm.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use core::arch::asm;
44
const IRQ_DISABLE_BIT: usize = 1 << 7;
55

66
#[inline]
7+
#[cfg(target_feature = "aclass")]
78
pub fn local_irq_save_and_disable() -> usize {
89
let flags: usize;
910
unsafe {
@@ -19,6 +20,7 @@ pub fn local_irq_save_and_disable() -> usize {
1920
}
2021

2122
#[inline]
23+
#[cfg(target_feature = "aclass")]
2224
pub fn local_irq_restore(flags: usize) {
2325
if flags & IRQ_DISABLE_BIT == 0 {
2426
// IRQs were enabled before, re-enable them
@@ -27,3 +29,29 @@ pub fn local_irq_restore(flags: usize) {
2729
}
2830
}
2931
}
32+
33+
#[inline]
34+
#[cfg(target_feature = "mclass")]
35+
pub fn local_irq_save_and_disable() -> usize {
36+
let primask: usize;
37+
unsafe {
38+
asm!(
39+
"mrs {0}, primask",
40+
"cpsid i",
41+
out(reg) primask,
42+
options(nomem, nostack, preserves_flags)
43+
);
44+
}
45+
primask
46+
}
47+
48+
#[inline]
49+
#[cfg(target_feature = "mclass")]
50+
pub fn local_irq_restore(flags: usize) {
51+
if flags & 1 == 0 {
52+
unsafe {
53+
asm!("cpsie i", options(nomem, nostack));
54+
}
55+
}
56+
}
57+

0 commit comments

Comments
 (0)