libc/new/linux_uapi/linux/
futex.rs1use crate::prelude::*;
4
5pub const FUTEX_WAIT: c_int = 0;
6pub const FUTEX_WAKE: c_int = 1;
7pub const FUTEX_FD: c_int = 2;
8pub const FUTEX_REQUEUE: c_int = 3;
9pub const FUTEX_CMP_REQUEUE: c_int = 4;
10pub const FUTEX_WAKE_OP: c_int = 5;
11pub const FUTEX_LOCK_PI: c_int = 6;
12pub const FUTEX_UNLOCK_PI: c_int = 7;
13pub const FUTEX_TRYLOCK_PI: c_int = 8;
14pub const FUTEX_WAIT_BITSET: c_int = 9;
15pub const FUTEX_WAKE_BITSET: c_int = 10;
16pub const FUTEX_WAIT_REQUEUE_PI: c_int = 11;
17pub const FUTEX_CMP_REQUEUE_PI: c_int = 12;
18pub const FUTEX_LOCK_PI2: c_int = 13;
19
20pub const FUTEX_PRIVATE_FLAG: c_int = 128;
21pub const FUTEX_CLOCK_REALTIME: c_int = 256;
22
23pub const FUTEX_CMD_MASK: c_int = !(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME);
24
25pub const FUTEX2_SIZE_U8: c_int = 0x00;
26pub const FUTEX2_SIZE_U16: c_int = 0x01;
27pub const FUTEX2_SIZE_U32: c_int = 0x02;
28pub const FUTEX2_SIZE_U64: c_int = 0x03;
29pub const FUTEX2_NUMA: c_int = 0x04;
30pub const FUTEX2_PRIVATE: c_int = FUTEX_PRIVATE_FLAG;
31pub const FUTEX2_SIZE_MASK: c_int = 0x03;
32
33#[deprecated(
34 since = "0.2.187",
35 note = "UAPI headers indicate this should not be used"
36)]
37pub const FUTEX_32: c_int = FUTEX2_SIZE_U32;
38
39pub const FUTEX_WAITV_MAX: c_int = 128;
40
41#[automatically_derived]
#[allow(deprecated)]
impl ::core::clone::Clone for futex_waitv {
#[inline]
fn clone(&self) -> futex_waitv {
let _: ::core::clone::AssertParamIsClone<crate::__u64>;
let _: ::core::clone::AssertParamIsClone<crate::__u64>;
let _: ::core::clone::AssertParamIsClone<crate::__u32>;
let _: ::core::clone::AssertParamIsClone<Padding<crate::__u32>>;
*self
}
}
#[automatically_derived]
#[allow(deprecated)]
impl ::core::marker::Copy for futex_waitv { }
#[automatically_derived]
#[allow(deprecated)]
impl ::core::fmt::Debug for futex_waitv {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f, "futex_waitv",
"val", &self.val, "uaddr", &self.uaddr, "flags", &self.flags,
"__reserved", &&self.__reserved)
}
}s! {
42 pub struct futex_waitv {
43 pub val: crate::__u64,
44 pub uaddr: crate::__u64,
45 pub flags: crate::__u32,
46 __reserved: Padding<crate::__u32>,
47 }
48}
49
50pub const FUTEX_WAITERS: u32 = 0x80000000;
51pub const FUTEX_OWNER_DIED: u32 = 0x40000000;
52pub const FUTEX_TID_MASK: u32 = 0x3fffffff;
53
54pub const FUTEX_BITSET_MATCH_ANY: c_int = u32_cast_int(0xffffffff);
55
56pub const FUTEX_OP_SET: c_int = 0;
57pub const FUTEX_OP_ADD: c_int = 1;
58pub const FUTEX_OP_OR: c_int = 2;
59pub const FUTEX_OP_ANDN: c_int = 3;
60pub const FUTEX_OP_XOR: c_int = 4;
61
62pub const FUTEX_OP_OPARG_SHIFT: c_int = 8;
63
64pub const FUTEX_OP_CMP_EQ: c_int = 0;
65pub const FUTEX_OP_CMP_NE: c_int = 1;
66pub const FUTEX_OP_CMP_LT: c_int = 2;
67pub const FUTEX_OP_CMP_LE: c_int = 3;
68pub const FUTEX_OP_CMP_GT: c_int = 4;
69pub const FUTEX_OP_CMP_GE: c_int = 5;
70
71pub fn FUTEX_OP(op: c_int, oparg: c_int, cmp: c_int, cmparg: c_int) -> c_int {
72 ((op & 0xf) << 28) | ((cmp & 0xf) << 24) | ((oparg & 0xfff) << 12) | (cmparg & 0xfff)
73}