diff options
Diffstat (limited to 'arch/powerpc/include/asm/synch.h')
-rw-r--r-- | arch/powerpc/include/asm/synch.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/synch.h b/arch/powerpc/include/asm/synch.h new file mode 100644 index 000000000000..45963e80f557 --- /dev/null +++ b/arch/powerpc/include/asm/synch.h | |||
@@ -0,0 +1,44 @@ | |||
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 */ | ||