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.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.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 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)
573void lcd_remote_init(void) 573void 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)
144void lcd_init(void) 144void 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
616void lcd_jump_scroll (int mode) /* 0=off, 1=once, ..., JUMP_SCROLL_ALWAYS */ 616void 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)
232void lcd_init(void) 232void 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)
1167void lcd_remote_init(void) 1167void 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
1173void lcd_remote_init(void) 1173void 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