15e61cba0SAndrew Jones #ifndef _ASMARM_BARRIER_H_ 25e61cba0SAndrew Jones #define _ASMARM_BARRIER_H_ 35e61cba0SAndrew Jones /* 481f05653SAndrew Jones * Adapted from arch/arm/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. 95e61cba0SAndrew Jones */ 105e61cba0SAndrew 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 175e61cba0SAndrew Jones #define isb(option) __asm__ __volatile__ ("isb " #option : : : "memory") 185e61cba0SAndrew Jones #define dsb(option) __asm__ __volatile__ ("dsb " #option : : : "memory") 195e61cba0SAndrew Jones #define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory") 205e61cba0SAndrew Jones 215e61cba0SAndrew Jones #define mb() dsb() 225e61cba0SAndrew Jones #define rmb() dsb() 235e61cba0SAndrew Jones #define wmb() dsb(st) 245e61cba0SAndrew Jones #define smp_mb() dmb(ish) 255e61cba0SAndrew Jones #define smp_rmb() smp_mb() 265e61cba0SAndrew Jones #define smp_wmb() dmb(ishst) 275e61cba0SAndrew Jones 285e61cba0SAndrew Jones #endif /* _ASMARM_BARRIER_H_ */ 29