49 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _ASM_POWERPC_SYNCH_H 
 | 
						|
#define _ASM_POWERPC_SYNCH_H 
 | 
						|
#ifdef __KERNEL__
 | 
						|
 | 
						|
#include <linux/stringify.h>
 | 
						|
#include <asm/feature-fixups.h>
 | 
						|
 | 
						|
#if defined(__powerpc64__) || defined(CONFIG_PPC_E500MC)
 | 
						|
#define __SUBARCH_HAS_LWSYNC
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __ASSEMBLY__
 | 
						|
extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup;
 | 
						|
extern void do_lwsync_fixups(unsigned long value, void *fixup_start,
 | 
						|
			     void *fixup_end);
 | 
						|
 | 
						|
static inline void eieio(void)
 | 
						|
{
 | 
						|
	__asm__ __volatile__ ("eieio" : : : "memory");
 | 
						|
}
 | 
						|
 | 
						|
static inline void isync(void)
 | 
						|
{
 | 
						|
	__asm__ __volatile__ ("isync" : : : "memory");
 | 
						|
}
 | 
						|
#endif /* __ASSEMBLY__ */
 | 
						|
 | 
						|
#if defined(__powerpc64__)
 | 
						|
#    define LWSYNC	lwsync
 | 
						|
#elif defined(CONFIG_E500)
 | 
						|
#    define LWSYNC					\
 | 
						|
	START_LWSYNC_SECTION(96);			\
 | 
						|
	sync;						\
 | 
						|
	MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup);
 | 
						|
#else
 | 
						|
#    define LWSYNC	sync
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef CONFIG_SMP
 | 
						|
#define ISYNC_ON_SMP	"\n\tisync\n"
 | 
						|
#define LWSYNC_ON_SMP	stringify_in_c(LWSYNC) "\n"
 | 
						|
#else
 | 
						|
#define ISYNC_ON_SMP
 | 
						|
#define LWSYNC_ON_SMP
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* __KERNEL__ */
 | 
						|
#endif	/* _ASM_POWERPC_SYNCH_H */
 |