From 7361340ab5eaaac90b2c8820061b540f68e5ab7d Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Thu, 16 May 2002 20:57:32 +0000 Subject: Changed queue API. Added mutex functions git-svn-id: svn://svn.rockbox.org/rockbox/trunk@601 a1c6a512-1295-4272-9138-f99709370657 --- firmware/kernel.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'firmware/kernel.c') diff --git a/firmware/kernel.c b/firmware/kernel.c index 8474126..c6ac1fb 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c @@ -71,14 +71,14 @@ void queue_init(struct event_queue *q) q->write = 0; } -struct event *queue_wait(struct event_queue *q) +void queue_wait(struct event_queue *q, struct event *ev) { while(q->read == q->write) { switch_thread(); } - return &q->events[(q->read++) & QUEUE_LENGTH_MASK]; + *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK]; } void queue_post(struct event_queue *q, int id, void *data) @@ -190,3 +190,26 @@ int tick_remove_task(void (*f)(void)) set_irq_level(oldlevel); return -1; } + +/**************************************************************************** + * Simple mutex functions + ****************************************************************************/ +void mutex_init(struct mutex *m) +{ + m->count = 0; +} + +void mutex_lock(struct mutex *m) +{ + /* Wait until the lock is open... */ + while(m->count) + yield(); + + /* ...and lock it */ + m->count++; +} + +void mutex_unlock(struct mutex *m) +{ + m->count--; +} -- cgit v1.1