diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-05-16 20:57:32 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-05-16 20:57:32 +0000 |
| commit | 7361340ab5eaaac90b2c8820061b540f68e5ab7d (patch) | |
| tree | 87798f413f0402584b8be2b036f72ef8be547662 /firmware/kernel.c | |
| parent | a39f566a7f5959d8a85663f0ceccfd468e67af50 (diff) | |
| download | rockbox-7361340ab5eaaac90b2c8820061b540f68e5ab7d.zip rockbox-7361340ab5eaaac90b2c8820061b540f68e5ab7d.tar.gz rockbox-7361340ab5eaaac90b2c8820061b540f68e5ab7d.tar.bz2 rockbox-7361340ab5eaaac90b2c8820061b540f68e5ab7d.tar.xz | |
Changed queue API. Added mutex functions
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@601 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/kernel.c')
| -rw-r--r-- | firmware/kernel.c | 27 |
1 files changed, 25 insertions, 2 deletions
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--; +} |