libmetal
condition.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/*
8 * @file zephyr/condition.h
9 * @brief Zephyr condition variable primitives for libmetal.
10 */
11
12#ifndef __METAL_CONDITION__H__
13#error "Include metal/condition.h instead of metal/generic/condition.h"
14#endif
15
16#ifndef __METAL_ZEPHYR_CONDITION__H__
17#define __METAL_ZEPHYR_CONDITION__H__
18
19#include <metal/atomic.h>
20#include <metal/errno.h>
21#include <stddef.h>
22#include <stdint.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28struct metal_condition {
37};
38
40#define METAL_CONDITION_INIT { ATOMIC_VAR_INIT(0), ATOMIC_VAR_INIT(0) }
41
42static inline void metal_condition_init(struct metal_condition *cv)
43{
44 atomic_init(&cv->mptr, 0);
45 atomic_init(&cv->v, 0);
46}
47
48static inline int metal_condition_signal(struct metal_condition *cv)
49{
50 if (!cv)
51 return -EINVAL;
52
54 atomic_fetch_add(&cv->v, 1);
55 return 0;
56}
57
58static inline int metal_condition_broadcast(struct metal_condition *cv)
59{
60 return metal_condition_signal(cv);
61}
62
63
64#ifdef __cplusplus
65}
66#endif
67
68#endif /* __METAL_ZEPHYR_CONDITION__H__ */
#define atomic_fetch_add(OBJ, VAL)
Definition: atomic.h:95
int atomic_int
Definition: atomic.h:24
#define atomic_init(OBJ, VAL)
Definition: atomic.h:52
atomic_uint atomic_uintptr_t
Definition: atomic.h:26
#define EINVAL
Definition: errno.h:43
Definition: condition.h:25
atomic_int v
Definition: condition.h:32
atomic_uintptr_t mptr
Definition: condition.h:29
static int metal_condition_signal(struct metal_condition *cv)
Definition: condition.h:48
static int metal_condition_broadcast(struct metal_condition *cv)
Definition: condition.h:58
static void metal_condition_init(struct metal_condition *cv)
Definition: condition.h:42