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)38static 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)44static 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)51static 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