1 #ifndef __ASM_ARM_SYSTEM_H
2 #define __ASM_ARM_SYSTEM_H
4 /* Generic ARM7TDMI (ARMv4T) synchronisation primitives, mostly
5 * taken from Linux kernel source, licensed under GPL */
7 #define local_irq_save(x) \
10 (void) (&temp == &x); \
11 __asm__ __volatile__( \
12 "mrs %0, cpsr @ local_irq_save\n" \
13 " orr %1, %0, #128\n" \
15 : "=r" (x), "=r" (temp) \
23 #define local_irq_enable() \
26 __asm__ __volatile__( \
27 "mrs %0, cpsr @ local_irq_enable\n" \
28 " bic %0, %0, #128\n" \
38 #define local_irq_disable() \
41 __asm__ __volatile__( \
42 "mrs %0, cpsr @ local_irq_disable\n" \
43 " orr %0, %0, #128\n" \
53 #define local_fiq_enable() \
56 __asm__ __volatile__( \
57 "mrs %0, cpsr @ stf\n" \
58 " bic %0, %0, #64\n" \
68 #define local_fiq_disable() \
71 __asm__ __volatile__( \
72 "mrs %0, cpsr @ clf\n" \
73 " orr %0, %0, #64\n" \
81 * Save the current interrupt enable state.
83 #define local_save_flags(x) \
85 __asm__ __volatile__( \
86 "mrs %0, cpsr @ local_save_flags" \
87 : "=r" (x) : : "memory", "cc"); \
91 * restore saved IRQ & FIQ state
93 #define local_irq_restore(x) \
94 __asm__ __volatile__( \
95 "msr cpsr_c, %0 @ local_irq_restore\n" \
100 #define irqs_disabled() \
102 unsigned long flags; \
103 local_save_flags(flags); \
104 (int)(flags & PSR_I_BIT); \
107 #define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t"