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