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 RAW_IRQ_DISABLED 9#define RAW_IRQ_DISABLED 0 10#define RAW_IRQ_ENABLED 1 11#endif 12 13/* read interrupt enabled status */ 14#ifndef __raw_local_save_flags 15unsigned long __raw_local_save_flags(void); 16#endif 17 18/* set interrupt enabled status */ 19#ifndef raw_local_irq_restore 20void raw_local_irq_restore(unsigned long flags); 21#endif 22 23/* get status and disable interrupts */ 24#ifndef __raw_local_irq_save 25static inline unsigned long __raw_local_irq_save(void) 26{ 27 unsigned long flags; 28 flags = __raw_local_save_flags(); 29 raw_local_irq_restore(RAW_IRQ_DISABLED); 30 return flags; 31} 32#endif 33 34/* test flags */ 35#ifndef raw_irqs_disabled_flags 36static inline int raw_irqs_disabled_flags(unsigned long flags) 37{ 38 return flags == RAW_IRQ_DISABLED; 39} 40#endif 41 42/* unconditionally enable interrupts */ 43#ifndef raw_local_irq_enable 44static inline void raw_local_irq_enable(void) 45{ 46 raw_local_irq_restore(RAW_IRQ_ENABLED); 47} 48#endif 49 50/* unconditionally disable interrupts */ 51#ifndef raw_local_irq_disable 52static inline void raw_local_irq_disable(void) 53{ 54 raw_local_irq_restore(RAW_IRQ_DISABLED); 55} 56#endif 57 58/* test hardware interrupt enable bit */ 59#ifndef raw_irqs_disabled 60static inline int raw_irqs_disabled(void) 61{ 62 return raw_irqs_disabled_flags(__raw_local_save_flags()); 63} 64#endif 65 66#define raw_local_save_flags(flags) \ 67 do { (flags) = __raw_local_save_flags(); } while (0) 68 69#define raw_local_irq_save(flags) \ 70 do { (flags) = __raw_local_irq_save(); } while (0) 71 72#endif /* __ASM_GENERIC_IRQFLAGS_H */ 73