nRF Connect SDK API 3.3.99
Loading...
Searching...
No Matches
membarriers.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5 */
6
17#include <zephyr/kernel.h>
18#include <nrfx.h>
19
24static inline void cmb(void)
25{
26 /* The Data Memory Barrier (DMB) instruction ensures that
27 * outstanding memory transactions complete before subsequent
28 * memory transactions. It is expected to be defined by cmsis.h.
29 */
30 __DMB();
31}
32
41static inline void wmb(void)
42{
43#ifdef __aarch64__
44 __asm__ volatile("dsb sy;" ::: "memory");
45#elif defined(__amd64__)
46 __asm__ volatile("sfence;" ::: "memory");
47#else
48 /* CUSTOMIZATION: implement CPU specific memory barrier if it has any.
49 * Use at least a compiler memory barrier.
50 */
51
52 /* Cortex-M33 does not support wmb, but cmb/DMB is more
53 * restrictive and therefore safe to use.
54 */
55 cmb();
56#endif
57}
58
67static inline void rmb(void)
68{
69#ifdef __aarch64__
70 __asm__ volatile("dsb sy;" ::: "memory");
71#elif defined(__amd64__)
72 __asm__ volatile("lfence;" ::: "memory");
73#else
74 /* CUSTOMIZATION: implement CPU specific memory barrier if it has any.
75 * Use at least a compiler memory barrier.
76 */
77
78 /* Cortex-M33 does not support rmb, but cmb/DMB is more
79 * restrictive and therefore safe to use.
80 */
81 cmb();
82#endif
83}
84
static void wmb(void)
Definition membarriers.h:41
static void cmb(void)
Definition membarriers.h:24
static void rmb(void)
Definition membarriers.h:67