diff --git a/ipl/config.c b/ipl/config.c index 7544832..09fcb1e 100644 --- a/ipl/config.c +++ b/ipl/config.c @@ -42,6 +42,7 @@ void set_default_configuration() h_cfg.bootwait = 3; h_cfg.customlogo = 0; h_cfg.verification = 2; + h_cfg.se_keygen_done = 0; } int create_config_entry() diff --git a/ipl/config.h b/ipl/config.h index 6be3f5b..2505a34 100644 --- a/ipl/config.h +++ b/ipl/config.h @@ -25,6 +25,8 @@ typedef struct _hekate_config u32 bootwait; u32 customlogo; u32 verification; + // Global temporary config. + int se_keygen_done; }hekate_config; void set_default_configuration(); diff --git a/ipl/gfx.c b/ipl/gfx.c index 79bfcef..a0b1a20 100755 --- a/ipl/gfx.c +++ b/ipl/gfx.c @@ -360,7 +360,7 @@ void gfx_printf(gfx_con_t *con, const char *fmt, ...) break; case 'K': con->bgcol = va_arg(ap, u32); - con->fillbg = fcnt; + con->fillbg = 1; break; case '%': gfx_putc(con, '%'); diff --git a/ipl/hos.c b/ipl/hos.c index da58434..4cbd200 100755 --- a/ipl/hos.c +++ b/ipl/hos.c @@ -35,6 +35,7 @@ #include "pkg2.h" #include "ff.h" #include "di.h" +#include "config.h" #include "gfx.h" extern gfx_ctxt_t gfx_ctxt; @@ -43,7 +44,7 @@ extern void sd_unmount(); //#define DPRINTF(...) gfx_printf(&gfx_con, __VA_ARGS__) #define DPRINTF(...) -extern int se_keygen_done; +extern hekate_config h_cfg; typedef struct _launch_ctxt_t { @@ -446,9 +447,10 @@ int hos_launch(ini_sec_t *cfg) gfx_printf(&gfx_con, "Loaded package1 and keyblob\n"); // Generate keys. - if (!se_keygen_done) + if (!h_cfg.se_keygen_done) { keygen(ctxt.keyblob, ctxt.pkg1_id->kb, (u8 *)ctxt.pkg1 + ctxt.pkg1_id->tsec_off); + h_cfg.se_keygen_done = 1; DPRINTF("Generated keys\n"); } diff --git a/ipl/main.c b/ipl/main.c index e95e9ac..9d3a580 100755 --- a/ipl/main.c +++ b/ipl/main.c @@ -78,8 +78,6 @@ u8 *Kc_MENU_LOGO; hekate_config h_cfg; -int se_keygen_done = 0; - int sd_mount() { if (sd_mounted) @@ -1017,11 +1015,11 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) // More parts to backup that do not currently fit the sd card free space or fatal error. if (currPartIdx >= maxSplitParts) { - gfx_puts(&gfx_con, "\n\n1. Press any key and Power off Switch from the main menu.\n\ - 2. Move the files from SD card to free space.\n\ + gfx_puts(&gfx_con, "\n\n1. Press any key to unmount SD Card.\n\ + 2. Remove SD Card and move files to free space.\n\ Don\'t move the partial.idx file!\n\ - 3. Unplug and re-plug USB while pressing Vol+.\n\ - 4. Run hekate again and press Backup eMMC RAW GPP (or eMMC USER) to continue.\n"); + 3. Re-insert SD Card.\n\ + 4. Select the SAME option again to continue.\n"); gfx_con.fntsz = 16; free(buf); @@ -1285,7 +1283,7 @@ int restore_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part else if (((u32)((u64)f_size(&fp)>>(u64)9)) != totalSectors) { gfx_con.fntsz = 16; - EPRINTF("Size of sd card backup does not match,\neMMC's selected part size.\n"); + EPRINTF("Size of the SD Card backup does not match,\neMMC's selected part size.\n"); f_close(&fp); return 0; @@ -1541,7 +1539,7 @@ void dump_package1() goto out; } - if (!se_keygen_done) + if (!h_cfg.se_keygen_done) { // Read keyblob. u8 *keyblob = (u8 *)calloc(NX_EMMC_BLOCKSIZE, 1); @@ -1550,7 +1548,7 @@ void dump_package1() // Decrypt. keygen(keyblob, pkg1_id->kb, (u8 *)pkg1 + pkg1_id->tsec_off); - se_keygen_done = 1; + h_cfg.se_keygen_done = 1; free(keyblob); } pkg1_decrypt(pkg1_id, pkg1); @@ -1558,7 +1556,7 @@ void dump_package1() pkg1_unpack(warmboot, secmon, loader, pkg1_id, pkg1); // Display info. - gfx_printf(&gfx_con, "%kNX Bootloader size: %k0x%05X\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->ldr_size); + gfx_printf(&gfx_con, "%kNX Bootloader size: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->ldr_size); gfx_printf(&gfx_con, "%kSecure monitor addr: %k0x%05X\n", 0xFFC7EA46, 0xFFCCCCCC, pkg1_id->secmon_base); gfx_printf(&gfx_con, "%kSecure monitor size: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->sm_size); @@ -1999,7 +1997,7 @@ void fix_sd_attr(u32 type) { case 0: memcpy(path, "/", 2); - memcpy(label, "sd card", 8); + memcpy(label, "SD Card", 8); break; case 1: default: @@ -2361,7 +2359,7 @@ ment_t ment_options[] = { menu_t menu_options = { ment_options, - "Launch options", 0, 0 + "Launch Options", 0, 0 }; ment_t ment_cinfo[] = { @@ -2382,7 +2380,7 @@ ment_t ment_cinfo[] = { }; menu_t menu_cinfo = { ment_cinfo, - "Console info", 0, 0 + "Console Info", 0, 0 }; ment_t ment_autorcm[] = { @@ -2421,7 +2419,7 @@ ment_t ment_restore[] = { menu_t menu_restore = { ment_restore, - "Restore options", 0, 0 + "Restore Options", 0, 0 }; ment_t ment_backup[] = { @@ -2439,7 +2437,7 @@ ment_t ment_backup[] = { menu_t menu_backup = { ment_backup, - "Backup options", 0, 0 + "Backup Options", 0, 0 }; ment_t ment_tools[] = { diff --git a/ipl/se.c b/ipl/se.c index 805420b..18e9d9a 100755 --- a/ipl/se.c +++ b/ipl/se.c @@ -284,3 +284,4 @@ int se_calc_sha256(void *dst, const void *src, u32 src_size) return res; } + diff --git a/ipl/util.c b/ipl/util.c index c659aa1..2526e15 100755 --- a/ipl/util.c +++ b/ipl/util.c @@ -26,13 +26,13 @@ u32 get_tmr_s() u32 get_tmr_ms() { // The registers must be read with the following order: - // -> RTC_MILLI_SECONDS (0x10) -> RTC_SHADOW_SECONDS (0x8) + // -> RTC_MILLI_SECONDS (0x10) -> RTC_SHADOW_SECONDS (0xC) return (RTC(0x10) | (RTC(0xC)<< 10)); } u32 get_tmr_us() { - return TMR(0x10); //TMRUS + return TMR(0x10); //TIMERUS_CNTR_1US } void msleep(u32 milliseconds)