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)28 static 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)37 static 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)47 static 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)56 static 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)66 static 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)76 static 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