summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/riscv-rv32i/task.c6
-rw-r--r--include/task.h5
2 files changed, 11 insertions, 0 deletions
diff --git a/core/riscv-rv32i/task.c b/core/riscv-rv32i/task.c
index cf734d4078..4bd2c44a03 100644
--- a/core/riscv-rv32i/task.c
+++ b/core/riscv-rv32i/task.c
@@ -204,6 +204,12 @@ inline int in_interrupt_context(void)
return in_interrupt;
}
+int in_soft_interrupt_context(void)
+{
+ /* group 16 is reserved for soft-irq */
+ return in_interrupt_context() && ec_int_group == 16;
+}
+
task_id_t __ram_code task_get_current(void)
{
#ifdef CONFIG_DEBUG_BRINGUP
diff --git a/include/task.h b/include/task.h
index c0ce1e6838..7d424b871c 100644
--- a/include/task.h
+++ b/include/task.h
@@ -81,6 +81,11 @@ void interrupt_enable(void);
int in_interrupt_context(void);
/**
+ * Return true if we are in software interrupt context.
+ */
+int in_soft_interrupt_context(void);
+
+/**
* Return current interrupt mask. Meaning is chip-specific and
* should not be examined; just pass it to set_int_mask() to
* restore a previous interrupt state after interrupt_disable().