summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-08-11 10:13:16 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-08-11 10:13:16 +0000
commit3b52bb9c68665c6860c7da6f8ee0b3d8fe26d53d (patch)
tree4a286c9f43aa15899857119b54759141bb68d8dd
parent1204136632777e84eac790811fb074552ef2e6b7 (diff)
downloadrockbox-3b52bb9c68665c6860c7da6f8ee0b3d8fe26d53d.tar.gz
rockbox-3b52bb9c68665c6860c7da6f8ee0b3d8fe26d53d.zip
Properly handle early USB mode, dircache and tagcache state files with
flashed rockbox. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10525 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/main.c14
-rw-r--r--apps/tagcache.c2
-rw-r--r--apps/tree.c10
-rw-r--r--firmware/eeprom_settings.c18
-rw-r--r--firmware/system.c10
5 files changed, 37 insertions, 17 deletions
diff --git a/apps/main.c b/apps/main.c
index d590790a85..a3fe8ef64f 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -338,9 +338,17 @@ void init(void)
338 panicf("ata: %d", rc); 338 panicf("ata: %d", rc);
339 } 339 }
340 340
341#ifdef HAVE_EEPROM
342 eeprom_settings_init();
343#endif
344
341 usb_start_monitoring(); 345 usb_start_monitoring();
342 while (usb_detect()) 346 while (usb_detect())
343 { /* enter USB mode early, before trying to mount */ 347 {
348#ifdef HAVE_EEPROM
349 firmware_settings.disk_clean = false;
350#endif
351 /* enter USB mode early, before trying to mount */
344 if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED) 352 if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED)
345#ifdef HAVE_MMC 353#ifdef HAVE_MMC
346 if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED)) 354 if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED))
@@ -374,10 +382,6 @@ void init(void)
374 } 382 }
375 } 383 }
376 384
377#ifdef HAVE_EEPROM
378 eeprom_settings_init();
379#endif
380
381 settings_calc_config_sector(); 385 settings_calc_config_sector();
382 386
383#if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD) 387#if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD)
diff --git a/apps/tagcache.c b/apps/tagcache.c
index 4bcf25bad2..ec713e29a4 100644
--- a/apps/tagcache.c
+++ b/apps/tagcache.c
@@ -3300,7 +3300,7 @@ void tagcache_unload_ramcache(void)
3300{ 3300{
3301 stat.ramcache = false; 3301 stat.ramcache = false;
3302 /* Just to make sure there is no statefile present. */ 3302 /* Just to make sure there is no statefile present. */
3303 remove(TAGCACHE_STATEFILE); 3303 // remove(TAGCACHE_STATEFILE);
3304} 3304}
3305#endif 3305#endif
3306 3306
diff --git a/apps/tree.c b/apps/tree.c
index 1dbe9223b9..0dd03779a5 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -1368,16 +1368,14 @@ void tree_flush(void)
1368#ifdef HAVE_TC_RAMCACHE 1368#ifdef HAVE_TC_RAMCACHE
1369 tagcache_unload_ramcache(); 1369 tagcache_unload_ramcache();
1370#endif 1370#endif
1371 1371
1372#ifdef HAVE_DIRCACHE 1372#ifdef HAVE_DIRCACHE
1373 if (global_settings.dircache) 1373 if (global_settings.dircache)
1374 { 1374 {
1375 global_settings.dircache_size = dircache_get_cache_size();
1375# ifdef HAVE_EEPROM 1376# ifdef HAVE_EEPROM
1376 if (dircache_is_enabled() && firmware_settings.initialized) 1377 if (dircache_is_enabled() && firmware_settings.initialized)
1377 {
1378 global_settings.dircache_size = dircache_get_cache_size();
1379 dircache_save(DIRCACHE_FILE); 1378 dircache_save(DIRCACHE_FILE);
1380 }
1381# endif 1379# endif
1382 dircache_disable(); 1380 dircache_disable();
1383 } 1381 }
@@ -1395,6 +1393,10 @@ void tree_restore(void)
1395 firmware_settings.disk_clean = false; 1393 firmware_settings.disk_clean = false;
1396#endif 1394#endif
1397 1395
1396#ifdef HAVE_TC_RAMCACHE
1397 remove(TAGCACHE_STATEFILE);
1398#endif
1399
1398#ifdef HAVE_DIRCACHE 1400#ifdef HAVE_DIRCACHE
1399 remove(DIRCACHE_FILE); 1401 remove(DIRCACHE_FILE);
1400 if (global_settings.dircache) 1402 if (global_settings.dircache)
diff --git a/firmware/eeprom_settings.c b/firmware/eeprom_settings.c
index 450eff9623..ad2c9c848f 100644
--- a/firmware/eeprom_settings.c
+++ b/firmware/eeprom_settings.c
@@ -27,13 +27,20 @@
27 27
28struct eeprom_settings firmware_settings; 28struct eeprom_settings firmware_settings;
29 29
30static void reset_config(void) 30static bool reset_config(void)
31{ 31{
32 memset(&firmware_settings, 0, sizeof(struct eeprom_settings)); 32 memset(&firmware_settings, 0, sizeof(struct eeprom_settings));
33#ifdef BOOTLOADER
34 /* Don't reset settings if we are inside bootloader. */
35 firmware_settings.initialized = false;
36#else
33 firmware_settings.version = EEPROM_SETTINGS_VERSION; 37 firmware_settings.version = EEPROM_SETTINGS_VERSION;
34 firmware_settings.initialized = true; 38 firmware_settings.initialized = true;
35 firmware_settings.boot_disk = false; 39 firmware_settings.boot_disk = false;
36 firmware_settings.bl_version = 0; 40 firmware_settings.bl_version = 0;
41#endif
42
43 return firmware_settings.initialized;
37} 44}
38 45
39bool eeprom_settings_init(void) 46bool eeprom_settings_init(void)
@@ -69,23 +76,20 @@ bool eeprom_settings_init(void)
69 if (firmware_settings.version != EEPROM_SETTINGS_VERSION) 76 if (firmware_settings.version != EEPROM_SETTINGS_VERSION)
70 { 77 {
71 logf("Version mismatch"); 78 logf("Version mismatch");
72 reset_config(); 79 return reset_config();
73 return true;
74 } 80 }
75 81
76 if (firmware_settings.checksum != sum) 82 if (firmware_settings.checksum != sum)
77 { 83 {
78 logf("Checksum mismatch"); 84 logf("Checksum mismatch");
79 reset_config(); 85 return reset_config();
80 return true;
81 } 86 }
82 87
83#ifndef BOOTLOADER 88#ifndef BOOTLOADER
84 if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER) 89 if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER)
85 { 90 {
86 logf("Too old bootloader: %d", firmware_settings.bl_version); 91 logf("Too old bootloader: %d", firmware_settings.bl_version);
87 reset_config(); 92 return reset_config();
88 return true;
89 } 93 }
90#endif 94#endif
91 95
diff --git a/firmware/system.c b/firmware/system.c
index bb09dbcd59..c635254a8a 100644
--- a/firmware/system.c
+++ b/firmware/system.c
@@ -84,7 +84,17 @@ bool detect_flashed_rockbox(void)
84 struct flash_header hdr; 84 struct flash_header hdr;
85 uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT; 85 uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT;
86 86
87# ifndef BOOTLOADER
88 int oldmode;
89 oldmode = system_memory_guard(MEMGUARD_NONE);
90# endif
91
87 memcpy(&hdr, src, sizeof(struct flash_header)); 92 memcpy(&hdr, src, sizeof(struct flash_header));
93
94# ifndef BOOTLOADER
95 system_memory_guard(oldmode);
96# endif
97
88 if (hdr.magic != FLASH_MAGIC) 98 if (hdr.magic != FLASH_MAGIC)
89 return false; 99 return false;
90 100