|  | #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 */ |