Lines Matching refs:queue

121 static inline char* IRAM_ATTR wrap_ptr(hli_queue_handle_t queue, char *ptr)  in wrap_ptr()  argument
123 return (ptr == queue->bufend) ? queue->buf : ptr; in wrap_ptr()
126 static inline bool IRAM_ATTR queue_empty(hli_queue_handle_t queue) in queue_empty() argument
128 return queue->begin == queue->end; in queue_empty()
131 static inline bool IRAM_ATTR queue_full(hli_queue_handle_t queue) in queue_full() argument
133 return wrap_ptr(queue, queue->end + queue->elem_size) == queue->begin; in queue_full()
140 hli_queue_handle_t queue; in queue_isr_handler() local
142 while (hli_queue_get(s_meta_queue_ptr, &queue)) { in queue_isr_handler()
144 while (hli_queue_get(queue, scratch)) { in queue_isr_handler()
146 if ((queue->flags & HLI_QUEUE_FLAG_CUSTOMER) != 0) { in queue_isr_handler()
148 } else if ((queue->flags & HLI_QUEUE_FLAG_SEMAPHORE) != 0) { in queue_isr_handler()
149 res = xSemaphoreGiveFromISR((SemaphoreHandle_t) queue->downstream, &do_yield); in queue_isr_handler()
151 res = xQueueSendFromISR(queue->downstream, scratch, &do_yield); in queue_isr_handler()
168 static void IRAM_ATTR queue_signal(hli_queue_handle_t queue) in queue_signal() argument
175 if (*item == queue) { in queue_signal()
181 bool res = hli_queue_put(s_meta_queue_ptr, &queue); in queue_signal()
190 static void queue_init(hli_queue_handle_t queue, size_t buf_size, size_t elem_size, QueueHandle_t d… in queue_init() argument
192 queue->elem_size = elem_size; in queue_init()
193 queue->begin = queue->buf; in queue_init()
194 queue->end = queue->buf; in queue_init()
195 queue->bufend = queue->buf + buf_size; in queue_init()
196 queue->downstream = downstream; in queue_init()
197 queue->flags = 0; in queue_init()
256 void hli_queue_delete(hli_queue_handle_t queue) in hli_queue_delete() argument
258 free(queue); in hli_queue_delete()
261 bool IRAM_ATTR hli_queue_get(hli_queue_handle_t queue, void* out) in hli_queue_get() argument
265 if (!queue_empty(queue)) { in hli_queue_get()
266 memcpy(out, queue->begin, queue->elem_size); in hli_queue_get()
267 queue->begin = wrap_ptr(queue, queue->begin + queue->elem_size); in hli_queue_get()
274 bool IRAM_ATTR hli_queue_put(hli_queue_handle_t queue, const void* data) in hli_queue_put() argument
278 bool was_empty = queue_empty(queue); in hli_queue_put()
279 if (!queue_full(queue)) { in hli_queue_put()
280 memcpy(queue->end, data, queue->elem_size); in hli_queue_put()
281 queue->end = wrap_ptr(queue, queue->end + queue->elem_size); in hli_queue_put()
282 if (was_empty && queue != s_meta_queue_ptr) { in hli_queue_put()
283 queue_signal(queue); in hli_queue_put()
291 bool IRAM_ATTR hli_semaphore_give(hli_queue_handle_t queue) in hli_semaphore_give() argument
294 return hli_queue_put(queue, &data); in hli_semaphore_give()