Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[deliverable/linux.git] / arch / s390 / include / asm / irqflags.h
1 /*
2 * Copyright IBM Corp. 2006, 2010
3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
4 */
5
6 #ifndef __ASM_IRQFLAGS_H
7 #define __ASM_IRQFLAGS_H
8
9 #include <linux/types.h>
10
11 #define ARCH_IRQ_ENABLED (3UL << (BITS_PER_LONG - 8))
12
13 /* store then OR system mask. */
14 #define __arch_local_irq_stosm(__or) \
15 ({ \
16 unsigned long __mask; \
17 asm volatile( \
18 " stosm %0,%1" \
19 : "=Q" (__mask) : "i" (__or) : "memory"); \
20 __mask; \
21 })
22
23 /* store then AND system mask. */
24 #define __arch_local_irq_stnsm(__and) \
25 ({ \
26 unsigned long __mask; \
27 asm volatile( \
28 " stnsm %0,%1" \
29 : "=Q" (__mask) : "i" (__and) : "memory"); \
30 __mask; \
31 })
32
33 /* set system mask. */
34 static inline notrace void __arch_local_irq_ssm(unsigned long flags)
35 {
36 asm volatile("ssm %0" : : "Q" (flags) : "memory");
37 }
38
39 static inline notrace unsigned long arch_local_save_flags(void)
40 {
41 return __arch_local_irq_stnsm(0xff);
42 }
43
44 static inline notrace unsigned long arch_local_irq_save(void)
45 {
46 return __arch_local_irq_stnsm(0xfc);
47 }
48
49 static inline notrace void arch_local_irq_disable(void)
50 {
51 arch_local_irq_save();
52 }
53
54 static inline notrace void arch_local_irq_enable(void)
55 {
56 __arch_local_irq_stosm(0x03);
57 }
58
59 /* This only restores external and I/O interrupt state */
60 static inline notrace void arch_local_irq_restore(unsigned long flags)
61 {
62 /* only disabled->disabled and disabled->enabled is valid */
63 if (flags & ARCH_IRQ_ENABLED)
64 arch_local_irq_enable();
65 }
66
67 static inline notrace bool arch_irqs_disabled_flags(unsigned long flags)
68 {
69 return !(flags & ARCH_IRQ_ENABLED);
70 }
71
72 static inline notrace bool arch_irqs_disabled(void)
73 {
74 return arch_irqs_disabled_flags(arch_local_save_flags());
75 }
76
77 #endif /* __ASM_IRQFLAGS_H */
This page took 0.0322 seconds and 5 git commands to generate.