xref: /kvm-unit-tests/lib/arm/asm/barrier.h (revision 44bd4c1ddeaae30f96e45d867e71977cd2fed80c)
15e61cba0SAndrew Jones #ifndef _ASMARM_BARRIER_H_
25e61cba0SAndrew Jones #define _ASMARM_BARRIER_H_
35e61cba0SAndrew Jones /*
45e61cba0SAndrew Jones  * Adapted form arch/arm/include/asm/barrier.h
55e61cba0SAndrew Jones  */
65e61cba0SAndrew Jones 
7*44bd4c1dSAndrew Jones #define sev()		asm volatile("sev" : : : "memory")
8*44bd4c1dSAndrew Jones #define wfe()		asm volatile("wfe" : : : "memory")
9*44bd4c1dSAndrew Jones #define wfi()		asm volatile("wfi" : : : "memory")
10*44bd4c1dSAndrew Jones #define cpu_relax()	asm volatile(""    : : : "memory")
11*44bd4c1dSAndrew Jones 
125e61cba0SAndrew Jones #define isb(option) __asm__ __volatile__ ("isb " #option : : : "memory")
135e61cba0SAndrew Jones #define dsb(option) __asm__ __volatile__ ("dsb " #option : : : "memory")
145e61cba0SAndrew Jones #define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory")
155e61cba0SAndrew Jones 
165e61cba0SAndrew Jones #define mb()		dsb()
175e61cba0SAndrew Jones #define rmb()		dsb()
185e61cba0SAndrew Jones #define wmb()		dsb(st)
195e61cba0SAndrew Jones #define smp_mb()	dmb(ish)
205e61cba0SAndrew Jones #define smp_rmb()	smp_mb()
215e61cba0SAndrew Jones #define smp_wmb()	dmb(ishst)
225e61cba0SAndrew Jones 
235e61cba0SAndrew Jones #endif /* _ASMARM_BARRIER_H_ */
24