Line data Source code
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 36903 : flags = arch_local_save_flags(); 30 36903 : 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 220 : 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 */