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.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/firmware/target/arm/system-arm.h b/firmware/target/arm/system-arm.h
index b3630a8473..ffce77a176 100644
--- a/firmware/target/arm/system-arm.h
+++ b/firmware/target/arm/system-arm.h
@@ -76,6 +76,9 @@ void __div0(void);
76#define ints_enabled_checkval(val) \ 76#define ints_enabled_checkval(val) \
77 (((val) & IRQ_FIQ_STATUS) == 0) 77 (((val) & IRQ_FIQ_STATUS) == 0)
78 78
79/* We run in SYS mode */
80#define is_thread_context() \
81 (get_processor_mode() == 0x1f)
79 82
80/* Core-level interrupt masking */ 83/* Core-level interrupt masking */
81 84
@@ -109,6 +112,13 @@ static inline bool interrupt_enabled(int status)
109 return (cpsr & status) == 0; 112 return (cpsr & status) == 0;
110} 113}
111 114
115static inline unsigned long get_processor_mode(void)
116{
117 unsigned long cpsr;
118 asm ("mrs %0, cpsr" : "=r"(cpsr));
119 return cpsr & 0x1f;
120}
121
112/* ARM_ARCH version section for architecture*/ 122/* ARM_ARCH version section for architecture*/
113 123
114#if ARM_ARCH >= 6 124#if ARM_ARCH >= 6