Linux Audio

Check our new training course

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