]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
df9ee292 DH |
2 | #ifndef __ALPHA_IRQFLAGS_H |
3 | #define __ALPHA_IRQFLAGS_H | |
4 | ||
ec221208 | 5 | #include <asm/pal.h> |
df9ee292 DH |
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 */ |