summaryrefslogtreecommitdiff
path: root/firmware/kernel.c
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-05-16 20:57:32 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-05-16 20:57:32 +0000
commit7361340ab5eaaac90b2c8820061b540f68e5ab7d (patch)
tree87798f413f0402584b8be2b036f72ef8be547662 /firmware/kernel.c
parenta39f566a7f5959d8a85663f0ceccfd468e67af50 (diff)
downloadrockbox-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.c27
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--;
+}