Merge pull request #190 from tlauda/topic/interrupt_get_level
interrupt: arch_interrupt_get_level
diff --git a/src/arch/host/include/arch/interrupt.h b/src/arch/host/include/arch/interrupt.h
index a3aea5a..15632aa 100644
--- a/src/arch/host/include/arch/interrupt.h
+++ b/src/arch/host/include/arch/interrupt.h
@@ -45,6 +45,7 @@
static inline void arch_interrupt_unregister(int irq) {}
static inline uint32_t arch_interrupt_enable_mask(uint32_t mask) {return 0; }
static inline uint32_t arch_interrupt_disable_mask(uint32_t mask) {return 0; }
+static inline uint32_t arch_interrupt_get_level(void) { return 0; }
static inline void arch_interrupt_set(int irq) {}
static inline void arch_interrupt_clear(int irq) {}
static inline uint32_t arch_interrupt_get_enabled(void) {return 0; }
diff --git a/src/arch/xtensa/include/arch/interrupt.h b/src/arch/xtensa/include/arch/interrupt.h
index 17ba85a..d2f7360 100644
--- a/src/arch/xtensa/include/arch/interrupt.h
+++ b/src/arch/xtensa/include/arch/interrupt.h
@@ -61,6 +61,18 @@
#define arch_interrupt_disable_mask(mask) \
_xtos_ints_off(mask)
+static inline uint32_t arch_interrupt_get_level(void)
+{
+ uint32_t level;
+
+ __asm__ __volatile__(
+ " rsr.ps %0\n"
+ " extui %0, %0, 0, 4\n"
+ : "=&a" (level) :: "memory");
+
+ return level;
+}
+
static inline void arch_interrupt_set(int irq)
{
irq = SOF_IRQ_NUMBER(irq);