This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.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 do {                                                                            \
30         typecheck(unsigned long, x);                                            \
31         __asm__ __volatile__("stosm 0(%1),0" : "=m" (x) : "a" (&x), "m" (x) );  \
32 } while (0)
33
34 #define raw_local_irq_restore(x)                                                \
35 do {                                                                            \
36         typecheck(unsigned long, x);                                            \
37         __asm__ __volatile__("ssm   0(%0)" : : "a" (&x), "m" (x) : "memory");   \
38 } while (0)
39
40 #define raw_irqs_disabled()             \
41 ({                                      \
42         unsigned long flags;            \
43         raw_local_save_flags(flags);    \
44         !((flags >> __FLAG_SHIFT) & 3); \
45 })
46
47 static inline int raw_irqs_disabled_flags(unsigned long flags)
48 {
49         return !((flags >> __FLAG_SHIFT) & 3);
50 }
51
52 /* For spinlocks etc */
53 #define raw_local_irq_save(x)   ((x) = raw_local_irq_disable())
54
55 #endif /* __KERNEL__ */
56 #endif /* __ASM_IRQFLAGS_H */