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
This commit is contained in:
Miika Pekkarinen 2006-08-11 10:13:16 +00:00
parent 1204136632
commit 3b52bb9c68
5 changed files with 37 additions and 17 deletions

View file

@ -338,9 +338,17 @@ void init(void)
panicf("ata: %d", rc); panicf("ata: %d", rc);
} }
#ifdef HAVE_EEPROM
eeprom_settings_init();
#endif
usb_start_monitoring(); usb_start_monitoring();
while (usb_detect()) while (usb_detect())
{ /* enter USB mode early, before trying to mount */ {
#ifdef HAVE_EEPROM
firmware_settings.disk_clean = false;
#endif
/* enter USB mode early, before trying to mount */
if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED) if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED)
#ifdef HAVE_MMC #ifdef HAVE_MMC
if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED)) if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED))
@ -374,10 +382,6 @@ void init(void)
} }
} }
#ifdef HAVE_EEPROM
eeprom_settings_init();
#endif
settings_calc_config_sector(); settings_calc_config_sector();
#if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD) #if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD)

View file

@ -3300,7 +3300,7 @@ void tagcache_unload_ramcache(void)
{ {
stat.ramcache = false; stat.ramcache = false;
/* Just to make sure there is no statefile present. */ /* Just to make sure there is no statefile present. */
remove(TAGCACHE_STATEFILE); // remove(TAGCACHE_STATEFILE);
} }
#endif #endif

View file

@ -1368,16 +1368,14 @@ void tree_flush(void)
#ifdef HAVE_TC_RAMCACHE #ifdef HAVE_TC_RAMCACHE
tagcache_unload_ramcache(); tagcache_unload_ramcache();
#endif #endif
#ifdef HAVE_DIRCACHE #ifdef HAVE_DIRCACHE
if (global_settings.dircache) if (global_settings.dircache)
{ {
global_settings.dircache_size = dircache_get_cache_size();
# ifdef HAVE_EEPROM # ifdef HAVE_EEPROM
if (dircache_is_enabled() && firmware_settings.initialized) if (dircache_is_enabled() && firmware_settings.initialized)
{
global_settings.dircache_size = dircache_get_cache_size();
dircache_save(DIRCACHE_FILE); dircache_save(DIRCACHE_FILE);
}
# endif # endif
dircache_disable(); dircache_disable();
} }
@ -1395,6 +1393,10 @@ void tree_restore(void)
firmware_settings.disk_clean = false; firmware_settings.disk_clean = false;
#endif #endif
#ifdef HAVE_TC_RAMCACHE
remove(TAGCACHE_STATEFILE);
#endif
#ifdef HAVE_DIRCACHE #ifdef HAVE_DIRCACHE
remove(DIRCACHE_FILE); remove(DIRCACHE_FILE);
if (global_settings.dircache) if (global_settings.dircache)

View file

@ -27,13 +27,20 @@
struct eeprom_settings firmware_settings; struct eeprom_settings firmware_settings;
static void reset_config(void) static bool reset_config(void)
{ {
memset(&firmware_settings, 0, sizeof(struct eeprom_settings)); memset(&firmware_settings, 0, sizeof(struct eeprom_settings));
#ifdef BOOTLOADER
/* Don't reset settings if we are inside bootloader. */
firmware_settings.initialized = false;
#else
firmware_settings.version = EEPROM_SETTINGS_VERSION; firmware_settings.version = EEPROM_SETTINGS_VERSION;
firmware_settings.initialized = true; firmware_settings.initialized = true;
firmware_settings.boot_disk = false; firmware_settings.boot_disk = false;
firmware_settings.bl_version = 0; firmware_settings.bl_version = 0;
#endif
return firmware_settings.initialized;
} }
bool eeprom_settings_init(void) bool eeprom_settings_init(void)
@ -69,23 +76,20 @@ bool eeprom_settings_init(void)
if (firmware_settings.version != EEPROM_SETTINGS_VERSION) if (firmware_settings.version != EEPROM_SETTINGS_VERSION)
{ {
logf("Version mismatch"); logf("Version mismatch");
reset_config(); return reset_config();
return true;
} }
if (firmware_settings.checksum != sum) if (firmware_settings.checksum != sum)
{ {
logf("Checksum mismatch"); logf("Checksum mismatch");
reset_config(); return reset_config();
return true;
} }
#ifndef BOOTLOADER #ifndef BOOTLOADER
if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER) if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER)
{ {
logf("Too old bootloader: %d", firmware_settings.bl_version); logf("Too old bootloader: %d", firmware_settings.bl_version);
reset_config(); return reset_config();
return true;
} }
#endif #endif

View file

@ -84,7 +84,17 @@ bool detect_flashed_rockbox(void)
struct flash_header hdr; struct flash_header hdr;
uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT; uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT;
# ifndef BOOTLOADER
int oldmode;
oldmode = system_memory_guard(MEMGUARD_NONE);
# endif
memcpy(&hdr, src, sizeof(struct flash_header)); memcpy(&hdr, src, sizeof(struct flash_header));
# ifndef BOOTLOADER
system_memory_guard(oldmode);
# endif
if (hdr.magic != FLASH_MAGIC) if (hdr.magic != FLASH_MAGIC)
return false; return false;