xref: /kvm-unit-tests/lib/arm/asm/barrier.h (revision 49f758b8a983e49b4537ea2726e8a83a0d5632ad)
1 #ifndef _ASMARM_BARRIER_H_
2 #define _ASMARM_BARRIER_H_
3 /*
4  * Adapted from arch/arm/include/asm/barrier.h
5  *
6  * Copyright (C) 2017, Red Hat Inc, Andrew Jones <drjones@redhat.com>
7  *
8  * This work is licensed under the terms of the GNU GPL, version 2.
9  */
10 
11 #define sev()		asm volatile("sev" : : : "memory")
12 #define wfe()		asm volatile("wfe" : : : "memory")
13 #define wfi()		asm volatile("wfi" : : : "memory")
14 #define yield()		asm volatile("yield" : : : "memory")
15 #define cpu_relax()	yield()
16 
17 #define isb(option) __asm__ __volatile__ ("isb " #option : : : "memory")
18 #define dsb(option) __asm__ __volatile__ ("dsb " #option : : : "memory")
19 #define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory")
20 
21 #define mb()		dsb()
22 #define rmb()		dsb()
23 #define wmb()		dsb(st)
24 #define smp_mb()	dmb(ish)
25 #define smp_rmb()	smp_mb()
26 #define smp_wmb()	dmb(ishst)
27 
28 #endif /* _ASMARM_BARRIER_H_ */
29