0001
0002 #ifndef _UAPI_LINUX_FUTEX_H
0003 #define _UAPI_LINUX_FUTEX_H
0004
0005 #include <linux/compiler.h>
0006 #include <linux/types.h>
0007
0008
0009
0010
0011 #define FUTEX_WAIT 0
0012 #define FUTEX_WAKE 1
0013 #define FUTEX_FD 2
0014 #define FUTEX_REQUEUE 3
0015 #define FUTEX_CMP_REQUEUE 4
0016 #define FUTEX_WAKE_OP 5
0017 #define FUTEX_LOCK_PI 6
0018 #define FUTEX_UNLOCK_PI 7
0019 #define FUTEX_TRYLOCK_PI 8
0020 #define FUTEX_WAIT_BITSET 9
0021 #define FUTEX_WAKE_BITSET 10
0022 #define FUTEX_WAIT_REQUEUE_PI 11
0023 #define FUTEX_CMP_REQUEUE_PI 12
0024 #define FUTEX_LOCK_PI2 13
0025
0026 #define FUTEX_PRIVATE_FLAG 128
0027 #define FUTEX_CLOCK_REALTIME 256
0028 #define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
0029
0030 #define FUTEX_WAIT_PRIVATE (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)
0031 #define FUTEX_WAKE_PRIVATE (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)
0032 #define FUTEX_REQUEUE_PRIVATE (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)
0033 #define FUTEX_CMP_REQUEUE_PRIVATE (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)
0034 #define FUTEX_WAKE_OP_PRIVATE (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)
0035 #define FUTEX_LOCK_PI_PRIVATE (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)
0036 #define FUTEX_LOCK_PI2_PRIVATE (FUTEX_LOCK_PI2 | FUTEX_PRIVATE_FLAG)
0037 #define FUTEX_UNLOCK_PI_PRIVATE (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)
0038 #define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
0039 #define FUTEX_WAIT_BITSET_PRIVATE (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)
0040 #define FUTEX_WAKE_BITSET_PRIVATE (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
0041 #define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | \
0042 FUTEX_PRIVATE_FLAG)
0043 #define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | \
0044 FUTEX_PRIVATE_FLAG)
0045
0046
0047
0048
0049
0050 #define FUTEX_32 2
0051
0052
0053
0054
0055 #define FUTEX_WAITV_MAX 128
0056
0057
0058
0059
0060
0061
0062
0063
0064 struct futex_waitv {
0065 __u64 val;
0066 __u64 uaddr;
0067 __u32 flags;
0068 __u32 __reserved;
0069 };
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085 struct robust_list {
0086 struct robust_list __user *next;
0087 };
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 struct robust_list_head {
0098
0099
0100
0101 struct robust_list list;
0102
0103
0104
0105
0106
0107
0108
0109 long futex_offset;
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121 struct robust_list __user *list_op_pending;
0122 };
0123
0124
0125
0126
0127 #define FUTEX_WAITERS 0x80000000
0128
0129
0130
0131
0132
0133
0134
0135 #define FUTEX_OWNER_DIED 0x40000000
0136
0137
0138
0139
0140 #define FUTEX_TID_MASK 0x3fffffff
0141
0142
0143
0144
0145
0146 #define ROBUST_LIST_LIMIT 2048
0147
0148
0149
0150
0151
0152 #define FUTEX_BITSET_MATCH_ANY 0xffffffff
0153
0154
0155 #define FUTEX_OP_SET 0
0156 #define FUTEX_OP_ADD 1
0157 #define FUTEX_OP_OR 2
0158 #define FUTEX_OP_ANDN 3
0159 #define FUTEX_OP_XOR 4
0160
0161 #define FUTEX_OP_OPARG_SHIFT 8
0162
0163 #define FUTEX_OP_CMP_EQ 0
0164 #define FUTEX_OP_CMP_NE 1
0165 #define FUTEX_OP_CMP_LT 2
0166 #define FUTEX_OP_CMP_LE 3
0167 #define FUTEX_OP_CMP_GT 4
0168 #define FUTEX_OP_CMP_GE 5
0169
0170
0171
0172
0173
0174
0175
0176 #define FUTEX_OP(op, oparg, cmp, cmparg) \
0177 (((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
0178 | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
0179
0180 #endif