diff options
Diffstat (limited to 'firmware/common/disk.c')
-rw-r--r-- | firmware/common/disk.c | 21 |
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)) |