summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/debug_menu.c18
-rw-r--r--firmware/common/disk.c21
2 files changed, 36 insertions, 3 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 48ebec2279..bb5d3b4a8a 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -2546,10 +2546,21 @@ static bool dbg_boot_data(void)
2546 info.scroll_all = true; 2546 info.scroll_all = true;
2547 simplelist_info_init(&info, "Boot data", 1, NULL); 2547 simplelist_info_init(&info, "Boot data", 1, NULL);
2548 simplelist_set_line_count(0); 2548 simplelist_set_line_count(0);
2549 simplelist_addline("Magic: %.8s", boot_data.magic); 2549 crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff);
2550#if defined(HAVE_MULTIBOOT)
2551 int boot_volume = 0;
2552 if(crc == boot_data.crc)
2553 {
2554 boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */
2555 }
2556 simplelist_addline("Boot Volume: <%lu>", boot_volume);
2557 simplelist_addline("");
2558#endif
2559 simplelist_addline("Bootdata RAW:");
2560 if (crc != boot_data.crc)
2561 simplelist_addline("Magic: %.8s", boot_data.magic);
2550 simplelist_addline("Length: %lu", boot_data.length); 2562 simplelist_addline("Length: %lu", boot_data.length);
2551 simplelist_addline("CRC: %lx", boot_data.crc); 2563 simplelist_addline("CRC: %lx", boot_data.crc);
2552 crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff);
2553 (crc == boot_data.crc) ? simplelist_addline("CRC: OK!") : 2564 (crc == boot_data.crc) ? simplelist_addline("CRC: OK!") :
2554 simplelist_addline("CRC: BAD"); 2565 simplelist_addline("CRC: BAD");
2555 for (unsigned i = 0; i < boot_data.length; i += 4) 2566 for (unsigned i = 0; i < boot_data.length; i += 4)
@@ -2561,7 +2572,8 @@ static bool dbg_boot_data(void)
2561 info.hide_selection = true; 2572 info.hide_selection = true;
2562 return simplelist_show_list(&info); 2573 return simplelist_show_list(&info);
2563} 2574}
2564#endif 2575#endif /* defined(HAVE_BOOTDATA) && !defined(SIMULATOR) */
2576
2565/****** The menu *********/ 2577/****** The menu *********/
2566static const struct { 2578static const struct {
2567 unsigned char *desc; /* string or ID */ 2579 unsigned char *desc; /* string or ID */
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))