diff --git a/include/arm11/main.h b/include/arm11/main.h index ac08e87..80419ea 100644 --- a/include/arm11/main.h +++ b/include/arm11/main.h @@ -20,4 +20,4 @@ // 0 if no FIRM loaded / 1...3 FIRM loaded from slot / > 3 FIRM loaded from elsewhere -extern volatile u32 g_startFirmLaunch; +extern volatile bool g_startFirmLaunch; diff --git a/source/arm11/main.c b/source/arm11/main.c index cd0a32d..a8a02f7 100644 --- a/source/arm11/main.c +++ b/source/arm11/main.c @@ -37,7 +37,7 @@ #include "fsutils.h" -volatile u32 g_startFirmLaunch = 0; +volatile bool g_startFirmLaunch = false; @@ -83,8 +83,14 @@ { char* path = (char*) configGetData(KBootOption1 + i); err_ptr += ee_sprintf(err_ptr, "Keys match boot slot #%lu.\nBoot path is %s\n", (i+1), path); + firm_err = loadVerifyFirm(path, false); - if (firm_err >= 0) g_startFirmLaunch = i + 1; + if (firm_err >= 0) + { + g_startFirmLaunch = true; + storeBootslot(i + 1); + } + err_ptr += ee_sprintf(err_ptr, "Load slot #%lu %s.\n", (i+1), g_startFirmLaunch ? "success" : "failed"); break; } @@ -195,8 +201,14 @@ char* path = (char*) configGetData(KBootOption1 + i); err_ptr += ee_sprintf(err_ptr, "Trying boot slot #%lu.\nBoot path is %s\n", (i+1), path); + firm_err = loadVerifyFirm(path, false); - if (firm_err >= 0) g_startFirmLaunch = i + 1; + if (firm_err >= 0) + { + g_startFirmLaunch = true; + storeBootslot(i + 1); + } + err_ptr += ee_sprintf(err_ptr, "Load slot #%lu %s.\n", (i+1), g_startFirmLaunch ? "success" : "failed"); break; } @@ -205,8 +217,10 @@ else if (prevBootSlot == FIRM1_BOOT_SLOT) { err_ptr += ee_sprintf(err_ptr, "Rebooting to firm1:...\n"); + firm_err = loadVerifyFirm("firm1:", false); - if (firm_err >= 0) g_startFirmLaunch = prevBootSlot; + g_startFirmLaunch = (firm_err >= 0); + err_ptr += ee_sprintf(err_ptr, "Load firm1: %s.\n", g_startFirmLaunch ? "success" : "failed"); } // boot env handling (only on reboots) -> try previous slot @@ -222,8 +236,11 @@ { char* path = (char*) configGetData(KBootOption1 + (prevBootSlot-1)); err_ptr += ee_sprintf(err_ptr, "Boot path is %s\n", path); + firm_err = loadVerifyFirm(path, false); - if (firm_err >= 0) g_startFirmLaunch = prevBootSlot; + g_startFirmLaunch = (firm_err >= 0); + // no need to store the bootslot here as it stays as is + err_ptr += ee_sprintf(err_ptr, "Load slot #%lu %s.\n", prevBootSlot, g_startFirmLaunch ? "success" : "failed"); } } @@ -267,11 +284,6 @@ GFX_deinit(); } - // store the bootslot (if coming from slot or firm1:) - if((g_startFirmLaunch <= 3) || (g_startFirmLaunch == FIRM1_BOOT_SLOT)) - storeBootslot(g_startFirmLaunch); - else storeBootslot(0); - // launch firm firmLaunch(); } diff --git a/source/arm11/menu/menu_func.c b/source/arm11/menu/menu_func.c index 70cfcd2..4f79bd2 100644 --- a/source/arm11/menu/menu_func.c +++ b/source/arm11/menu/menu_func.c @@ -25,6 +25,7 @@ #include "firmwriter.h" #include "fs.h" #include "fsutils.h" +#include "arm11/menu/bootslot_store.h" #include "arm11/menu/menu_color.h" #include "arm11/menu/menu_fsel.h" #include "arm11/menu/menu_func.h" @@ -307,7 +308,11 @@ } ee_printf("\nFirm load success, launching firm..."); // <-- you will never see this - g_startFirmLaunch = (param < 3) ? (param + 1) : param; + g_startFirmLaunch = true; + + // store the bootslot + u32 slot = (param < 3) ? (param + 1) : (param == 0xFE) ? FIRM1_BOOT_SLOT : 0; + storeBootslot(slot); return 0;