From bd744059cf959c8b9086978b32660efef5925b7d Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Thu, 20 Aug 2020 19:19:55 -0400 Subject: 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. 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 --- firmware/common/disk.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'firmware/common/disk.c') 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 @@ #include "disk_cache.h" #include "fileobj_mgr.h" #include "dir.h" -#include "rb_namespace.h" +#include "dircache_redirect.h" #include "disk.h" @@ -249,7 +249,23 @@ int disk_mount_all(void) for (int i = 0; i < NUM_VOLUMES; i++) vol_drive[i] = -1; /* mark all as unassigned */ +#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) && !defined(BOOTLOADER) + unsigned int crc = 0; + int boot_volume = 0; + crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); + if(crc == boot_data.crc) + { + boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */ + } + #ifdef HAVE_HOTSWAP + if (storage_present(boot_volume)) + #endif + mounted += disk_mount(boot_volume); /* mount boot volume first */ + for (int i = 0; i < NUM_DRIVES; i++) + if (i != boot_volume) +#else for (int i = 0; i < NUM_DRIVES; i++) +#endif { #ifdef HAVE_HOTSWAP if (storage_present(i)) -- cgit v1.2.3