1 /*
2  * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /*
8  * @file	generic/condition.h
9  * @brief	Generic condition variable primitives for libmetal.
10  */
11 
12 #ifndef __METAL_CONDITION__H__
13 #error "Include metal/condition.h instead of metal/freertos/condition.h"
14 #endif
15 
16 #ifndef __METAL_FREERTOS_CONDITION__H__
17 #define __METAL_FREERTOS_CONDITION__H__
18 
19 #include <metal/atomic.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 struct metal_condition {
26 	metal_mutex_t *m; /**< mutex.
27 			    * The condition variable is attached to this mutex
28 			    * when it is waiting. It is also used to check
29 			    * correctness in case there are multiple waiters.
30 			    */
31 
32 	atomic_int v; /**< condition variable value. */
33 };
34 
35 /** Static metal condition variable initialization. */
36 #define METAL_CONDITION_INIT		{ NULL, ATOMIC_VAR_INIT(0) }
37 
metal_condition_init(struct metal_condition * cv)38 static inline void metal_condition_init(struct metal_condition *cv)
39 {
40 	/* TODO: Implement condition variable for FreeRTOS */
41 	(void)cv;
42 }
43 
metal_condition_signal(struct metal_condition * cv)44 static inline int metal_condition_signal(struct metal_condition *cv)
45 {
46 	/* TODO: Implement condition variable for FreeRTOS */
47 	(void)cv;
48 	return 0;
49 }
50 
metal_condition_broadcast(struct metal_condition * cv)51 static inline int metal_condition_broadcast(struct metal_condition *cv)
52 {
53 	/* TODO: Implement condition variable for FreeRTOS */
54 	(void)cv;
55 	return 0;
56 }
57 
58 #ifdef __cplusplus
59 }
60 #endif
61 
62 #endif /* __METAL_FREERTOS_CONDITION__H__ */
63