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 eieio(void)13static inline void eieio(void) 14 { 15 __asm__ __volatile__ ("eieio" : : : "memory"); 16 } 17 isync(void)18static 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 __PPC_ACQUIRE_BARRIER \ 37 START_LWSYNC_SECTION(97); \ 38 isync; \ 39 MAKE_LWSYNC_SECTION_ENTRY(97, __lwsync_fixup); 40 #define PPC_ACQUIRE_BARRIER "\n" stringify_in_c(__PPC_ACQUIRE_BARRIER) 41 #define PPC_RELEASE_BARRIER stringify_in_c(LWSYNC) "\n" 42 #define PPC_ATOMIC_ENTRY_BARRIER "\n" stringify_in_c(sync) "\n" 43 #define PPC_ATOMIC_EXIT_BARRIER "\n" stringify_in_c(sync) "\n" 44 #else 45 #define PPC_ACQUIRE_BARRIER 46 #define PPC_RELEASE_BARRIER 47 #define PPC_ATOMIC_ENTRY_BARRIER 48 #define PPC_ATOMIC_EXIT_BARRIER 49 #endif 50 51 #endif /* __KERNEL__ */ 52 #endif /* _ASM_POWERPC_SYNCH_H */ 53