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 15unsigned long arch_local_save_flags(void); 16#endif 17 18/* set interrupt enabled status */ 19#ifndef arch_local_irq_restore 20void arch_local_irq_restore(unsigned long flags); 21#endif 22 23/* get status and disable interrupts */ 24#ifndef arch_local_irq_save 25static 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 36static 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 44static 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 52static 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 60static 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