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