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)29 static 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)38 static 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)48 static 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)57 static 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)67 static 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)77 static 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