Line data Source code
1 0 : /* 2 : * Copyright (c) 2023 Carlo Caione <ccaione@baylibre.com> 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_SYS_BARRIER_BUILTIN_H_ 8 : #define ZEPHYR_INCLUDE_SYS_BARRIER_BUILTIN_H_ 9 : 10 : #ifndef ZEPHYR_INCLUDE_SYS_BARRIER_H_ 11 : #error Please include <zephyr/sys/barrier.h> 12 : #endif 13 : 14 : #include <zephyr/toolchain.h> 15 : 16 : #ifdef __cplusplus 17 : extern "C" { 18 : #endif 19 : 20 : static ALWAYS_INLINE void z_barrier_dmem_fence_full(void) 21 : { 22 : #if defined(__GNUC__) 23 : /* GCC-ism */ 24 : __atomic_thread_fence(__ATOMIC_SEQ_CST); 25 : #else 26 : atomic_thread_fence(memory_order_seq_cst); 27 : #endif 28 : } 29 : 30 : static ALWAYS_INLINE void z_barrier_dsync_fence_full(void) 31 : { 32 : #if defined(__GNUC__) 33 : /* GCC-ism */ 34 : __atomic_thread_fence(__ATOMIC_SEQ_CST); 35 : #else 36 : atomic_thread_fence(memory_order_seq_cst); 37 : #endif 38 : } 39 : 40 : static ALWAYS_INLINE void z_barrier_isync_fence_full(void) 41 : { 42 : __asm__ volatile("" : : : "memory"); 43 : } 44 : 45 : #ifdef __cplusplus 46 : } 47 : #endif 48 : 49 : #endif /* ZEPHYR_INCLUDE_SYS_BARRIER_BUILTIN_H_ */