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};
57#[cfg(any(feature = "kernel", test))]
58mod brwlock;
59
60#[cfg(feature = "kernel")]
61mod raw_kernel_brwlock;
62
63#[cfg(all(not(feature = "kernel"), test))]
64mod raw_userspace_brwlock;
65
66pub use kmutex::{KMutex, KMutexGuard};
67pub use lock_token::LockToken;
68pub use lockdep::{LockClass, LockClassRegistration};
69pub use raw_lock::RawLock;
70
71#[cfg(not(feature = "kernel"))]
72pub use raw_userspace_mutex::RawMutex;
73
74#[cfg(not(feature = "kernel"))]
75pub type LockEntryStorage = ();
76
77#[cfg(feature = "kernel")]
78pub use raw_kernel_event::{KEvent, RawEvent};
79#[cfg(feature = "kernel")]
80pub use raw_spin_lock::{InterruptSavedState, RawSpinlock};
81#[cfg(feature = "kernel")]
82pub type KSpinlock<Class> = KMutex<Class, RawSpinlock>;
83#[cfg(any(feature = "kernel", test))]
84pub use brwlock::{BrwLockPi, BrwLockPiReadGuard, BrwLockPiWriteGuard};
85#[cfg(feature = "kernel")]
86pub use raw_kernel_brwlock::RawBrwLockPi;
87#[cfg(feature = "kernel")]
88pub use raw_kernel_mutex::{LockEntryStorage, RawCriticalMutex, RawMutex};
89#[cfg(all(not(feature = "kernel"), test))]
90pub use raw_userspace_brwlock::RawBrwLockPi;