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