xref: /kvm-unit-tests/lib/arm64/asm/barrier.h (revision 49f758b8a983e49b4537ea2726e8a83a0d5632ad)
139ac3f84SAndrew Jones #ifndef _ASMARM64_BARRIER_H_
239ac3f84SAndrew Jones #define _ASMARM64_BARRIER_H_
339ac3f84SAndrew Jones /*
439ac3f84SAndrew Jones  * From Linux arch/arm64/include/asm/barrier.h
5*49f758b8SAndrew Jones  *
6*49f758b8SAndrew Jones  * Copyright (C) 2017, Red Hat Inc, Andrew Jones <drjones@redhat.com>
7*49f758b8SAndrew Jones  *
8*49f758b8SAndrew Jones  * This work is licensed under the terms of the GNU GPL, version 2.
939ac3f84SAndrew Jones  */
1039ac3f84SAndrew Jones 
1144bd4c1dSAndrew Jones #define sev()		asm volatile("sev" : : : "memory")
1244bd4c1dSAndrew Jones #define wfe()		asm volatile("wfe" : : : "memory")
1344bd4c1dSAndrew Jones #define wfi()		asm volatile("wfi" : : : "memory")
1481f05653SAndrew Jones #define yield()		asm volatile("yield" : : : "memory")
1581f05653SAndrew Jones #define cpu_relax()	yield()
1644bd4c1dSAndrew Jones 
1739ac3f84SAndrew Jones #define isb()		asm volatile("isb" : : : "memory")
1839ac3f84SAndrew Jones #define dmb(opt)	asm volatile("dmb " #opt : : : "memory")
1939ac3f84SAndrew Jones #define dsb(opt)	asm volatile("dsb " #opt : : : "memory")
2039ac3f84SAndrew Jones #define mb()		dsb(sy)
2139ac3f84SAndrew Jones #define rmb()		dsb(ld)
2239ac3f84SAndrew Jones #define wmb()		dsb(st)
2339ac3f84SAndrew Jones #define smp_mb()	dmb(ish)
2439ac3f84SAndrew Jones #define smp_rmb()	dmb(ishld)
2539ac3f84SAndrew Jones #define smp_wmb()	dmb(ishst)
2639ac3f84SAndrew Jones 
2739ac3f84SAndrew Jones #endif /* _ASMARM64_BARRIER_H_ */
28