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
20extern int __min_ipl;
21#endif
22
23#define getipl()		(rdps() & 7)
24#define setipl(ipl)		((void) swpipl(ipl))
25
26static inline unsigned long arch_local_save_flags(void)
27{
28	return rdps();
29}
30
31static inline void arch_local_irq_disable(void)
32{
33	setipl(IPL_MAX);
34	barrier();
35}
36
37static inline unsigned long arch_local_irq_save(void)
38{
39	unsigned long flags = swpipl(IPL_MAX);
40	barrier();
41	return flags;
42}
43
44static inline void arch_local_irq_enable(void)
45{
46	barrier();
47	setipl(IPL_MIN);
48}
49
50static inline void arch_local_irq_restore(unsigned long flags)
51{
52	barrier();
53	setipl(flags);
54	barrier();
55}
56
57static inline bool arch_irqs_disabled_flags(unsigned long flags)
58{
59	return flags == IPL_MAX;
60}
61
62static inline bool arch_irqs_disabled(void)
63{
64	return arch_irqs_disabled_flags(getipl());
65}
66
67#endif /* __ALPHA_IRQFLAGS_H */
68