summaryrefslogtreecommitdiff
path: root/firmware/common
diff options
context:
space:
mode:
authorWilliam Wilgus <me.theuser@yahoo.com>2017-05-17 01:12:25 +0200
committerWilliam Wilgus <me.theuser@yahoo.com>2019-11-15 11:26:56 +0100
commit62e5a3076ca540b2ab54d2e12f8ada42ffe42148 (patch)
treec77d1256d0d5cf6179a8adf2a9fc745a395dcbfd /firmware/common
parent3083abeb95e95dd1d12e78f1973546d93c3e12ab (diff)
downloadrockbox-62e5a3076ca540b2ab54d2e12f8ada42ffe42148.tar.gz
rockbox-62e5a3076ca540b2ab54d2e12f8ada42ffe42148.zip
MultiBoot_Firmware
Stop gap till I get a chance to work on the root folder stuff Makes whatever volume marked by bootdata.boot_volume the base or root volume, mounts all other volumes after the specified boot volume. Has the effect of swapping the SD card to the slot for internal and Internal storage is mounted as the Sd-card. Does not honor root redirect -- uses .rockbox folder in the root of boot volume Change-Id: I0f786aa0c8721e21cba607366775be3e3c0cf474
Diffstat (limited to 'firmware/common')
-rw-r--r--firmware/common/disk.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/firmware/common/disk.c b/firmware/common/disk.c
index f32125e8a3..80142f6d94 100644
--- a/firmware/common/disk.c
+++ b/firmware/common/disk.c
@@ -30,6 +30,11 @@
30#include "dircache_redirect.h" 30#include "dircache_redirect.h"
31#include "disk.h" 31#include "disk.h"
32 32
33#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR)
34#include "bootdata.h"
35#include "crc32.h"
36#endif
37
33#ifndef CONFIG_DEFAULT_PARTNUM 38#ifndef CONFIG_DEFAULT_PARTNUM
34#define CONFIG_DEFAULT_PARTNUM 0 39#define CONFIG_DEFAULT_PARTNUM 0
35#endif 40#endif
@@ -258,7 +263,23 @@ int disk_mount_all(void)
258 for (int i = 0; i < NUM_VOLUMES; i++) 263 for (int i = 0; i < NUM_VOLUMES; i++)
259 vol_drive[i] = -1; /* mark all as unassigned */ 264 vol_drive[i] = -1; /* mark all as unassigned */
260 265
266#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR)
267 unsigned int crc = 0;
268 int boot_volume = 0;
269 crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff);
270 if(crc == boot_data.crc)
271 {
272 boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */
273 }
274 #ifdef HAVE_HOTSWAP
275 if (storage_present(boot_volume))
276 #endif
277 mounted += disk_mount(boot_volume); /* mount boot volume first */
261 for (int i = 0; i < NUM_DRIVES; i++) 278 for (int i = 0; i < NUM_DRIVES; i++)
279 if (i != boot_volume)
280#else
281 for (int i = 0; i < NUM_DRIVES; i++)
282#endif
262 { 283 {
263 #ifdef HAVE_HOTSWAP 284 #ifdef HAVE_HOTSWAP
264 if (storage_present(i)) 285 if (storage_present(i))