summaryrefslogtreecommitdiff
path: root/firmware/target/arm/system-arm.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/system-arm.h')
-rw-r--r--firmware/target/arm/system-arm.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/firmware/target/arm/system-arm.h b/firmware/target/arm/system-arm.h
index 7f10a30bdb..b3630a8473 100644
--- a/firmware/target/arm/system-arm.h
+++ b/firmware/target/arm/system-arm.h
@@ -62,6 +62,21 @@ void __div0(void);
62#define enable_fiq() \ 62#define enable_fiq() \
63 enable_interrupt(FIQ_STATUS) 63 enable_interrupt(FIQ_STATUS)
64 64
65#define irq_enabled() \
66 interrupt_enabled(IRQ_STATUS)
67#define fiq_enabled() \
68 interrupt_enabled(FIQ_STATUS)
69#define ints_enabled() \
70 interrupt_enabled(IRQ_FIQ_STATUS)
71
72#define irq_enabled_checkval(val) \
73 (((val) & IRQ_STATUS) == 0)
74#define fiq_enabled_checkval(val) \
75 (((val) & FIQ_STATUS) == 0)
76#define ints_enabled_checkval(val) \
77 (((val) & IRQ_FIQ_STATUS) == 0)
78
79
65/* Core-level interrupt masking */ 80/* Core-level interrupt masking */
66 81
67static inline int set_interrupt_status(int status, int mask) 82static inline int set_interrupt_status(int status, int mask)
@@ -87,6 +102,13 @@ static inline void restore_interrupt(int cpsr)
87 asm volatile ("msr cpsr_c, %0" : : "r"(cpsr)); 102 asm volatile ("msr cpsr_c, %0" : : "r"(cpsr));
88} 103}
89 104
105static inline bool interrupt_enabled(int status)
106{
107 unsigned long cpsr;
108 asm ("mrs %0, cpsr" : "=r"(cpsr));
109 return (cpsr & status) == 0;
110}
111
90/* ARM_ARCH version section for architecture*/ 112/* ARM_ARCH version section for architecture*/
91 113
92#if ARM_ARCH >= 6 114#if ARM_ARCH >= 6