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);