xref: /openbmc/linux/arch/alpha/include/asm/irqflags.h (revision b2441318)
1b2441318SGreg 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 Howells static inline unsigned long arch_local_save_flags(void)
28df9ee292SDavid Howells {
29df9ee292SDavid Howells 	return rdps();
30df9ee292SDavid Howells }
31df9ee292SDavid Howells 
arch_local_irq_disable(void)32df9ee292SDavid Howells static 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 Howells static 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 Howells static 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 Howells static 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 Howells static 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 Howells static 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