Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
[pandora-kernel.git] / include / asm-s390 / irqflags.h
1 /*
2  *  include/asm-s390/irqflags.h
3  *
4  *    Copyright (C) IBM Corp. 2006
5  *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
6  */
7
8 #ifndef __ASM_IRQFLAGS_H
9 #define __ASM_IRQFLAGS_H
10
11 #ifdef __KERNEL__
12
13 /* interrupt control.. */
14 #define raw_local_irq_enable() ({ \
15         unsigned long  __dummy; \
16         __asm__ __volatile__ ( \
17                 "stosm 0(%1),0x03" \
18                 : "=m" (__dummy) : "a" (&__dummy) : "memory" ); \
19         })
20
21 #define raw_local_irq_disable() ({ \
22         unsigned long __flags; \
23         __asm__ __volatile__ ( \
24                 "stnsm 0(%1),0xfc" : "=m" (__flags) : "a" (&__flags) ); \
25         __flags; \
26         })
27
28 #define raw_local_save_flags(x) \
29         __asm__ __volatile__("stosm 0(%1),0" : "=m" (x) : "a" (&x), "m" (x) )
30
31 #define raw_local_irq_restore(x) \
32         __asm__ __volatile__("ssm   0(%0)" : : "a" (&x), "m" (x) : "memory")
33
34 #define raw_irqs_disabled()             \
35 ({                                      \
36         unsigned long flags;            \
37         local_save_flags(flags);        \
38         !((flags >> __FLAG_SHIFT) & 3); \
39 })
40
41 static inline int raw_irqs_disabled_flags(unsigned long flags)
42 {
43         return !((flags >> __FLAG_SHIFT) & 3);
44 }
45
46 /* For spinlocks etc */
47 #define raw_local_irq_save(x)   ((x) = raw_local_irq_disable())
48
49 #endif /* __KERNEL__ */
50 #endif /* __ASM_IRQFLAGS_H */