xref: /linux/arch/alpha/include/asm/irqflags.h (revision 95298d63c67673c654c08952672d016212b26054)
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