summaryrefslogtreecommitdiff
path: root/firmware/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r--firmware/kernel.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c
index db7249fdee..c304e455c2 100644
--- a/firmware/kernel.c
+++ b/firmware/kernel.c
@@ -374,6 +374,27 @@ void queue_remove_from_head(struct event_queue *q, long id)
374 set_irq_level(oldlevel); 374 set_irq_level(oldlevel);
375} 375}
376 376
377/**
378 * The number of events waiting in the queue.
379 *
380 * @param struct of event_queue
381 * @return number of events in the queue
382 */
383int queue_count(const struct event_queue *q)
384{
385 int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL);
386 int result = 0;
387
388 if (q->read <= q->write)
389 result = q->write - q->read;
390 else
391 result = QUEUE_LENGTH - (q->read - q->write);
392
393 set_irq_level(oldlevel);
394
395 return result;
396}
397
377int queue_broadcast(long id, intptr_t data) 398int queue_broadcast(long id, intptr_t data)
378{ 399{
379 int i; 400 int i;