summaryrefslogtreecommitdiff
path: root/firmware/common/disk.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common/disk.c')
-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))