1 use crate::backend::c; 2 3 bitflags::bitflags! { 4 /// `FUTEX_*` flags for use with [`futex`]. 5 /// 6 /// [`futex`]: crate::thread::futex 7 #[repr(transparent)] 8 #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] 9 pub struct FutexFlags: u32 { 10 /// `FUTEX_PRIVATE_FLAG` 11 const PRIVATE = bitcast!(c::FUTEX_PRIVATE_FLAG); 12 /// `FUTEX_CLOCK_REALTIME` 13 const CLOCK_REALTIME = bitcast!(c::FUTEX_CLOCK_REALTIME); 14 } 15 } 16 17 /// `FUTEX_*` operations for use with [`futex`]. 18 /// 19 /// [`futex`]: crate::thread::futex 20 #[derive(Debug, Copy, Clone, Eq, PartialEq)] 21 #[repr(u32)] 22 pub enum FutexOperation { 23 /// `FUTEX_WAIT` 24 Wait = bitcast!(c::FUTEX_WAIT), 25 /// `FUTEX_WAKE` 26 Wake = bitcast!(c::FUTEX_WAKE), 27 /// `FUTEX_FD` 28 Fd = bitcast!(c::FUTEX_FD), 29 /// `FUTEX_REQUEUE` 30 Requeue = bitcast!(c::FUTEX_REQUEUE), 31 /// `FUTEX_CMP_REQUEUE` 32 CmpRequeue = bitcast!(c::FUTEX_CMP_REQUEUE), 33 /// `FUTEX_WAKE_OP` 34 WakeOp = bitcast!(c::FUTEX_WAKE_OP), 35 /// `FUTEX_LOCK_PI` 36 LockPi = bitcast!(c::FUTEX_LOCK_PI), 37 /// `FUTEX_UNLOCK_PI` 38 UnlockPi = bitcast!(c::FUTEX_UNLOCK_PI), 39 /// `FUTEX_TRYLOCK_PI` 40 TrylockPi = bitcast!(c::FUTEX_TRYLOCK_PI), 41 /// `FUTEX_WAIT_BITSET` 42 WaitBitset = bitcast!(c::FUTEX_WAIT_BITSET), 43 } 44