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 16 unsigned long arch_local_save_flags(void); 17 #endif 18 19 /* set interrupt enabled status */ 20 #ifndef arch_local_irq_restore 21 void arch_local_irq_restore(unsigned long flags); 22 #endif 23 24 /* get status and disable interrupts */ 25 #ifndef arch_local_irq_save 26 static 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 37 static 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 45 static 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 53 static 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 61 static 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 */ 68