1 #ifndef __ASM_GENERIC_IRQFLAGS_H
2 #define __ASM_GENERIC_IRQFLAGS_H
3 
4 /*
5  * All architectures should implement at least the first two functions,
6  * usually inline assembly will be the best way.
7  */
8 #ifndef ARCH_IRQ_DISABLED
9 #define ARCH_IRQ_DISABLED 0
10 #define ARCH_IRQ_ENABLED 1
11 #endif
12 
13 /* read interrupt enabled status */
14 #ifndef arch_local_save_flags
15 unsigned long arch_local_save_flags(void);
16 #endif
17 
18 /* set interrupt enabled status */
19 #ifndef arch_local_irq_restore
20 void arch_local_irq_restore(unsigned long flags);
21 #endif
22 
23 /* get status and disable interrupts */
24 #ifndef arch_local_irq_save
arch_local_irq_save(void)25 static inline unsigned long arch_local_irq_save(void)
26 {
27 	unsigned long flags;
28 	flags = arch_local_save_flags();
29 	arch_local_irq_restore(ARCH_IRQ_DISABLED);
30 	return flags;
31 }
32 #endif
33 
34 /* test flags */
35 #ifndef arch_irqs_disabled_flags
arch_irqs_disabled_flags(unsigned long flags)36 static inline int arch_irqs_disabled_flags(unsigned long flags)
37 {
38 	return flags == ARCH_IRQ_DISABLED;
39 }
40 #endif
41 
42 /* unconditionally enable interrupts */
43 #ifndef arch_local_irq_enable
arch_local_irq_enable(void)44 static inline void arch_local_irq_enable(void)
45 {
46 	arch_local_irq_restore(ARCH_IRQ_ENABLED);
47 }
48 #endif
49 
50 /* unconditionally disable interrupts */
51 #ifndef arch_local_irq_disable
arch_local_irq_disable(void)52 static inline void arch_local_irq_disable(void)
53 {
54 	arch_local_irq_restore(ARCH_IRQ_DISABLED);
55 }
56 #endif
57 
58 /* test hardware interrupt enable bit */
59 #ifndef arch_irqs_disabled
arch_irqs_disabled(void)60 static inline int arch_irqs_disabled(void)
61 {
62 	return arch_irqs_disabled_flags(arch_local_save_flags());
63 }
64 #endif
65 
66 #endif /* __ASM_GENERIC_IRQFLAGS_H */
67