1 #ifndef _ASM_POWERPC_SYNCH_H 2 #define _ASM_POWERPC_SYNCH_H 3 #ifdef __KERNEL__ 4 5 #include <linux/stringify.h> 6 #include <asm/feature-fixups.h> 7 8 #ifndef __ASSEMBLY__ 9 extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup; 10 extern void do_lwsync_fixups(unsigned long value, void *fixup_start, 11 void *fixup_end); 12 13 static inline void eieio(void) 14 { 15 __asm__ __volatile__ ("eieio" : : : "memory"); 16 } 17 18 static inline void isync(void) 19 { 20 __asm__ __volatile__ ("isync" : : : "memory"); 21 } 22 #endif /* __ASSEMBLY__ */ 23 24 #if defined(__powerpc64__) 25 # define LWSYNC lwsync 26 #elif defined(CONFIG_E500) 27 # define LWSYNC \ 28 START_LWSYNC_SECTION(96); \ 29 sync; \ 30 MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup); 31 #else 32 # define LWSYNC sync 33 #endif 34 35 #ifdef CONFIG_SMP 36 #define ISYNC_ON_SMP "\n\tisync\n" 37 #define LWSYNC_ON_SMP stringify_in_c(LWSYNC) "\n" 38 #else 39 #define ISYNC_ON_SMP 40 #define LWSYNC_ON_SMP 41 #endif 42 43 #endif /* __KERNEL__ */ 44 #endif /* _ASM_POWERPC_SYNCH_H */ 45