diff options
author | William Wilgus <wilgus.william@gmail.com> | 2020-08-20 19:19:55 -0400 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2020-08-20 19:19:55 -0400 |
commit | bd744059cf959c8b9086978b32660efef5925b7d (patch) | |
tree | c445741c74a6312b5b8a2c64452ac48e20b182eb /firmware/common | |
parent | 5ef28cccf92f5eada6d502fa4b0e16a13e94be5b (diff) | |
download | rockbox-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')
-rw-r--r-- | firmware/common/disk.c | 18 |
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)) |