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 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 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 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 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 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