irqflags.h (1543B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __ASM_GENERIC_IRQFLAGS_H 3#define __ASM_GENERIC_IRQFLAGS_H 4 5/* 6 * All architectures should implement at least the first two functions, 7 * usually inline assembly will be the best way. 8 */ 9#ifndef ARCH_IRQ_DISABLED 10#define ARCH_IRQ_DISABLED 0 11#define ARCH_IRQ_ENABLED 1 12#endif 13 14/* read interrupt enabled status */ 15#ifndef arch_local_save_flags 16unsigned long arch_local_save_flags(void); 17#endif 18 19/* set interrupt enabled status */ 20#ifndef arch_local_irq_restore 21void arch_local_irq_restore(unsigned long flags); 22#endif 23 24/* get status and disable interrupts */ 25#ifndef arch_local_irq_save 26static inline unsigned long arch_local_irq_save(void) 27{ 28 unsigned long flags; 29 flags = arch_local_save_flags(); 30 arch_local_irq_restore(ARCH_IRQ_DISABLED); 31 return flags; 32} 33#endif 34 35/* test flags */ 36#ifndef arch_irqs_disabled_flags 37static inline int arch_irqs_disabled_flags(unsigned long flags) 38{ 39 return flags == ARCH_IRQ_DISABLED; 40} 41#endif 42 43/* unconditionally enable interrupts */ 44#ifndef arch_local_irq_enable 45static inline void arch_local_irq_enable(void) 46{ 47 arch_local_irq_restore(ARCH_IRQ_ENABLED); 48} 49#endif 50 51/* unconditionally disable interrupts */ 52#ifndef arch_local_irq_disable 53static inline void arch_local_irq_disable(void) 54{ 55 arch_local_irq_restore(ARCH_IRQ_DISABLED); 56} 57#endif 58 59/* test hardware interrupt enable bit */ 60#ifndef arch_irqs_disabled 61static inline int arch_irqs_disabled(void) 62{ 63 return arch_irqs_disabled_flags(arch_local_save_flags()); 64} 65#endif 66 67#endif /* __ASM_GENERIC_IRQFLAGS_H */