PageRenderTime 49ms CodeModel.GetById 25ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/powerpc/include/asm/synch.h

https://bitbucket.org/abioy/linux
C Header | 52 lines | 44 code | 8 blank | 0 comment | 1 complexity | 8bfc1248ebac67048485418e54275232 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, GPL-2.0, LGPL-2.0, AGPL-1.0
 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#if defined(__powerpc64__) || defined(CONFIG_PPC_E500MC)
 9#define __SUBARCH_HAS_LWSYNC
10#endif
11
12#ifndef __ASSEMBLY__
13extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup;
14extern void do_lwsync_fixups(unsigned long value, void *fixup_start,
15			     void *fixup_end);
16
17static inline void eieio(void)
18{
19	__asm__ __volatile__ ("eieio" : : : "memory");
20}
21
22static inline void isync(void)
23{
24	__asm__ __volatile__ ("isync" : : : "memory");
25}
26#endif /* __ASSEMBLY__ */
27
28#if defined(__powerpc64__)
29#    define LWSYNC	lwsync
30#elif defined(CONFIG_E500)
31#    define LWSYNC					\
32	START_LWSYNC_SECTION(96);			\
33	sync;						\
34	MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup);
35#else
36#    define LWSYNC	sync
37#endif
38
39#ifdef CONFIG_SMP
40#define __PPC_ACQUIRE_BARRIER				\
41	START_LWSYNC_SECTION(97);			\
42	isync;						\
43	MAKE_LWSYNC_SECTION_ENTRY(97, __lwsync_fixup);
44#define PPC_ACQUIRE_BARRIER	"\n" stringify_in_c(__PPC_ACQUIRE_BARRIER)
45#define PPC_RELEASE_BARRIER	stringify_in_c(LWSYNC) "\n"
46#else
47#define PPC_ACQUIRE_BARRIER
48#define PPC_RELEASE_BARRIER
49#endif
50
51#endif /* __KERNEL__ */
52#endif	/* _ASM_POWERPC_SYNCH_H */