1#![no_std]
6
7#[cfg(test)]
8extern crate self as ksync;
9
10pub use kstring::declare_interned_string;
11pub use ksync_macro::guarded;
12pub use pin_init;
13
14#[macro_export]
28macro_rules! lock {
29 (let mut $guard:ident = $lock_init:expr) => {
30 $crate::pin_init::stack_pin_init!(let $guard = $lock_init);
31 let mut $guard = $guard;
32 };
33 (let $guard:ident = $lock_init:expr) => {
34 $crate::pin_init::stack_pin_init!(let $guard = $lock_init);
35 };
36 ($lock_init:expr) => {
37 $crate::pin_init::stack_pin_init!(let _guard = $lock_init);
38 };
39}
40
41mod kcell;
42mod kmutex;
43mod lock_token;
44mod raw_lock;
45
46#[cfg(not(feature = "kernel"))]
47mod raw_userspace_mutex;
48
49#[cfg(feature = "kernel")]
50mod raw_kernel_event;
51#[cfg(feature = "kernel")]
52mod raw_kernel_mutex;
53#[cfg(feature = "kernel")]
54mod raw_spin_lock;
55
56pub use kcell::{KCell, KCellInit, kcell_init};
57pub use kmutex::{KMutex, KMutexGuard};
58pub use lock_token::LockToken;
59pub use lockdep::{LockClass, LockClassRegistration};
60pub use raw_lock::RawLock;
61
62#[cfg(not(feature = "kernel"))]
63pub use raw_userspace_mutex::RawMutex;
64
65#[cfg(feature = "kernel")]
66pub use raw_kernel_event::{KEvent, RawEvent};
67#[cfg(feature = "kernel")]
68pub use raw_kernel_mutex::{RawCriticalMutex, RawMutex};
69#[cfg(feature = "kernel")]
70pub use raw_spin_lock::{InterruptSavedState, RawSpinlock};
71
72#[cfg(feature = "kernel")]
73pub type KSpinlock<Class> = KMutex<Class, RawSpinlock>;