1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* SPDX-License-Identifier: GPL-2.0 */
- #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 */
|