diff options
Diffstat (limited to 'hifi/xaf/hifi-dpf/core/xf-isr.c')
-rw-r--r-- | hifi/xaf/hifi-dpf/core/xf-isr.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/hifi/xaf/hifi-dpf/core/xf-isr.c b/hifi/xaf/hifi-dpf/core/xf-isr.c new file mode 100644 index 00000000..4e2add1e --- /dev/null +++ b/hifi/xaf/hifi-dpf/core/xf-isr.c @@ -0,0 +1,68 @@ +/******************************************************************************* +* Copyright (C) 2018 Cadence Design Systems, Inc. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to use this Software with Cadence processor cores only and +* not with any other processors and platforms, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +******************************************************************************/ + +/******************************************************************************* + * xf-isr.c + * + * DSP processing framework - code running from interrupt context + * + ******************************************************************************/ + +#define MODULE_TAG ISR + +/******************************************************************************* + * Includes + ******************************************************************************/ + +#include "xf.h" + +/******************************************************************************* + * API functions definitions + ******************************************************************************/ + +/* ...submit command message from interrupt context on local core */ +void xf_msg_schedule_isr(xf_message_t *m) +{ + u32 core = XF_MSG_DST_CORE(m->id); + xf_core_data_t *cd = XF_CORE_DATA(core); + + /* ...interrupt masking protocol is used for protecting local message queue */ + if (xf_msg_enqueue(&cd->queue, m)) + { + /* ...resume local scheduler if that is the first message */ + xf_ipi_resume(core); + } +} + +/* ...complete message from interrupt handler */ +void xf_msg_complete_isr(xf_message_t *m) +{ + u32 core = XF_MSG_DST_CORE(m->id); + xf_core_data_t *cd = XF_CORE_DATA(core); + + /* ...place message into response queue */ + if (xf_msg_enqueue(&cd->response, m)) + { + /* ...notify local scheduler if that is the first message */ + xf_ipi_resume(core); + } +} |