#ifndef __ASM_GENERIC_IRQFLAGS_H #define __ASM_GENERIC_IRQFLAGS_H /* * All architectures should implement at least the first two functions, * usually inline assembly will be the best way. */ #ifndef RAW_IRQ_DISABLED #define RAW_IRQ_DISABLED 0 #define RAW_IRQ_ENABLED 1 #endif /* read interrupt enabled status */ #ifndef __raw_local_save_flags unsigned long __raw_local_save_flags(void); #endif /* set interrupt enabled status */ #ifndef raw_local_irq_restore void raw_local_irq_restore(unsigned long flags); #endif /* get status and disable interrupts */ #ifndef __raw_local_irq_save static inline unsigned long __raw_local_irq_save(void) { unsigned long flags; flags = __raw_local_save_flags(); raw_local_irq_restore(RAW_IRQ_DISABLED); return flags; } #endif /* test flags */ #ifndef raw_irqs_disabled_flags static inline int raw_irqs_disabled_flags(unsigned long flags) { return flags == RAW_IRQ_DISABLED; } #endif /* unconditionally enable interrupts */ #ifndef raw_local_irq_enable static inline void raw_local_irq_enable(void) { raw_local_irq_restore(RAW_IRQ_ENABLED); } #endif /* unconditionally disable interrupts */ #ifndef raw_local_irq_disable static inline void raw_local_irq_disable(void) { raw_local_irq_restore(RAW_IRQ_DISABLED); } #endif /* test hardware interrupt enable bit */ #ifndef raw_irqs_disabled static inline int raw_irqs_disabled(void) { return raw_irqs_disabled_flags(__raw_local_save_flags()); } #endif #define raw_local_save_flags(flags) \ do { (flags) = __raw_local_save_flags(); } while (0) #define raw_local_irq_save(flags) \ do { (flags) = __raw_local_irq_save(); } while (0) #endif /* __ASM_GENERIC_IRQFLAGS_H */