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