Commit | Line | Data |
---|---|---|
feaf7cf1 BB |
1 | #ifndef _ASM_POWERPC_SYNCH_H |
2 | #define _ASM_POWERPC_SYNCH_H | |
88ced031 | 3 | #ifdef __KERNEL__ |
feaf7cf1 | 4 | |
144b9c13 | 5 | #include <linux/stringify.h> |
2d1b2027 | 6 | #include <asm/feature-fixups.h> |
144b9c13 | 7 | |
46d075be NP |
8 | #if defined(__powerpc64__) || defined(CONFIG_PPC_E500MC) |
9 | #define __SUBARCH_HAS_LWSYNC | |
10 | #endif | |
11 | ||
2d1b2027 KG |
12 | #ifndef __ASSEMBLY__ |
13 | extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup; | |
14 | extern void do_lwsync_fixups(unsigned long value, void *fixup_start, | |
15 | void *fixup_end); | |
d715e433 | 16 | extern void do_final_fixups(void); |
2d1b2027 KG |
17 | |
18 | static inline void eieio(void) | |
19 | { | |
20 | __asm__ __volatile__ ("eieio" : : : "memory"); | |
21 | } | |
22 | ||
23 | static inline void isync(void) | |
24 | { | |
25 | __asm__ __volatile__ ("isync" : : : "memory"); | |
26 | } | |
27 | #endif /* __ASSEMBLY__ */ | |
feaf7cf1 | 28 | |
2d1b2027 | 29 | #if defined(__powerpc64__) |
feaf7cf1 | 30 | # define LWSYNC lwsync |
2d1b2027 KG |
31 | #elif defined(CONFIG_E500) |
32 | # define LWSYNC \ | |
33 | START_LWSYNC_SECTION(96); \ | |
34 | sync; \ | |
35 | MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup); | |
feaf7cf1 BB |
36 | #else |
37 | # define LWSYNC sync | |
38 | #endif | |
39 | ||
feaf7cf1 | 40 | #ifdef CONFIG_SMP |
5a0e9b57 AB |
41 | #define __PPC_ACQUIRE_BARRIER \ |
42 | START_LWSYNC_SECTION(97); \ | |
43 | isync; \ | |
44 | MAKE_LWSYNC_SECTION_ENTRY(97, __lwsync_fixup); | |
b97021f8 BH |
45 | #define PPC_ACQUIRE_BARRIER "\n" stringify_in_c(__PPC_ACQUIRE_BARRIER) |
46 | #define PPC_RELEASE_BARRIER stringify_in_c(LWSYNC) "\n" | |
47 | #define PPC_ATOMIC_ENTRY_BARRIER "\n" stringify_in_c(LWSYNC) "\n" | |
48 | #define PPC_ATOMIC_EXIT_BARRIER "\n" stringify_in_c(sync) "\n" | |
feaf7cf1 | 49 | #else |
f10e2e5b AB |
50 | #define PPC_ACQUIRE_BARRIER |
51 | #define PPC_RELEASE_BARRIER | |
b97021f8 BH |
52 | #define PPC_ATOMIC_ENTRY_BARRIER |
53 | #define PPC_ATOMIC_EXIT_BARRIER | |
feaf7cf1 BB |
54 | #endif |
55 | ||
88ced031 | 56 | #endif /* __KERNEL__ */ |
feaf7cf1 | 57 | #endif /* _ASM_POWERPC_SYNCH_H */ |