From c4d8d970f6602c80d7362a41da8851dbbf59ae1b Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Fri, 14 Feb 2003 09:44:34 +0000 Subject: The power-saving SLEEP patch by Simon Elén. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3259 a1c6a512-1295-4272-9138-f99709370657 --- firmware/kernel.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'firmware/kernel.c') diff --git a/firmware/kernel.c b/firmware/kernel.c index 4d2f519171..3255ba0b20 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c @@ -59,13 +59,15 @@ void sleep(int ticks) int timeout = current_tick + ticks + 1; while (TIME_BEFORE( current_tick, timeout )) { - yield(); + sleep_thread(); } + wake_up_thread(); } void yield(void) { switch_thread(); + wake_up_thread(); } /**************************************************************************** @@ -96,8 +98,9 @@ void queue_wait(struct event_queue *q, struct event *ev) { while(q->read == q->write) { - switch_thread(); + sleep_thread(); } + wake_up_thread(); *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK]; } @@ -108,8 +111,9 @@ void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks) while(q->read == q->write && TIME_BEFORE( current_tick, timeout )) { - switch_thread(); + sleep_thread(); } + wake_up_thread(); if(q->read != q->write) { @@ -201,6 +205,7 @@ void IMIA0(void) } current_tick++; + wake_up_thread(); TSR0 &= ~0x01; } @@ -257,7 +262,8 @@ void mutex_lock(struct mutex *m) { /* Wait until the lock is open... */ while(m->locked) - yield(); + sleep_thread(); + wake_up_thread(); /* ...and lock it */ m->locked = true; -- cgit v1.2.3