summaryrefslogtreecommitdiff
path: root/firmware/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r--firmware/kernel.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c
index 6da8a1b057..2b4b09f52b 100644
--- a/firmware/kernel.c
+++ b/firmware/kernel.c
@@ -102,6 +102,25 @@ void queue_wait(struct event_queue *q, struct event *ev)
102 *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK]; 102 *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK];
103} 103}
104 104
105void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks)
106{
107 unsigned int timeout = current_tick + ticks;
108
109 while(q->read == q->write && TIME_BEFORE( current_tick, timeout ))
110 {
111 switch_thread();
112 }
113
114 if(q->read != q->write)
115 {
116 *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK];
117 }
118 else
119 {
120 ev->id = SYS_TIMEOUT;
121 }
122}
123
105void queue_post(struct event_queue *q, int id, void *data) 124void queue_post(struct event_queue *q, int id, void *data)
106{ 125{
107 int wr; 126 int wr;