From bd2561dcbb73cd967676f50fec98759405f5e901 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Mon, 29 Apr 2002 14:25:44 +0000 Subject: Added queue handling stuff - NOT INTERRUPT SAFE git-svn-id: svn://svn.rockbox.org/rockbox/trunk@315 a1c6a512-1295-4272-9138-f99709370657 --- firmware/kernel.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'firmware/kernel.c') diff --git a/firmware/kernel.c b/firmware/kernel.c index da3ddf5ca7..f408c77bae 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c @@ -35,3 +35,30 @@ void yield(void) { switch_thread(); } + +/**************************************************************************** + * Queue handling stuff + ****************************************************************************/ +void queue_init(struct event_queue *q) +{ + q->read = 0; + q->write = 0; +} + +struct event *queue_wait(struct event_queue *q) +{ + while(q->read == q->write) + { + switch_thread(); + } + + return &q->events[(q->read++) & QUEUE_LENGTH_MASK]; +} + +void queue_post(struct event_queue *q, int id, void *data) +{ + int wr = (q->write++) & QUEUE_LENGTH_MASK; + + q->events[wr].id = id; + q->events[wr].data = data; +} -- cgit v1.2.3