diff options
Diffstat (limited to 'firmware/target/arm/system-arm.h')
-rw-r--r-- | firmware/target/arm/system-arm.h | 10 |
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 | ||
115 | static 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 |