diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2006-09-16 16:18:11 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2006-09-16 16:18:11 +0000 |
commit | a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f (patch) | |
tree | a30695ed540bf32365d577f46398f712c7a494c4 /firmware/drivers | |
parent | baf5494341cdd6cdb9590e21d429920b9bc4a2c6 (diff) | |
download | rockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.tar.gz rockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.zip |
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.c | 5 | ||||
-rw-r--r-- | firmware/drivers/ata_mmc.c | 4 | ||||
-rw-r--r-- | firmware/drivers/button.c | 2 | ||||
-rw-r--r-- | firmware/drivers/fmradio_i2c.c | 6 | ||||
-rw-r--r-- | firmware/drivers/i2c.c | 6 | ||||
-rw-r--r-- | firmware/drivers/lcd-16bit.c | 2 | ||||
-rw-r--r-- | firmware/drivers/lcd-2bit-horz.c | 2 | ||||
-rw-r--r-- | firmware/drivers/lcd-h100-remote.c | 7 | ||||
-rw-r--r-- | firmware/drivers/lcd-h100.c | 4 | ||||
-rw-r--r-- | firmware/drivers/lcd-player.c | 2 | ||||
-rw-r--r-- | firmware/drivers/lcd-recorder.c | 4 | ||||
-rwxr-xr-x | firmware/drivers/lcd-remote-2bit-vi.c | 7 |
12 files changed, 25 insertions, 26 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index 8593eebea1..f57088504b 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c | |||
@@ -1932,11 +1932,12 @@ int ata_init(void) | |||
1932 | if (rc) | 1932 | if (rc) |
1933 | return -60 + rc; | 1933 | return -60 + rc; |
1934 | 1934 | ||
1935 | queue_init(&ata_queue); | 1935 | queue_init(&ata_queue, true); |
1936 | 1936 | ||
1937 | last_disk_activity = current_tick; | 1937 | last_disk_activity = current_tick; |
1938 | create_thread(ata_thread, ata_stack, | 1938 | create_thread(ata_thread, ata_stack, |
1939 | sizeof(ata_stack), ata_thread_name); | 1939 | sizeof(ata_stack), ata_thread_name |
1940 | IF_PRIO(, PRIORITY_SYSTEM)); | ||
1940 | initialized = true; | 1941 | initialized = true; |
1941 | 1942 | ||
1942 | } | 1943 | } |
diff --git a/firmware/drivers/ata_mmc.c b/firmware/drivers/ata_mmc.c index b2e79c419a..6303ca2851 100644 --- a/firmware/drivers/ata_mmc.c +++ b/firmware/drivers/ata_mmc.c | |||
@@ -1182,9 +1182,9 @@ int ata_init(void) | |||
1182 | if (!last_mmc_status) | 1182 | if (!last_mmc_status) |
1183 | mmc_status = MMC_UNTOUCHED; | 1183 | mmc_status = MMC_UNTOUCHED; |
1184 | #ifdef HAVE_HOTSWAP | 1184 | #ifdef HAVE_HOTSWAP |
1185 | queue_init(&mmc_queue); | 1185 | queue_init(&mmc_queue, true); |
1186 | create_thread(mmc_thread, mmc_stack, | 1186 | create_thread(mmc_thread, mmc_stack, |
1187 | sizeof(mmc_stack), mmc_thread_name); | 1187 | sizeof(mmc_stack), mmc_thread_name IF_PRIO(, PRIORITY_SYSTEM)); |
1188 | #endif | 1188 | #endif |
1189 | tick_add_task(mmc_tick); | 1189 | tick_add_task(mmc_tick); |
1190 | initialized = true; | 1190 | initialized = true; |
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index daad4f17de..6536a34037 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c | |||
@@ -674,7 +674,7 @@ void button_init(void) | |||
674 | GPIOA_INT_CLR = GPIOA_INT_STAT; | 674 | GPIOA_INT_CLR = GPIOA_INT_STAT; |
675 | GPIOA_INT_EN = 0xff; | 675 | GPIOA_INT_EN = 0xff; |
676 | #endif /* CONFIG_KEYPAD */ | 676 | #endif /* CONFIG_KEYPAD */ |
677 | queue_init(&button_queue); | 677 | queue_init(&button_queue, true); |
678 | button_read(); | 678 | button_read(); |
679 | lastbtn = button_read(); | 679 | lastbtn = button_read(); |
680 | tick_add_task(button_tick); | 680 | tick_add_task(button_tick); |
diff --git a/firmware/drivers/fmradio_i2c.c b/firmware/drivers/fmradio_i2c.c index 6f87e15b3e..62761b3aa7 100644 --- a/firmware/drivers/fmradio_i2c.c +++ b/firmware/drivers/fmradio_i2c.c | |||
@@ -317,8 +317,7 @@ static void fmradio_i2c_ack(int bit) | |||
317 | 317 | ||
318 | SCL_INPUT; /* Set the clock to input */ | 318 | SCL_INPUT; /* Set the clock to input */ |
319 | while(!SCL) /* and wait for the slave to release it */ | 319 | while(!SCL) /* and wait for the slave to release it */ |
320 | sleep_thread(); | 320 | sleep_thread(0); |
321 | wake_up_thread(); | ||
322 | 321 | ||
323 | DELAY; | 322 | DELAY; |
324 | SCL_OUTPUT; | 323 | SCL_OUTPUT; |
@@ -337,8 +336,7 @@ static int fmradio_i2c_getack(void) | |||
337 | SDA_INPUT; /* And set to input */ | 336 | SDA_INPUT; /* And set to input */ |
338 | SCL_INPUT; /* Set the clock to input */ | 337 | SCL_INPUT; /* Set the clock to input */ |
339 | while(!SCL) /* and wait for the slave to release it */ | 338 | while(!SCL) /* and wait for the slave to release it */ |
340 | sleep_thread(); | 339 | sleep_thread(0); |
341 | wake_up_thread(); | ||
342 | 340 | ||
343 | if (SDA) | 341 | if (SDA) |
344 | /* ack failed */ | 342 | /* ack failed */ |
diff --git a/firmware/drivers/i2c.c b/firmware/drivers/i2c.c index 71cb9cf8b0..2b439c23ad 100644 --- a/firmware/drivers/i2c.c +++ b/firmware/drivers/i2c.c | |||
@@ -145,8 +145,7 @@ void i2c_ack(int bit) | |||
145 | 145 | ||
146 | SCL_INPUT; /* Set the clock to input */ | 146 | SCL_INPUT; /* Set the clock to input */ |
147 | while(!SCL) /* and wait for the MAS to release it */ | 147 | while(!SCL) /* and wait for the MAS to release it */ |
148 | sleep_thread(); | 148 | sleep_thread(1); |
149 | wake_up_thread(); | ||
150 | 149 | ||
151 | DELAY; | 150 | DELAY; |
152 | SCL_OUTPUT; | 151 | SCL_OUTPUT; |
@@ -168,8 +167,7 @@ int i2c_getack(void) | |||
168 | SDA_INPUT; /* And set to input */ | 167 | SDA_INPUT; /* And set to input */ |
169 | SCL_INPUT; /* Set the clock to input */ | 168 | SCL_INPUT; /* Set the clock to input */ |
170 | while(!SCL) /* and wait for the MAS to release it */ | 169 | while(!SCL) /* and wait for the MAS to release it */ |
171 | sleep_thread(); | 170 | sleep_thread(1); |
172 | wake_up_thread(); | ||
173 | 171 | ||
174 | if (SDA) | 172 | if (SDA) |
175 | /* ack failed */ | 173 | /* ack failed */ |
diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c index e6ae28bc19..47c02ea7b7 100644 --- a/firmware/drivers/lcd-16bit.c +++ b/firmware/drivers/lcd-16bit.c | |||
@@ -79,7 +79,7 @@ void lcd_init(void) | |||
79 | /* Call device specific init */ | 79 | /* Call device specific init */ |
80 | lcd_init_device(); | 80 | lcd_init_device(); |
81 | create_thread(scroll_thread, scroll_stack, | 81 | create_thread(scroll_thread, scroll_stack, |
82 | sizeof(scroll_stack), scroll_name); | 82 | sizeof(scroll_stack), scroll_name, PRIORITY_SYSTEM); |
83 | } | 83 | } |
84 | 84 | ||
85 | /*** parameter handling ***/ | 85 | /*** parameter handling ***/ |
diff --git a/firmware/drivers/lcd-2bit-horz.c b/firmware/drivers/lcd-2bit-horz.c index 33f483d38d..dc49a37c8a 100644 --- a/firmware/drivers/lcd-2bit-horz.c +++ b/firmware/drivers/lcd-2bit-horz.c | |||
@@ -76,7 +76,7 @@ void lcd_init(void) | |||
76 | /* Call device specific init */ | 76 | /* Call device specific init */ |
77 | lcd_init_device(); | 77 | lcd_init_device(); |
78 | create_thread(scroll_thread, scroll_stack, | 78 | create_thread(scroll_thread, scroll_stack, |
79 | sizeof(scroll_stack), scroll_name); | 79 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
80 | } | 80 | } |
81 | 81 | ||
82 | /*** parameter handling ***/ | 82 | /*** parameter handling ***/ |
diff --git a/firmware/drivers/lcd-h100-remote.c b/firmware/drivers/lcd-h100-remote.c index ed5816cebf..5db6d548ff 100644 --- a/firmware/drivers/lcd-h100-remote.c +++ b/firmware/drivers/lcd-h100-remote.c | |||
@@ -573,7 +573,7 @@ static void remote_tick(void) | |||
573 | void lcd_remote_init(void) | 573 | void lcd_remote_init(void) |
574 | { | 574 | { |
575 | create_thread(scroll_thread, scroll_stack, | 575 | create_thread(scroll_thread, scroll_stack, |
576 | sizeof(scroll_stack), scroll_name); | 576 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
577 | } | 577 | } |
578 | #else /* !SIMULATOR */ | 578 | #else /* !SIMULATOR */ |
579 | 579 | ||
@@ -601,10 +601,11 @@ void lcd_remote_init(void) | |||
601 | #endif | 601 | #endif |
602 | lcd_remote_clear_display(); | 602 | lcd_remote_clear_display(); |
603 | 603 | ||
604 | queue_clear(&remote_scroll_queue); /* no queue_init() -- private queue */ | 604 | /* private queue */ |
605 | queue_init(&remote_scroll_queue, false); | ||
605 | tick_add_task(remote_tick); | 606 | tick_add_task(remote_tick); |
606 | create_thread(scroll_thread, scroll_stack, | 607 | create_thread(scroll_thread, scroll_stack, |
607 | sizeof(scroll_stack), scroll_name); | 608 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
608 | } | 609 | } |
609 | 610 | ||
610 | /*** update functions ***/ | 611 | /*** update functions ***/ |
diff --git a/firmware/drivers/lcd-h100.c b/firmware/drivers/lcd-h100.c index 8407876d34..ada6f29216 100644 --- a/firmware/drivers/lcd-h100.c +++ b/firmware/drivers/lcd-h100.c | |||
@@ -144,7 +144,7 @@ void lcd_set_flip(bool yesno) | |||
144 | void lcd_init(void) | 144 | void lcd_init(void) |
145 | { | 145 | { |
146 | create_thread(scroll_thread, scroll_stack, | 146 | create_thread(scroll_thread, scroll_stack, |
147 | sizeof(scroll_stack), scroll_name); | 147 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
148 | } | 148 | } |
149 | #else | 149 | #else |
150 | 150 | ||
@@ -193,7 +193,7 @@ void lcd_init(void) | |||
193 | lcd_write_command(LCD_CNTL_ON_OFF | 1); /* LCD ON */ | 193 | lcd_write_command(LCD_CNTL_ON_OFF | 1); /* LCD ON */ |
194 | 194 | ||
195 | create_thread(scroll_thread, scroll_stack, | 195 | create_thread(scroll_thread, scroll_stack, |
196 | sizeof(scroll_stack), scroll_name); | 196 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
197 | } | 197 | } |
198 | 198 | ||
199 | /*** update functions ***/ | 199 | /*** update functions ***/ |
diff --git a/firmware/drivers/lcd-player.c b/firmware/drivers/lcd-player.c index 16012470fa..050258d1f8 100644 --- a/firmware/drivers/lcd-player.c +++ b/firmware/drivers/lcd-player.c | |||
@@ -610,7 +610,7 @@ void lcd_init (void) | |||
610 | lcd_set_contrast(lcd_default_contrast()); | 610 | lcd_set_contrast(lcd_default_contrast()); |
611 | 611 | ||
612 | create_thread(scroll_thread, scroll_stack, | 612 | create_thread(scroll_thread, scroll_stack, |
613 | sizeof(scroll_stack), scroll_name); | 613 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
614 | } | 614 | } |
615 | 615 | ||
616 | void lcd_jump_scroll (int mode) /* 0=off, 1=once, ..., JUMP_SCROLL_ALWAYS */ | 616 | 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 1987d9a3ed..e74cad7f03 100644 --- a/firmware/drivers/lcd-recorder.c +++ b/firmware/drivers/lcd-recorder.c | |||
@@ -232,7 +232,7 @@ void lcd_set_flip(bool yesno) | |||
232 | void lcd_init(void) | 232 | void lcd_init(void) |
233 | { | 233 | { |
234 | create_thread(scroll_thread, scroll_stack, | 234 | create_thread(scroll_thread, scroll_stack, |
235 | sizeof(scroll_stack), scroll_name); | 235 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
236 | } | 236 | } |
237 | #else | 237 | #else |
238 | 238 | ||
@@ -278,7 +278,7 @@ void lcd_init(void) | |||
278 | lcd_update(); | 278 | lcd_update(); |
279 | 279 | ||
280 | create_thread(scroll_thread, scroll_stack, | 280 | create_thread(scroll_thread, scroll_stack, |
281 | sizeof(scroll_stack), scroll_name); | 281 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
282 | } | 282 | } |
283 | 283 | ||
284 | /*** Update functions ***/ | 284 | /*** Update functions ***/ |
diff --git a/firmware/drivers/lcd-remote-2bit-vi.c b/firmware/drivers/lcd-remote-2bit-vi.c index 48f8b8a25f..bae2824050 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) | |||
1167 | void lcd_remote_init(void) | 1167 | void lcd_remote_init(void) |
1168 | { | 1168 | { |
1169 | create_thread(scroll_thread, scroll_stack, | 1169 | create_thread(scroll_thread, scroll_stack, |
1170 | sizeof(scroll_stack), scroll_name); | 1170 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
1171 | } | 1171 | } |
1172 | #else | 1172 | #else |
1173 | void lcd_remote_init(void) | 1173 | void lcd_remote_init(void) |
@@ -1176,9 +1176,10 @@ void lcd_remote_init(void) | |||
1176 | lcd_remote_init_device(); | 1176 | lcd_remote_init_device(); |
1177 | 1177 | ||
1178 | lcd_remote_clear_display(); | 1178 | lcd_remote_clear_display(); |
1179 | queue_clear(&remote_scroll_queue); /* no queue_init() -- private queue */ | 1179 | /* private queue */ |
1180 | queue_init(&remote_scroll_queue, false); | ||
1180 | tick_add_task(remote_tick); | 1181 | tick_add_task(remote_tick); |
1181 | create_thread(scroll_thread, scroll_stack, | 1182 | create_thread(scroll_thread, scroll_stack, |
1182 | sizeof(scroll_stack), scroll_name); | 1183 | sizeof(scroll_stack), scroll_name IF_PRIO(, PRIORITY_SYSTEM)); |
1183 | } | 1184 | } |
1184 | #endif | 1185 | #endif |