From fae5fce8ffecdcb6a041435adb7254d720884de3 Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Wed, 16 Oct 2019 00:02:41 +0200 Subject: envent q added eos_evtq_wait --- code/fe310/eos/event.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'code/fe310/eos/event.c') diff --git a/code/fe310/eos/event.c b/code/fe310/eos/event.c index 9e3fb90..25a4feb 100644 --- a/code/fe310/eos/event.c +++ b/code/fe310/eos/event.c @@ -16,6 +16,8 @@ static eos_evt_fptr_t evt_handler[EOS_EVT_MAX_EVT]; static uint16_t evt_handler_wrapper_acq[EOS_EVT_MAX_EVT]; static uint16_t evt_handler_flags_buf_acq[EOS_EVT_MAX_EVT]; +static volatile char evt_busy = 0; + void eos_evtq_init(void) { int i; @@ -86,6 +88,23 @@ void eos_evtq_set_flags(unsigned char type, uint8_t flags) { if ((idx < EOS_EVT_MAX_EVT) && (flags & EOS_EVT_FLAG_NET_BUF_ACQ)) evt_handler_flags_buf_acq[idx] |= flag; } +void eos_evtq_set_busy(char busy) { + evt_busy = busy; +} + +void eos_evtq_wait(unsigned char type, unsigned char *selector, uint16_t sel_len, unsigned char **buffer, uint16_t *len) { + int rv = 0; + + while(!rv) { + clear_csr(mstatus, MSTATUS_MIE); + rv = eos_msgq_get(&_eos_event_q, type, selector, sel_len, buffer, len); + if (!rv) { + asm volatile ("wfi"); + } + set_csr(mstatus, MSTATUS_MIE); + } +} + void eos_evtq_loop(void) { unsigned char type; unsigned char *buffer; @@ -100,7 +119,7 @@ void eos_evtq_loop(void) { evtq_handler(type, buffer, len); clear_csr(mstatus, MSTATUS_MIE); } else { - // asm volatile ("wfi"); + if (!evt_busy) asm volatile ("wfi"); } set_csr(mstatus, MSTATUS_MIE); } -- cgit v1.2.3