pub mod arceos {
pub use ax_api as api;
pub mod guard {
pub use ax_kernel_guard::{IrqSave, NoOp, NoPreempt, NoPreemptIrqSave};
}
#[doc(no_inline)]
pub use ax_api::modules;
#[doc(no_inline)]
pub use ax_driver as driver;
#[doc(no_inline)]
pub use ax_percpu as percpu;
pub mod sync {
pub type IrqSafeMutex<T> = ax_kspin::SpinNoIrq<T>;
pub type IrqSafeMutexGuard<'a, T> = ax_kspin::SpinNoIrqGuard<'a, T>;
pub type NoPreemptMutex<T> = ax_kspin::SpinNoPreempt<T>;
pub type NoPreemptMutexGuard<'a, T> = ax_kspin::SpinNoPreemptGuard<'a, T>;
pub type RawSpinLock<T> = ax_kspin::SpinRaw<T>;
pub type RawSpinLockGuard<'a, T> = ax_kspin::SpinRawGuard<'a, T>;
}
}
#[cfg(feature = "std-compat")]
pub mod libc_compat;
#[cfg(all(test, feature = "host-test"))]
mod tests {
use super::arceos::sync::{IrqSafeMutex, NoPreemptMutex, RawSpinLock};
static IRQ_SAFE: IrqSafeMutex<usize> = IrqSafeMutex::new(0);
static NO_PREEMPT: NoPreemptMutex<usize> = NoPreemptMutex::new(0);
static RAW: RawSpinLock<usize> = RawSpinLock::new(0);
#[test]
fn special_locks_support_const_initialization_and_try_lock() {
*IRQ_SAFE.lock() += 1;
*NO_PREEMPT.lock() += 1;
*RAW.lock() += 1;
assert_eq!(*IRQ_SAFE.try_lock().unwrap(), 1);
assert_eq!(*NO_PREEMPT.try_lock().unwrap(), 1);
assert_eq!(*RAW.try_lock().unwrap(), 1);
}
}