summaryrefslogtreecommitdiff
path: root/firmware/common/disk.c
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2020-08-20 19:19:55 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2020-08-20 19:19:55 -0400
commitbd744059cf959c8b9086978b32660efef5925b7d (patch)
treec445741c74a6312b5b8a2c64452ac48e20b182eb /firmware/common/disk.c
parent5ef28cccf92f5eada6d502fa4b0e16a13e94be5b (diff)
downloadrockbox-bd744059cf959c8b9086978b32660efef5925b7d.tar.gz
rockbox-bd744059cf959c8b9086978b32660efef5925b7d.zip
Multiboot Firmware Root Redirect
Firmware now includes rudimentary redirect functionality but this only supports /.rockbox in the root of the device This patch allows loading external drive and directory into root namespace Root Redirects can now be put into different folders For instance placing '/_test' into SD1/rockbox_main.<playername> will redirect to /<1>/_test/.rockbox Debug menu>Bootdata now has root directory listed in addition to RAW Bootdata Redirect root work from Michael Sevakis g#1556 Redirect will be updated if code refactor is ever done Requires Multiboot bootloader (already in main) Change-Id: I697b3d0499f85e789c3020bc2133fbe0023f72a2
Diffstat (limited to 'firmware/common/disk.c')
-rw-r--r--firmware/common/disk.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/firmware/common/disk.c b/firmware/common/disk.c
index 3bd88f66a8..49137286a3 100644
--- a/firmware/common/disk.c
+++ b/firmware/common/disk.c
@@ -27,7 +27,7 @@
27#include "disk_cache.h" 27#include "disk_cache.h"
28#include "fileobj_mgr.h" 28#include "fileobj_mgr.h"
29#include "dir.h" 29#include "dir.h"
30#include "rb_namespace.h" 30#include "dircache_redirect.h"
31#include "disk.h" 31#include "disk.h"
32 32
33 33
@@ -249,7 +249,23 @@ int disk_mount_all(void)
249 for (int i = 0; i < NUM_VOLUMES; i++) 249 for (int i = 0; i < NUM_VOLUMES; i++)
250 vol_drive[i] = -1; /* mark all as unassigned */ 250 vol_drive[i] = -1; /* mark all as unassigned */
251 251
252#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) && !defined(BOOTLOADER)
253 unsigned int crc = 0;
254 int boot_volume = 0;
255 crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff);
256 if(crc == boot_data.crc)
257 {
258 boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */
259 }
260 #ifdef HAVE_HOTSWAP
261 if (storage_present(boot_volume))
262 #endif
263 mounted += disk_mount(boot_volume); /* mount boot volume first */
264 for (int i = 0; i < NUM_DRIVES; i++)
265 if (i != boot_volume)
266#else
252 for (int i = 0; i < NUM_DRIVES; i++) 267 for (int i = 0; i < NUM_DRIVES; i++)
268#endif
253 { 269 {
254 #ifdef HAVE_HOTSWAP 270 #ifdef HAVE_HOTSWAP
255 if (storage_present(i)) 271 if (storage_present(i))