xref: /aosp_15_r20/external/llvm-libc/src/pthread/pthread_mutexattr.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- Declarations related mutex attribute objects  -----------*- C++ -*-===//
2*71db0c75SAndroid Build Coastguard Worker //
3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*71db0c75SAndroid Build Coastguard Worker //
7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*71db0c75SAndroid Build Coastguard Worker 
9*71db0c75SAndroid Build Coastguard Worker #ifndef LLVM_LIBC_SRC_PTHREAD_PTHREAD_MUTEXATTR_H
10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_SRC_PTHREAD_PTHREAD_MUTEXATTR_H
11*71db0c75SAndroid Build Coastguard Worker 
12*71db0c75SAndroid Build Coastguard Worker #include "src/__support/common.h"
13*71db0c75SAndroid Build Coastguard Worker #include "src/__support/macros/config.h"
14*71db0c75SAndroid Build Coastguard Worker 
15*71db0c75SAndroid Build Coastguard Worker #include <pthread.h>
16*71db0c75SAndroid Build Coastguard Worker 
17*71db0c75SAndroid Build Coastguard Worker namespace LIBC_NAMESPACE_DECL {
18*71db0c75SAndroid Build Coastguard Worker 
19*71db0c75SAndroid Build Coastguard Worker enum class PThreadMutexAttrPos : unsigned int {
20*71db0c75SAndroid Build Coastguard Worker   TYPE_SHIFT = 0,
21*71db0c75SAndroid Build Coastguard Worker   TYPE_MASK = 0x3 << TYPE_SHIFT, // Type is encoded in 2 bits
22*71db0c75SAndroid Build Coastguard Worker 
23*71db0c75SAndroid Build Coastguard Worker   ROBUST_SHIFT = 2,
24*71db0c75SAndroid Build Coastguard Worker   ROBUST_MASK = 0x1 << ROBUST_SHIFT,
25*71db0c75SAndroid Build Coastguard Worker 
26*71db0c75SAndroid Build Coastguard Worker   PSHARED_SHIFT = 3,
27*71db0c75SAndroid Build Coastguard Worker   PSHARED_MASK = 0x1 << PSHARED_SHIFT,
28*71db0c75SAndroid Build Coastguard Worker 
29*71db0c75SAndroid Build Coastguard Worker   // TODO: Add a mask for protocol and prioceiling when it is supported.
30*71db0c75SAndroid Build Coastguard Worker };
31*71db0c75SAndroid Build Coastguard Worker 
32*71db0c75SAndroid Build Coastguard Worker constexpr pthread_mutexattr_t DEFAULT_MUTEXATTR =
33*71db0c75SAndroid Build Coastguard Worker     PTHREAD_MUTEX_DEFAULT << unsigned(PThreadMutexAttrPos::TYPE_SHIFT) |
34*71db0c75SAndroid Build Coastguard Worker     PTHREAD_MUTEX_STALLED << unsigned(PThreadMutexAttrPos::ROBUST_SHIFT) |
35*71db0c75SAndroid Build Coastguard Worker     PTHREAD_PROCESS_PRIVATE << unsigned(PThreadMutexAttrPos::PSHARED_SHIFT);
36*71db0c75SAndroid Build Coastguard Worker 
get_mutexattr_type(pthread_mutexattr_t attr)37*71db0c75SAndroid Build Coastguard Worker LIBC_INLINE int get_mutexattr_type(pthread_mutexattr_t attr) {
38*71db0c75SAndroid Build Coastguard Worker   return (attr & unsigned(PThreadMutexAttrPos::TYPE_MASK)) >>
39*71db0c75SAndroid Build Coastguard Worker          unsigned(PThreadMutexAttrPos::TYPE_SHIFT);
40*71db0c75SAndroid Build Coastguard Worker }
41*71db0c75SAndroid Build Coastguard Worker 
get_mutexattr_robust(pthread_mutexattr_t attr)42*71db0c75SAndroid Build Coastguard Worker LIBC_INLINE int get_mutexattr_robust(pthread_mutexattr_t attr) {
43*71db0c75SAndroid Build Coastguard Worker   return (attr & unsigned(PThreadMutexAttrPos::ROBUST_MASK)) >>
44*71db0c75SAndroid Build Coastguard Worker          unsigned(PThreadMutexAttrPos::ROBUST_SHIFT);
45*71db0c75SAndroid Build Coastguard Worker }
46*71db0c75SAndroid Build Coastguard Worker 
get_mutexattr_pshared(pthread_mutexattr_t attr)47*71db0c75SAndroid Build Coastguard Worker LIBC_INLINE int get_mutexattr_pshared(pthread_mutexattr_t attr) {
48*71db0c75SAndroid Build Coastguard Worker   return (attr & unsigned(PThreadMutexAttrPos::PSHARED_MASK)) >>
49*71db0c75SAndroid Build Coastguard Worker          unsigned(PThreadMutexAttrPos::PSHARED_SHIFT);
50*71db0c75SAndroid Build Coastguard Worker }
51*71db0c75SAndroid Build Coastguard Worker 
52*71db0c75SAndroid Build Coastguard Worker } // namespace LIBC_NAMESPACE_DECL
53*71db0c75SAndroid Build Coastguard Worker 
54*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_SRC_PTHREAD_PTHREAD_MUTEXATTR_H
55