New upstream version 18.02
[deb_dpdk.git] / lib / librte_eal / common / include / arch / arm / rte_atomic_64.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2015 Cavium, Inc
3  */
4
5 #ifndef _RTE_ATOMIC_ARM64_H_
6 #define _RTE_ATOMIC_ARM64_H_
7
8 #ifndef RTE_FORCE_INTRINSICS
9 #  error Platform must be built with CONFIG_RTE_FORCE_INTRINSICS
10 #endif
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 #include "generic/rte_atomic.h"
17
18 #define dsb(opt) asm volatile("dsb " #opt : : : "memory")
19 #define dmb(opt) asm volatile("dmb " #opt : : : "memory")
20
21 #define rte_mb() dsb(sy)
22
23 #define rte_wmb() dsb(st)
24
25 #define rte_rmb() dsb(ld)
26
27 #define rte_smp_mb() dmb(ish)
28
29 #define rte_smp_wmb() dmb(ishst)
30
31 #define rte_smp_rmb() dmb(ishld)
32
33 #define rte_io_mb() rte_mb()
34
35 #define rte_io_wmb() rte_wmb()
36
37 #define rte_io_rmb() rte_rmb()
38
39 #define rte_cio_wmb() dmb(oshst)
40
41 #define rte_cio_rmb() dmb(oshld)
42
43 #ifdef __cplusplus
44 }
45 #endif
46
47 #endif /* _RTE_ATOMIC_ARM64_H_ */