summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-09-16 16:18:11 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-09-16 16:18:11 +0000
commita85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f (patch)
treea30695ed540bf32365d577f46398f712c7a494c4 /firmware/drivers
parentbaf5494341cdd6cdb9590e21d429920b9bc4a2c6 (diff)
downloadrockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.zip
rockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.tar.gz
rockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.tar.bz2
rockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.tar.xz
New scheduler, with priorities for swcodec platforms. Frequent task
switching should be more efficient and tasks are stored in linked lists to eliminate unnecessary task switching to improve performance. Audio should no longer skip on swcodec targets caused by too CPU hungry UI thread or background threads. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10958 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/ata.c5
-rw-r--r--firmware/drivers/ata_mmc.c4
-rw-r--r--firmware/drivers/button.c2
-rw-r--r--firmware/drivers/fmradio_i2c.c6
-rw-r--r--firmware/drivers/i2c.c6
-rw-r--r--firmware/drivers/lcd-16bit.c2
-rw-r--r--firmware/drivers/lcd-2bit-horz.c2
-rw-r--r--firmware/drivers/lcd-h100-remote.c7
-rw-r--r--firmware/drivers/lcd-h100.c4
-rw-r--r--firmware/drivers/lcd-player.c2
-rw-r--r--firmware/drivers/lcd-recorder.c4
-rwxr-xr-xfirmware/drivers/lcd-remote-2bit-vi.c7
12 files changed, 25 insertions, 26 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 8593eeb..f570885 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -1932,11 +1932,12 @@ int ata_init(void)
if (rc)
return -60 + rc;
- queue_init(&ata_queue);
+ queue_init(&ata_queue, true);
last_disk_activity = current_tick;
create_thread(ata_thread, ata_stack,
- sizeof(ata_stack), ata_thread_name);
+ sizeof(ata_stack), ata_thread_name
+ IF_PRIO(, PRIORITY_SYSTEM));
initialized = true;
}
diff --git a/firmware/drivers/ata_mmc.c b/firmware/drivers/ata_mmc.c
index b2e79c4..6303ca2 100644
--- a/firmware/drivers/ata_mmc.c
+++ b/firmware/drivers/ata_mmc.c
@@ -1182,9 +1182,9 @@ int ata_init(void)
if (!last_mmc_status)
mmc_status = MMC_UNTOUCHED;
#ifdef HAVE_HOTSWAP
- queue_init(&mmc_queue);
+ queue_init(&mmc_queue, true);
create_thread(mmc_thread, mmc_stack,
- sizeof(mmc_stack), mmc_thread_name);
+ sizeof(mmc_stack), mmc_thread_name IF_PRIO(, PRIORITY_SYSTEM));
#endif
tick_add_task(mmc_tick);
initialized = true;
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index daad4f1..6536a34 100644
--- a/firmware/drivers/button.c
+++ b/firmware/drivers/button.c
@@ -674,7 +674,7 @@ void button_init(void)
GPIOA_INT_CLR = GPIOA_INT_STAT;
GPIOA_INT_EN = 0xff;
#endif /* CONFIG_KEYPAD */
- queue_init(&button_queue);
+ queue_init(&button_queue, true);
button_read();
lastbtn = button_read();
tick_add_task(button_tick);
diff --git a/firmware/drivers/fmradio_i2c.c b/firmware/drivers/fmradio_i2c.c
index 6f87e15..62761b3 100644
--- a/firmware/drivers/fmradio_i2c.c
+++ b/firmware/drivers/fmradio_i2c.c
@@ -317,8 +317,7 @@ static void fmradio_i2c_ack(int bit)
SCL_INPUT; /* Set the clock to input */
while(!SCL) /* and wait for the slave to release it */
- sleep_thread();
- wake_up_thread();
+ sleep_thread(0);
DELAY;
SCL_OUTPUT;
@@ -337,8 +336,7 @@ static int fmradio_i2c_getack(void)
SDA_INPUT; /* And set to input */
SCL_INPUT; /* Set the clock to input */
while(!SCL) /* and wait for the slave to release it */
- sleep_thread();
- wake_up_thread();
+ sleep_thread(0);
if (SDA)
/* ack failed */
diff --git a/firmware/drivers/i2c.c b/firmware/drivers/i2c.c
index 71cb9cf..2b439c2 100644
--- a/firmware/drivers/i2c.c
+++ b/firmware/drivers/i2c.c
@@ -145,8 +145,7 @@ void i2c_ack(int bit)
SCL_INPUT; /* Set the clock to input */
while(!SCL) /* and wait for the MAS to release it */
- sleep_thread();
- wake_up_thread();
+ sleep_thread(1);
DELAY;
SCL_OUTPUT;
@@ -168,8 +167,7 @@ int i2c_getack(void)
SDA_INPUT; /* And set to input */
SCL_INPUT; /* Set the clock to input */
while(!SCL) /* and wait for the MAS to release it */
- sleep_thread();
- wake_up_thread();
+ sleep_thread(1);
if (SDA)
/* ack failed */
diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c
index e6ae28b..47c02ea 100644
--- a/firmware/drivers/lcd-16bit.c
+++ b/firmware/drivers/lcd-16bit.c
@@ -79,7 +79,7 @@ void lcd_init(void)
/* Call device specific init */
lcd_init_device();
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name, PRIORITY_SYSTEM);
}
/*** parameter handling ***/
diff --git a/firmware/drivers/lcd-2bit-horz.c b/firmware/drivers/lcd-2bit-horz.c
index 33f483d..dc49a37 100644
--- a/firmware/drivers/lcd-2bit-horz.c
+++ b/firmware/drivers/lcd-2bit-horz.c
@@ -76,7 +76,7 @@ void lcd_init(void)
/* Call device specific init */
lcd_init_device();
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
/*** parameter handling ***/
diff --git a/firmware/drivers/lcd-h100-remote.c b/firmware/drivers/lcd-h100-remote.c
index ed5816c..5db6d54 100644
--- a/firmware/drivers/lcd-h100-remote.c
+++ b/firmware/drivers/lcd-h100-remote.c
@@ -573,7 +573,7 @@ static void remote_tick(void)
void lcd_remote_init(void)
{
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
#else /* !SIMULATOR */
@@ -601,10 +601,11 @@ void lcd_remote_init(void)
#endif
lcd_remote_clear_display();
- queue_clear(&remote_scroll_queue); /* no queue_init() -- private queue */
+ /* private queue */
+ queue_init(&remote_scroll_queue, false);
tick_add_task(remote_tick);
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
/*** update functions ***/
diff --git a/firmware/drivers/lcd-h100.c b/firmware/drivers/lcd-h100.c
index 8407876..ada6f29 100644
--- a/firmware/drivers/lcd-h100.c
+++ b/firmware/drivers/lcd-h100.c
@@ -144,7 +144,7 @@ void lcd_set_flip(bool yesno)
void lcd_init(void)
{
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
#else
@@ -193,7 +193,7 @@ void lcd_init(void)
lcd_write_command(LCD_CNTL_ON_OFF | 1); /* LCD ON */
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
/*** update functions ***/
diff --git a/firmware/drivers/lcd-player.c b/firmware/drivers/lcd-player.c
index 1601247..050258d 100644
--- a/firmware/drivers/lcd-player.c
+++ b/firmware/drivers/lcd-player.c
@@ -610,7 +610,7 @@ void lcd_init (void)
lcd_set_contrast(lcd_default_contrast());
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
void lcd_jump_scroll (int mode) /* 0=off, 1=once, ..., JUMP_SCROLL_ALWAYS */
diff --git a/firmware/drivers/lcd-recorder.c b/firmware/drivers/lcd-recorder.c
index 1987d9a..e74cad7 100644
--- a/firmware/drivers/lcd-recorder.c
+++ b/firmware/drivers/lcd-recorder.c
@@ -232,7 +232,7 @@ void lcd_set_flip(bool yesno)
void lcd_init(void)
{
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
#else
@@ -278,7 +278,7 @@ void lcd_init(void)
lcd_update();
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
/*** Update functions ***/
diff --git a/firmware/drivers/lcd-remote-2bit-vi.c b/firmware/drivers/lcd-remote-2bit-vi.c
index 48f8b8a..bae2824 100755
--- a/firmware/drivers/lcd-remote-2bit-vi.c
+++ b/firmware/drivers/lcd-remote-2bit-vi.c
@@ -1167,7 +1167,7 @@ static void scroll_thread(void)
void lcd_remote_init(void)
{
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
#else
void lcd_remote_init(void)
@@ -1176,9 +1176,10 @@ void lcd_remote_init(void)
lcd_remote_init_device();
lcd_remote_clear_display();
- queue_clear(&remote_scroll_queue); /* no queue_init() -- private queue */
+ /* private queue */
+ queue_init(&remote_scroll_queue, false);
tick_add_task(remote_tick);
create_thread(scroll_thread, scroll_stack,
- sizeof(scroll_stack), scroll_name);
+ sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM));
}
#endif