use crate::backend::c;
bitflags::bitflags! {
#[repr(transparent)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct Flags: u32 {
const PRIVATE = bitcast!(c::FUTEX_PRIVATE_FLAG);
const CLOCK_REALTIME = bitcast!(c::FUTEX_CLOCK_REALTIME);
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub(crate) enum Operation {
Wait = bitcast!(c::FUTEX_WAIT),
Wake = bitcast!(c::FUTEX_WAKE),
Fd = bitcast!(c::FUTEX_FD),
Requeue = bitcast!(c::FUTEX_REQUEUE),
CmpRequeue = bitcast!(c::FUTEX_CMP_REQUEUE),
WakeOp = bitcast!(c::FUTEX_WAKE_OP),
LockPi = bitcast!(c::FUTEX_LOCK_PI),
UnlockPi = bitcast!(c::FUTEX_UNLOCK_PI),
TrylockPi = bitcast!(c::FUTEX_TRYLOCK_PI),
WaitBitset = bitcast!(c::FUTEX_WAIT_BITSET),
WakeBitset = bitcast!(c::FUTEX_WAKE_BITSET),
WaitRequeuePi = bitcast!(c::FUTEX_WAIT_REQUEUE_PI),
CmpRequeuePi = bitcast!(c::FUTEX_CMP_REQUEUE_PI),
LockPi2 = bitcast!(c::FUTEX_LOCK_PI2),
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum FutexOperation {
Wait = bitcast!(c::FUTEX_WAIT),
Wake = bitcast!(c::FUTEX_WAKE),
Fd = bitcast!(c::FUTEX_FD),
Requeue = bitcast!(c::FUTEX_REQUEUE),
CmpRequeue = bitcast!(c::FUTEX_CMP_REQUEUE),
WakeOp = bitcast!(c::FUTEX_WAKE_OP),
LockPi = bitcast!(c::FUTEX_LOCK_PI),
UnlockPi = bitcast!(c::FUTEX_UNLOCK_PI),
TrylockPi = bitcast!(c::FUTEX_TRYLOCK_PI),
WaitBitset = bitcast!(c::FUTEX_WAIT_BITSET),
}
pub const WAITERS: u32 = linux_raw_sys::general::FUTEX_WAITERS;
pub const OWNER_DIED: u32 = linux_raw_sys::general::FUTEX_OWNER_DIED;