| #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 ARCH_IRQ_DISABLED |
| #define ARCH_IRQ_DISABLED 0 |
| #define ARCH_IRQ_ENABLED 1 |
| #endif |
| |
| /* read interrupt enabled status */ |
| #ifndef arch_local_save_flags |
| unsigned long arch_local_save_flags(void); |
| #endif |
| |
| /* set interrupt enabled status */ |
| #ifndef arch_local_irq_restore |
| void arch_local_irq_restore(unsigned long flags); |
| #endif |
| |
| /* get status and disable interrupts */ |
| #ifndef arch_local_irq_save |
| static inline unsigned long arch_local_irq_save(void) |
| { |
| unsigned long flags; |
| flags = arch_local_save_flags(); |
| arch_local_irq_restore(ARCH_IRQ_DISABLED); |
| return flags; |
| } |
| #endif |
| |
| /* test flags */ |
| #ifndef arch_irqs_disabled_flags |
| static inline int arch_irqs_disabled_flags(unsigned long flags) |
| { |
| return flags == ARCH_IRQ_DISABLED; |
| } |
| #endif |
| |
| /* unconditionally enable interrupts */ |
| #ifndef arch_local_irq_enable |
| static inline void arch_local_irq_enable(void) |
| { |
| arch_local_irq_restore(ARCH_IRQ_ENABLED); |
| } |
| #endif |
| |
| /* unconditionally disable interrupts */ |
| #ifndef arch_local_irq_disable |
| static inline void arch_local_irq_disable(void) |
| { |
| arch_local_irq_restore(ARCH_IRQ_DISABLED); |
| } |
| #endif |
| |
| /* test hardware interrupt enable bit */ |
| #ifndef arch_irqs_disabled |
| static inline int arch_irqs_disabled(void) |
| { |
| return arch_irqs_disabled_flags(arch_local_save_flags()); |
| } |
| #endif |
| |
| #endif /* __ASM_GENERIC_IRQFLAGS_H */ |