1 /* 2 * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /* 8 * @file mutex.h 9 * @brief Mutex primitives for libmetal. 10 */ 11 12 #ifndef __METAL_MUTEX__H__ 13 #define __METAL_MUTEX__H__ 14 15 #include <metal/system/@PROJECT_SYSTEM@/mutex.h> 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 /** \defgroup mutex Mutex Interfaces 22 * @{ 23 */ 24 25 /** 26 * @brief Initialize a libmetal mutex. 27 * @param[in] mutex Mutex to initialize. 28 */ metal_mutex_init(metal_mutex_t * mutex)29static inline void metal_mutex_init(metal_mutex_t *mutex) 30 { 31 __metal_mutex_init(mutex); 32 } 33 34 /** 35 * @brief Deinitialize a libmetal mutex. 36 * @param[in] mutex Mutex to deinitialize. 37 */ metal_mutex_deinit(metal_mutex_t * mutex)38static inline void metal_mutex_deinit(metal_mutex_t *mutex) 39 { 40 __metal_mutex_deinit(mutex); 41 } 42 43 /** 44 * @brief Try to acquire a mutex 45 * @param[in] mutex Mutex to mutex. 46 * @return 0 on failure to acquire, non-zero on success. 47 */ metal_mutex_try_acquire(metal_mutex_t * mutex)48static inline int metal_mutex_try_acquire(metal_mutex_t *mutex) 49 { 50 return __metal_mutex_try_acquire(mutex); 51 } 52 53 /** 54 * @brief Acquire a mutex 55 * @param[in] mutex Mutex to mutex. 56 */ metal_mutex_acquire(metal_mutex_t * mutex)57static inline void metal_mutex_acquire(metal_mutex_t *mutex) 58 { 59 __metal_mutex_acquire(mutex); 60 } 61 62 /** 63 * @brief Release a previously acquired mutex. 64 * @param[in] mutex Mutex to mutex. 65 * @see metal_mutex_try_acquire, metal_mutex_acquire 66 */ metal_mutex_release(metal_mutex_t * mutex)67static inline void metal_mutex_release(metal_mutex_t *mutex) 68 { 69 __metal_mutex_release(mutex); 70 } 71 72 /** 73 * @brief Checked if a mutex has been acquired. 74 * @param[in] mutex mutex to check. 75 * @see metal_mutex_try_acquire, metal_mutex_acquire 76 */ metal_mutex_is_acquired(metal_mutex_t * mutex)77static inline int metal_mutex_is_acquired(metal_mutex_t *mutex) 78 { 79 return __metal_mutex_is_acquired(mutex); 80 } 81 82 /** @} */ 83 84 #ifdef __cplusplus 85 } 86 #endif 87 88 #endif /* __METAL_MUTEX__H__ */ 89