libmetal
lib
system
zephyr
mutex.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/mutex.h
9
* @brief Zephyr mutex primitives for libmetal.
10
*/
11
12
#ifndef __METAL_MUTEX__H__
13
#error "Include metal/mutex.h instead of metal/zephyr/mutex.h"
14
#endif
15
16
#ifndef __METAL_ZEPHYR_MUTEX__H__
17
#define __METAL_ZEPHYR_MUTEX__H__
18
19
#include <metal/atomic.h>
20
#include <kernel.h>
21
22
#ifdef __cplusplus
23
extern
"C"
{
24
#endif
25
26
typedef
struct
k_sem
metal_mutex_t
;
27
28
/*
29
* METAL_MUTEX_INIT - used for initializing an mutex elmenet in a static struct
30
* or global
31
*/
32
#define METAL_MUTEX_INIT(m) _K_SEM_INITIALIZER(m, 1, 1)
33
/*
34
* METAL_MUTEX_DEFINE - used for defining and initializing a global or
35
* static singleton mutex
36
*/
37
#define METAL_MUTEX_DEFINE(m) K_SEM_DEFINE(m, 1, 1)
38
39
static
inline
void
__metal_mutex_init
(
metal_mutex_t
*m)
40
{
41
k_sem_init(m, 1, 1);
42
}
43
44
static
inline
void
__metal_mutex_deinit
(
metal_mutex_t
*m)
45
{
46
(void)m;
47
}
48
49
static
inline
int
__metal_mutex_try_acquire
(
metal_mutex_t
*m)
50
{
51
int
key =
irq_lock
(), ret = 1;
52
53
if
(m->count) {
54
m->count = 0;
55
ret = 0;
56
}
57
58
irq_unlock(key);
59
60
return
ret;
61
}
62
63
static
inline
int
__metal_mutex_is_acquired
(
metal_mutex_t
*m)
64
{
65
int
key =
irq_lock
(), ret;
66
67
ret = m->count;
68
69
irq_unlock(key);
70
71
return
ret;
72
}
73
74
static
inline
void
__metal_mutex_acquire
(
metal_mutex_t
*m)
75
{
76
k_sem_take(m, K_FOREVER);
77
}
78
79
static
inline
void
__metal_mutex_release
(
metal_mutex_t
*m)
80
{
81
k_sem_give(m);
82
}
83
84
#ifdef __cplusplus
85
}
86
#endif
87
88
#endif
/* __METAL_ZEPHYR_MUTEX__H__ */
__metal_mutex_deinit
static void __metal_mutex_deinit(metal_mutex_t *m)
Definition:
mutex.h:44
__metal_mutex_is_acquired
static int __metal_mutex_is_acquired(metal_mutex_t *m)
Definition:
mutex.h:63
__metal_mutex_release
static void __metal_mutex_release(metal_mutex_t *m)
Definition:
mutex.h:79
irq_lock
static metal_mutex_t irq_lock
Definition:
irq.c:37
__metal_mutex_acquire
static void __metal_mutex_acquire(metal_mutex_t *m)
Definition:
mutex.h:74
__metal_mutex_init
static void __metal_mutex_init(metal_mutex_t *m)
Definition:
mutex.h:39
__metal_mutex_try_acquire
static int __metal_mutex_try_acquire(metal_mutex_t *m)
Definition:
mutex.h:49
metal_mutex_t
Definition:
mutex.h:26
Generated on Sat Aug 1 2020 00:00:00 for libmetal by
1.8.18