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 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 /** \defgroup mutex Mutex Interfaces 20 * @{ */ 21 22 #include <metal/system/generic/mutex.h> 23 24 /** 25 * @brief Initialize a libmetal mutex. 26 * @param[in] mutex Mutex to initialize. 27 */ metal_mutex_init(metal_mutex_t * mutex)28static inline void metal_mutex_init(metal_mutex_t *mutex) 29 { 30 __metal_mutex_init(mutex); 31 } 32 33 /** 34 * @brief Deinitialize a libmetal mutex. 35 * @param[in] mutex Mutex to deinitialize. 36 */ metal_mutex_deinit(metal_mutex_t * mutex)37static inline void metal_mutex_deinit(metal_mutex_t *mutex) 38 { 39 __metal_mutex_deinit(mutex); 40 } 41 42 /** 43 * @brief Try to acquire a mutex 44 * @param[in] mutex Mutex to mutex. 45 * @return 0 on failure to acquire, non-zero on success. 46 */ metal_mutex_try_acquire(metal_mutex_t * mutex)47static inline int metal_mutex_try_acquire(metal_mutex_t *mutex) 48 { 49 return __metal_mutex_try_acquire(mutex); 50 } 51 52 /** 53 * @brief Acquire a mutex 54 * @param[in] mutex Mutex to mutex. 55 */ metal_mutex_acquire(metal_mutex_t * mutex)56static inline void metal_mutex_acquire(metal_mutex_t *mutex) 57 { 58 __metal_mutex_acquire(mutex); 59 } 60 61 /** 62 * @brief Release a previously acquired mutex. 63 * @param[in] mutex Mutex to mutex. 64 * @see metal_mutex_try_acquire, metal_mutex_acquire 65 */ metal_mutex_release(metal_mutex_t * mutex)66static inline void metal_mutex_release(metal_mutex_t *mutex) 67 { 68 __metal_mutex_release(mutex); 69 } 70 71 /** 72 * @brief Checked if a mutex has been acquired. 73 * @param[in] mutex mutex to check. 74 * @see metal_mutex_try_acquire, metal_mutex_acquire 75 */ metal_mutex_is_acquired(metal_mutex_t * mutex)76static inline int metal_mutex_is_acquired(metal_mutex_t *mutex) 77 { 78 return __metal_mutex_is_acquired(mutex); 79 } 80 81 /** @} */ 82 83 #ifdef __cplusplus 84 } 85 #endif 86 87 #endif /* __METAL_MUTEX__H__ */ 88