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 extern void do_final_fixups(void); 13 eieio(void)14static inline void eieio(void) 15 { 16 __asm__ __volatile__ ("eieio" : : : "memory"); 17 } 18 isync(void)19static inline void isync(void) 20 { 21 __asm__ __volatile__ ("isync" : : : "memory"); 22 } 23 #endif /* __ASSEMBLY__ */ 24 25 #if defined(__powerpc64__) 26 # define LWSYNC lwsync 27 #elif defined(CONFIG_E500) 28 # define LWSYNC \ 29 START_LWSYNC_SECTION(96); \ 30 sync; \ 31 MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup); 32 #else 33 # define LWSYNC sync 34 #endif 35 36 #ifdef CONFIG_SMP 37 #define __PPC_ACQUIRE_BARRIER \ 38 START_LWSYNC_SECTION(97); \ 39 isync; \ 40 MAKE_LWSYNC_SECTION_ENTRY(97, __lwsync_fixup); 41 #define PPC_ACQUIRE_BARRIER "\n" stringify_in_c(__PPC_ACQUIRE_BARRIER) 42 #define PPC_RELEASE_BARRIER stringify_in_c(LWSYNC) "\n" 43 #define PPC_ATOMIC_ENTRY_BARRIER "\n" stringify_in_c(sync) "\n" 44 #define PPC_ATOMIC_EXIT_BARRIER "\n" stringify_in_c(sync) "\n" 45 #else 46 #define PPC_ACQUIRE_BARRIER 47 #define PPC_RELEASE_BARRIER 48 #define PPC_ATOMIC_ENTRY_BARRIER 49 #define PPC_ATOMIC_EXIT_BARRIER 50 #endif 51 52 #endif /* __KERNEL__ */ 53 #endif /* _ASM_POWERPC_SYNCH_H */ 54