diff options
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r-- | firmware/kernel.c | 21 |
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 | */ | ||
383 | int 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 | |||
377 | int queue_broadcast(long id, intptr_t data) | 398 | int queue_broadcast(long id, intptr_t data) |
378 | { | 399 | { |
379 | int i; | 400 | int i; |