forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.2 KiB
68 lines
1.2 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef __ALPHA_IRQFLAGS_H |
|
#define __ALPHA_IRQFLAGS_H |
|
|
|
#include <asm/pal.h> |
|
|
|
#define IPL_MIN 0 |
|
#define IPL_SW0 1 |
|
#define IPL_SW1 2 |
|
#define IPL_DEV0 3 |
|
#define IPL_DEV1 4 |
|
#define IPL_TIMER 5 |
|
#define IPL_PERF 6 |
|
#define IPL_POWERFAIL 6 |
|
#define IPL_MCHECK 7 |
|
#define IPL_MAX 7 |
|
|
|
#ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK |
|
#undef IPL_MIN |
|
#define IPL_MIN __min_ipl |
|
extern int __min_ipl; |
|
#endif |
|
|
|
#define getipl() (rdps() & 7) |
|
#define setipl(ipl) ((void) swpipl(ipl)) |
|
|
|
static inline unsigned long arch_local_save_flags(void) |
|
{ |
|
return rdps(); |
|
} |
|
|
|
static inline void arch_local_irq_disable(void) |
|
{ |
|
setipl(IPL_MAX); |
|
barrier(); |
|
} |
|
|
|
static inline unsigned long arch_local_irq_save(void) |
|
{ |
|
unsigned long flags = swpipl(IPL_MAX); |
|
barrier(); |
|
return flags; |
|
} |
|
|
|
static inline void arch_local_irq_enable(void) |
|
{ |
|
barrier(); |
|
setipl(IPL_MIN); |
|
} |
|
|
|
static inline void arch_local_irq_restore(unsigned long flags) |
|
{ |
|
barrier(); |
|
setipl(flags); |
|
barrier(); |
|
} |
|
|
|
static inline bool arch_irqs_disabled_flags(unsigned long flags) |
|
{ |
|
return flags == IPL_MAX; |
|
} |
|
|
|
static inline bool arch_irqs_disabled(void) |
|
{ |
|
return arch_irqs_disabled_flags(getipl()); |
|
} |
|
|
|
#endif /* __ALPHA_IRQFLAGS_H */
|
|
|