diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-04-29 14:25:44 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-04-29 14:25:44 +0000 |
commit | bd2561dcbb73cd967676f50fec98759405f5e901 (patch) | |
tree | 5b8439163a5c233c2bf0cd50fafeac578852f0b8 /firmware/kernel.c | |
parent | 40c1c2251aba6d1de690a4fa8db4f8b8d1c8d25f (diff) | |
download | rockbox-bd2561dcbb73cd967676f50fec98759405f5e901.tar.gz rockbox-bd2561dcbb73cd967676f50fec98759405f5e901.zip |
Added queue handling stuff - NOT INTERRUPT SAFE
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@315 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r-- | firmware/kernel.c | 27 |
1 files changed, 27 insertions, 0 deletions
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) | |||
35 | { | 35 | { |
36 | switch_thread(); | 36 | switch_thread(); |
37 | } | 37 | } |
38 | |||
39 | /**************************************************************************** | ||
40 | * Queue handling stuff | ||
41 | ****************************************************************************/ | ||
42 | void queue_init(struct event_queue *q) | ||
43 | { | ||
44 | q->read = 0; | ||
45 | q->write = 0; | ||
46 | } | ||
47 | |||
48 | struct event *queue_wait(struct event_queue *q) | ||
49 | { | ||
50 | while(q->read == q->write) | ||
51 | { | ||
52 | switch_thread(); | ||
53 | } | ||
54 | |||
55 | return &q->events[(q->read++) & QUEUE_LENGTH_MASK]; | ||
56 | } | ||
57 | |||
58 | void queue_post(struct event_queue *q, int id, void *data) | ||
59 | { | ||
60 | int wr = (q->write++) & QUEUE_LENGTH_MASK; | ||
61 | |||
62 | q->events[wr].id = id; | ||
63 | q->events[wr].data = data; | ||
64 | } | ||