2 * linux/include/asm-arm/proc-armv/system.h
4 * Copyright (C) 1996 Russell King
7 #ifndef __ASM_PROC_SYSTEM_H
8 #define __ASM_PROC_SYSTEM_H
10 extern __inline__
unsigned long __xchg(unsigned long x
, volatile void *ptr
, int size
)
12 extern void __bad_xchg(volatile void *, int);
15 case 1: __asm__
__volatile__ ("swpb %0, %1, [%2]" : "=r" (x
) : "r" (x
), "r" (ptr
) : "memory");
17 case 4: __asm__
__volatile__ ("swp %0, %1, [%2]" : "=r" (x
) : "r" (x
), "r" (ptr
) : "memory");
19 default: __bad_xchg(ptr
, size
);
25 __asm__ __volatile__( \
26 "mcr p15, 0, %0, c1, c0 @ set CR" \
29 extern unsigned long cr_no_alignment
; /* defined in entry-armv.S */
30 extern unsigned long cr_alignment
; /* defined in entry-armv.S */
33 * A couple of speedups for the ARM
37 * Save the current interrupt enable state & disable IRQs
39 #define __save_flags_cli(x) \
42 __asm__ __volatile__( \
43 "mrs %0, cpsr @ save_flags_cli\n" \
44 " orr %1, %0, #128\n" \
46 : "=r" (x), "=r" (temp) \
57 __asm__ __volatile__( \
58 "mrs %0, cpsr @ sti\n" \
59 " bic %0, %0, #128\n" \
72 __asm__ __volatile__( \
73 "mrs %0, cpsr @ cli\n" \
74 " orr %0, %0, #128\n" \
87 __asm__ __volatile__( \
88 "mrs %0, cpsr @ stf\n" \
89 " bic %0, %0, #64\n" \
101 unsigned long temp; \
102 __asm__ __volatile__( \
103 "mrs %0, cpsr @ clf\n" \
104 " orr %0, %0, #64\n" \
116 unsigned long temp; \
117 __asm__ __volatile__( \
118 "mrs %0, cpsr @ stf\n" \
119 " bic %0, %0, #64\n" \
131 unsigned long temp; \
132 __asm__ __volatile__( \
133 "mrs %0, cpsr @ clf\n" \
134 " orr %0, %0, #64\n" \
142 * save current IRQ & FIQ state
144 #define __save_flags(x) \
145 __asm__ __volatile__( \
146 "mrs %0, cpsr @ save_flags\n" \
152 * restore saved IRQ & FIQ state
154 #define __restore_flags(x) \
155 __asm__ __volatile__( \
156 "msr cpsr_c, %0 @ restore_flags\n" \