1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2df9ee292SDavid Howells #ifndef __ALPHA_IRQFLAGS_H 3df9ee292SDavid Howells #define __ALPHA_IRQFLAGS_H 4df9ee292SDavid Howells 5ec221208SDavid Howells #include <asm/pal.h> 6df9ee292SDavid Howells 7df9ee292SDavid Howells #define IPL_MIN 0 8df9ee292SDavid Howells #define IPL_SW0 1 9df9ee292SDavid Howells #define IPL_SW1 2 10df9ee292SDavid Howells #define IPL_DEV0 3 11df9ee292SDavid Howells #define IPL_DEV1 4 12df9ee292SDavid Howells #define IPL_TIMER 5 13df9ee292SDavid Howells #define IPL_PERF 6 14df9ee292SDavid Howells #define IPL_POWERFAIL 6 15df9ee292SDavid Howells #define IPL_MCHECK 7 16df9ee292SDavid Howells #define IPL_MAX 7 17df9ee292SDavid Howells 18df9ee292SDavid Howells #ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK 19df9ee292SDavid Howells #undef IPL_MIN 20df9ee292SDavid Howells #define IPL_MIN __min_ipl 21df9ee292SDavid Howells extern int __min_ipl; 22df9ee292SDavid Howells #endif 23df9ee292SDavid Howells 24df9ee292SDavid Howells #define getipl() (rdps() & 7) 25df9ee292SDavid Howells #define setipl(ipl) ((void) swpipl(ipl)) 26df9ee292SDavid Howells arch_local_save_flags(void)27df9ee292SDavid Howellsstatic inline unsigned long arch_local_save_flags(void) 28df9ee292SDavid Howells { 29df9ee292SDavid Howells return rdps(); 30df9ee292SDavid Howells } 31df9ee292SDavid Howells arch_local_irq_disable(void)32df9ee292SDavid Howellsstatic inline void arch_local_irq_disable(void) 33df9ee292SDavid Howells { 34df9ee292SDavid Howells setipl(IPL_MAX); 35df9ee292SDavid Howells barrier(); 36df9ee292SDavid Howells } 37df9ee292SDavid Howells arch_local_irq_save(void)38df9ee292SDavid Howellsstatic inline unsigned long arch_local_irq_save(void) 39df9ee292SDavid Howells { 40df9ee292SDavid Howells unsigned long flags = swpipl(IPL_MAX); 41df9ee292SDavid Howells barrier(); 42df9ee292SDavid Howells return flags; 43df9ee292SDavid Howells } 44df9ee292SDavid Howells arch_local_irq_enable(void)45df9ee292SDavid Howellsstatic inline void arch_local_irq_enable(void) 46df9ee292SDavid Howells { 47df9ee292SDavid Howells barrier(); 48df9ee292SDavid Howells setipl(IPL_MIN); 49df9ee292SDavid Howells } 50df9ee292SDavid Howells arch_local_irq_restore(unsigned long flags)51df9ee292SDavid Howellsstatic inline void arch_local_irq_restore(unsigned long flags) 52df9ee292SDavid Howells { 53df9ee292SDavid Howells barrier(); 54df9ee292SDavid Howells setipl(flags); 55df9ee292SDavid Howells barrier(); 56df9ee292SDavid Howells } 57df9ee292SDavid Howells arch_irqs_disabled_flags(unsigned long flags)58df9ee292SDavid Howellsstatic inline bool arch_irqs_disabled_flags(unsigned long flags) 59df9ee292SDavid Howells { 60df9ee292SDavid Howells return flags == IPL_MAX; 61df9ee292SDavid Howells } 62df9ee292SDavid Howells arch_irqs_disabled(void)63df9ee292SDavid Howellsstatic inline bool arch_irqs_disabled(void) 64df9ee292SDavid Howells { 65df9ee292SDavid Howells return arch_irqs_disabled_flags(getipl()); 66df9ee292SDavid Howells } 67df9ee292SDavid Howells 68df9ee292SDavid Howells #endif /* __ALPHA_IRQFLAGS_H */ 69