xref: /dpdk/lib/eal/loongarch/include/rte_atomic.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2022 Loongson Technology Corporation Limited
3  */
4 
5 #ifndef RTE_ATOMIC_LOONGARCH_H
6 #define RTE_ATOMIC_LOONGARCH_H
7 
8 #ifndef RTE_FORCE_INTRINSICS
9 #  error Platform must be built with RTE_FORCE_INTRINSICS
10 #endif
11 
12 #include <rte_common.h>
13 #include "generic/rte_atomic.h"
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 #define rte_mb()	do { asm volatile("dbar 0":::"memory"); } while (0)
20 
21 #define rte_wmb()	rte_mb()
22 
23 #define rte_rmb()	rte_mb()
24 
25 #define rte_smp_mb()	rte_mb()
26 
27 #define rte_smp_wmb()	rte_mb()
28 
29 #define rte_smp_rmb()	rte_mb()
30 
31 #define rte_io_mb()	rte_mb()
32 
33 #define rte_io_wmb()	rte_mb()
34 
35 #define rte_io_rmb()	rte_mb()
36 
37 static __rte_always_inline void
38 rte_atomic_thread_fence(rte_memory_order memorder)
39 {
40 	__rte_atomic_thread_fence(memorder);
41 }
42 
43 #ifdef __cplusplus
44 }
45 #endif
46 
47 #endif /* RTE_ATOMIC_LOONGARCH_H */
48