Commit | Line | Data |
---|---|---|
f5e706ad | 1 | /* |
a439fe51 | 2 | * include/asm/irqflags.h |
f5e706ad SR |
3 | * |
4 | * IRQ flags handling | |
5 | * | |
6 | * This file gets included from lowlevel asm headers too, to provide | |
7 | * wrapped versions of the local_irq_*() APIs, based on the | |
df9ee292 | 8 | * arch_local_irq_*() functions from the lowlevel headers. |
f5e706ad SR |
9 | */ |
10 | #ifndef _ASM_IRQFLAGS_H | |
11 | #define _ASM_IRQFLAGS_H | |
12 | ||
13 | #ifndef __ASSEMBLY__ | |
14 | ||
df9ee292 | 15 | #include <linux/types.h> |
f5e706ad | 16 | |
df9ee292 DH |
17 | extern void arch_local_irq_restore(unsigned long); |
18 | extern unsigned long arch_local_irq_save(void); | |
19 | extern void arch_local_irq_enable(void); | |
20 | ||
21 | static inline unsigned long arch_local_save_flags(void) | |
f5e706ad | 22 | { |
df9ee292 DH |
23 | unsigned long flags; |
24 | ||
25 | asm volatile("rd %%psr, %0" : "=r" (flags)); | |
26 | return flags; | |
27 | } | |
f5e706ad | 28 | |
df9ee292 DH |
29 | static inline void arch_local_irq_disable(void) |
30 | { | |
31 | arch_local_irq_save(); | |
f5e706ad SR |
32 | } |
33 | ||
df9ee292 DH |
34 | static inline bool arch_irqs_disabled_flags(unsigned long flags) |
35 | { | |
36 | return (flags & PSR_PIL) != 0; | |
37 | } | |
f5e706ad | 38 | |
df9ee292 | 39 | static inline bool arch_irqs_disabled(void) |
f5e706ad | 40 | { |
df9ee292 | 41 | return arch_irqs_disabled_flags(arch_local_save_flags()); |
f5e706ad SR |
42 | } |
43 | ||
44 | #endif /* (__ASSEMBLY__) */ | |
45 | ||
46 | #endif /* !(_ASM_IRQFLAGS_H) */ |