moa_irqflags 0.1.3

本地中断状态管理(save / restore / enable / disable)
Documentation
//! 本地中断状态管理(save / restore / enable / disable)
#![no_std]
#![allow(unsafe_code)]

cfg_if::cfg_if! {
    if #[cfg(aarch64_moana)] {
        #[path = "aarch64.rs"]
        mod arch;
    } else if #[cfg(riscv64_moana)] {
        #[path = "riscv64.rs"]
        mod arch;
    } else {
        #[path = "stub.rs"]
        mod arch;
    }
}

/// 启用本地中断
#[inline(always)]
pub fn local_irq_enable() {
    arch::arch_local_irq_enable();
}

/// 禁用本地中断
#[inline(always)]
pub fn local_irq_disable() {
    arch::arch_local_irq_disable();
}

/// 返回当前中断状态并禁用中断
#[inline(always)]
pub fn local_irq_save() -> usize {
    arch::arch_local_irq_save()
}

/// 从保存的中断状态恢复中断状态
#[inline(always)]
pub fn local_irq_restore(flags: usize) {
    arch::arch_local_irq_restore(flags);
}

/// 屏蔽所有异常和中断
#[inline(always)]
pub fn local_except_mask() {
    arch::arch_local_except_mask();
}

/// 解除异常和中断屏蔽
#[inline(always)]
pub fn local_except_unmask() {
    arch::arch_local_except_unmask();
}

/// 返回当前中断状态
#[inline(always)]
pub fn local_save_flags() -> usize {
    arch::arch_local_save_flags()
}

/// 当前中断是否禁用
#[inline(always)]
pub fn irqs_disabled() -> bool {
    arch::arch_irqs_disabled()
}

/// 当前保存的中断状态是否是禁用中断
#[inline(always)]
pub fn irqs_disabled_flags(flags: usize) {
    arch::arch_irqs_disabled_flags(flags);
}