aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc/system.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-powerpc/system.h')
-rw-r--r--include/asm-powerpc/system.h31
1 files changed, 17 insertions, 14 deletions
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h
index d075725bf444..4b41deaa8d8d 100644
--- a/include/asm-powerpc/system.h
+++ b/include/asm-powerpc/system.h
@@ -39,7 +39,6 @@
39#define read_barrier_depends() do { } while(0) 39#define read_barrier_depends() do { } while(0)
40 40
41#define set_mb(var, value) do { var = value; mb(); } while (0) 41#define set_mb(var, value) do { var = value; mb(); } while (0)
42#define set_wmb(var, value) do { var = value; wmb(); } while (0)
43 42
44#ifdef __KERNEL__ 43#ifdef __KERNEL__
45#ifdef CONFIG_SMP 44#ifdef CONFIG_SMP
@@ -54,6 +53,15 @@
54#define smp_read_barrier_depends() do { } while(0) 53#define smp_read_barrier_depends() do { } while(0)
55#endif /* CONFIG_SMP */ 54#endif /* CONFIG_SMP */
56 55
56/*
57 * This is a barrier which prevents following instructions from being
58 * started until the value of the argument x is known. For example, if
59 * x is a variable loaded from memory, this prevents following
60 * instructions from being executed until the load has been performed.
61 */
62#define data_barrier(x) \
63 asm volatile("twi 0,%0,0; isync" : : "r" (x) : "memory");
64
57struct task_struct; 65struct task_struct;
58struct pt_regs; 66struct pt_regs;
59 67
@@ -169,11 +177,6 @@ extern u32 booke_wdt_enabled;
169extern u32 booke_wdt_period; 177extern u32 booke_wdt_period;
170#endif /* CONFIG_BOOKE_WDT */ 178#endif /* CONFIG_BOOKE_WDT */
171 179
172/* EBCDIC -> ASCII conversion for [0-9A-Z] on iSeries */
173extern unsigned char e2a(unsigned char);
174extern unsigned char* strne2a(unsigned char *dest,
175 const unsigned char *src, size_t n);
176
177struct device_node; 180struct device_node;
178extern void note_scsi_host(struct device_node *, void *); 181extern void note_scsi_host(struct device_node *, void *);
179 182
@@ -220,8 +223,8 @@ __xchg_u32(volatile void *p, unsigned long val)
220" stwcx. %3,0,%2 \n\ 223" stwcx. %3,0,%2 \n\
221 bne- 1b" 224 bne- 1b"
222 ISYNC_ON_SMP 225 ISYNC_ON_SMP
223 : "=&r" (prev), "=m" (*(volatile unsigned int *)p) 226 : "=&r" (prev), "+m" (*(volatile unsigned int *)p)
224 : "r" (p), "r" (val), "m" (*(volatile unsigned int *)p) 227 : "r" (p), "r" (val)
225 : "cc", "memory"); 228 : "cc", "memory");
226 229
227 return prev; 230 return prev;
@@ -240,8 +243,8 @@ __xchg_u64(volatile void *p, unsigned long val)
240" stdcx. %3,0,%2 \n\ 243" stdcx. %3,0,%2 \n\
241 bne- 1b" 244 bne- 1b"
242 ISYNC_ON_SMP 245 ISYNC_ON_SMP
243 : "=&r" (prev), "=m" (*(volatile unsigned long *)p) 246 : "=&r" (prev), "+m" (*(volatile unsigned long *)p)
244 : "r" (p), "r" (val), "m" (*(volatile unsigned long *)p) 247 : "r" (p), "r" (val)
245 : "cc", "memory"); 248 : "cc", "memory");
246 249
247 return prev; 250 return prev;
@@ -299,8 +302,8 @@ __cmpxchg_u32(volatile unsigned int *p, unsigned long old, unsigned long new)
299 ISYNC_ON_SMP 302 ISYNC_ON_SMP
300 "\n\ 303 "\n\
3012:" 3042:"
302 : "=&r" (prev), "=m" (*p) 305 : "=&r" (prev), "+m" (*p)
303 : "r" (p), "r" (old), "r" (new), "m" (*p) 306 : "r" (p), "r" (old), "r" (new)
304 : "cc", "memory"); 307 : "cc", "memory");
305 308
306 return prev; 309 return prev;
@@ -322,8 +325,8 @@ __cmpxchg_u64(volatile unsigned long *p, unsigned long old, unsigned long new)
322 ISYNC_ON_SMP 325 ISYNC_ON_SMP
323 "\n\ 326 "\n\
3242:" 3272:"
325 : "=&r" (prev), "=m" (*p) 328 : "=&r" (prev), "+m" (*p)
326 : "r" (p), "r" (old), "r" (new), "m" (*p) 329 : "r" (p), "r" (old), "r" (new)
327 : "cc", "memory"); 330 : "cc", "memory");
328 331
329 return prev; 332 return prev;