mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-29 21:12:06 +00:00
hos: Add 12.0.0 support
This commit is contained in:
parent
d42a94f148
commit
edff6c551d
5 changed files with 69 additions and 21 deletions
|
@ -684,7 +684,7 @@ static bool _get_fs_exfat_compatible(link_t *info, bool *fs_is_510)
|
||||||
|
|
||||||
LIST_FOREACH_ENTRY(pkg2_kip1_info_t, ki, info, link)
|
LIST_FOREACH_ENTRY(pkg2_kip1_info_t, ki, info, link)
|
||||||
{
|
{
|
||||||
if (strncmp((const char*)ki->kip1->name, "FS", 2))
|
if (strncmp((const char*)ki->kip1->name, "FS", sizeof(ki->kip1->name)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!se_calc_sha256_oneshot(sha_buf, ki->kip1, ki->size))
|
if (!se_calc_sha256_oneshot(sha_buf, ki->kip1, ki->size))
|
||||||
|
@ -798,12 +798,14 @@ int hos_launch(ini_sec_t *cfg)
|
||||||
(!(fuses & ~0xF) && (ctxt.pkg1_id->fuses >= 5)) || // LAFW v2, 4.0.0+
|
(!(fuses & ~0xF) && (ctxt.pkg1_id->fuses >= 5)) || // LAFW v2, 4.0.0+
|
||||||
(!(fuses & ~0x3FF) && (ctxt.pkg1_id->fuses >= 11)) || // LAFW v3, 9.0.0+
|
(!(fuses & ~0x3FF) && (ctxt.pkg1_id->fuses >= 11)) || // LAFW v3, 9.0.0+
|
||||||
(!(fuses & ~0x1FFF) && (ctxt.pkg1_id->fuses >= 14)) // LAFW v4, 11.0.0+
|
(!(fuses & ~0x1FFF) && (ctxt.pkg1_id->fuses >= 14)) // LAFW v4, 11.0.0+
|
||||||
|
// Detection broken! Use kip1patch=nogc // LAFW v5, 12.0.0+
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|| ((emummc_enabled) &&
|
|| ((emummc_enabled) &&
|
||||||
(
|
(
|
||||||
((fuses & 0x400) && (ctxt.pkg1_id->fuses <= 10)) || // HOS 9.0.0+ fuses burnt.
|
((fuses & 0x400) && (ctxt.pkg1_id->fuses <= 10)) || // HOS 9.0.0+ fuses burnt.
|
||||||
((fuses & 0x2000) && (ctxt.pkg1_id->fuses <= 13)) // HOS 11.0.0+ fuses burnt.
|
((fuses & 0x2000) && (ctxt.pkg1_id->fuses <= 13)) // HOS 11.0.0+ fuses burnt.
|
||||||
|
// Detection broken! Use kip1patch=nogc // HOS 12.0.0+
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
config_kip1patch(&ctxt, "nogc");
|
config_kip1patch(&ctxt, "nogc");
|
||||||
|
|
|
@ -170,7 +170,8 @@ static const pkg1_id_t _pkg1_ids[] = {
|
||||||
{ "20190809135709", 9, 11, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 9.0.0 - 9.0.1.
|
{ "20190809135709", 9, 11, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 9.0.0 - 9.0.1.
|
||||||
{ "20191021113848", 10, 12, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 9.1.0 - 9.2.0.
|
{ "20191021113848", 10, 12, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 9.1.0 - 9.2.0.
|
||||||
{ "20200303104606", 10, 13, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 10.0.0 - 10.2.0.
|
{ "20200303104606", 10, 13, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 10.0.0 - 10.2.0.
|
||||||
{ "20201030110855", 10, 14, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 11.0.0+
|
{ "20201030110855", 10, 14, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 11.0.0 - 11.0.1
|
||||||
|
{ "20210129111626", 10, 14, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000, NULL, NULL }, // 12.0.0+
|
||||||
{ NULL } // End.
|
{ NULL } // End.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ u32 pkg2_newkern_ini1_end;
|
||||||
#define FREE_CODE_OFF_1ST_900 0x65780
|
#define FREE_CODE_OFF_1ST_900 0x65780
|
||||||
#define FREE_CODE_OFF_1ST_1000 0x67790
|
#define FREE_CODE_OFF_1ST_1000 0x67790
|
||||||
#define FREE_CODE_OFF_1ST_1100 0x49EE8
|
#define FREE_CODE_OFF_1ST_1100 0x49EE8
|
||||||
|
#define FREE_CODE_OFF_1ST_1200 0x48810
|
||||||
|
|
||||||
#define ID_SND_OFF_100 0x23CC0
|
#define ID_SND_OFF_100 0x23CC0
|
||||||
#define ID_SND_OFF_200 0x3F134
|
#define ID_SND_OFF_200 0x3F134
|
||||||
|
@ -79,6 +80,7 @@ u32 pkg2_newkern_ini1_end;
|
||||||
#define ID_SND_OFF_1000 0x34404
|
#define ID_SND_OFF_1000 0x34404
|
||||||
#define ID_SND_OFF_1100 0x245B4
|
#define ID_SND_OFF_1100 0x245B4
|
||||||
#define ID_SND_OFF_1101 0x245B8
|
#define ID_SND_OFF_1101 0x245B8
|
||||||
|
#define ID_SND_OFF_1200 0x24CF4
|
||||||
|
|
||||||
#define ID_RCV_OFF_100 0x219F0
|
#define ID_RCV_OFF_100 0x219F0
|
||||||
#define ID_RCV_OFF_200 0x3D1A8
|
#define ID_RCV_OFF_200 0x3D1A8
|
||||||
|
@ -93,6 +95,7 @@ u32 pkg2_newkern_ini1_end;
|
||||||
#define ID_RCV_OFF_1000 0x322F8
|
#define ID_RCV_OFF_1000 0x322F8
|
||||||
#define ID_RCV_OFF_1100 0x22B24
|
#define ID_RCV_OFF_1100 0x22B24
|
||||||
#define ID_RCV_OFF_1101 0x22B28
|
#define ID_RCV_OFF_1101 0x22B28
|
||||||
|
#define ID_RCV_OFF_1200 0x23424
|
||||||
|
|
||||||
static u32 PRC_ID_SND_100[] =
|
static u32 PRC_ID_SND_100[] =
|
||||||
{
|
{
|
||||||
|
@ -228,6 +231,20 @@ static u32 PRC_ID_RCV_1100[] =
|
||||||
0xD63F0100, 0xA8C127E8, 0xAA0003E8, 0xA8C12FEA, 0xAA0803E0
|
0xD63F0100, 0xA8C127E8, 0xAA0003E8, 0xA8C12FEA, 0xAA0803E0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static u32 PRC_ID_SND_1200[] =
|
||||||
|
{
|
||||||
|
0xA9BF2FEA, 0xF9404FEB, 0x5280006A, 0xD37EF54A, 0xF86A696A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9,
|
||||||
|
0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000100, 0xA9BF27E8, 0xF94002C8, 0xF9401D08, 0xAA1603E0,
|
||||||
|
0xD63F0100, 0xA8C127E8, 0xAA0003E8, 0xA8C12FEA, 0xAA0803E0
|
||||||
|
};
|
||||||
|
#define FREE_CODE_OFF_2ND_1200 (FREE_CODE_OFF_1ST_1200 + sizeof(PRC_ID_SND_1200) + sizeof(u32))
|
||||||
|
static u32 PRC_ID_RCV_1200[] =
|
||||||
|
{
|
||||||
|
0xA9BF2FEA, 0xF94073EB, 0x5280006A, 0xD37EF54A, 0xF86A696A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9,
|
||||||
|
0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000100, 0xA9BF27E8, 0xF9400388, 0xF9401D08, 0xAA1C03E0,
|
||||||
|
0xD63F0100, 0xA8C127E8, 0xAA0003E8, 0xA8C12FEA, 0xAA0803E0
|
||||||
|
};
|
||||||
|
|
||||||
// Include kernel patches here, so we can utilize pkg1 id
|
// Include kernel patches here, so we can utilize pkg1 id
|
||||||
KERNEL_PATCHSET_DEF(_kernel_1_patchset,
|
KERNEL_PATCHSET_DEF(_kernel_1_patchset,
|
||||||
{ SVC_VERIFY_DS, 0x3764C, _NOP(), NULL }, // Disable SVC verifications
|
{ SVC_VERIFY_DS, 0x3764C, _NOP(), NULL }, // Disable SVC verifications
|
||||||
|
@ -427,7 +444,23 @@ KERNEL_PATCHSET_DEF(_kernel_1101_patchset,
|
||||||
_B(FREE_CODE_OFF_2ND_1100 + sizeof(PRC_ID_RCV_1100), ID_RCV_OFF_1101 + sizeof(u32) * 4), NULL}
|
_B(FREE_CODE_OFF_2ND_1100 + sizeof(PRC_ID_RCV_1100), ID_RCV_OFF_1101 + sizeof(u32) * 4), NULL}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Kernel sha256 hashes.
|
KERNEL_PATCHSET_DEF(_kernel_12_patchset,
|
||||||
|
{ SVC_GENERIC, 0x2FCB4, _NOP(), NULL }, // Allow same process on svcControlCodeMemory.
|
||||||
|
{ SVC_VERIFY_DS, 0x38440, _NOP(), NULL }, // Disable SVC verifications.
|
||||||
|
{ DEBUG_MODE_EN, 0x45118, _MOVZX(8, 1, 0), NULL }, // Enable Debug Patch.
|
||||||
|
// Atmosphère kernel patches.
|
||||||
|
{ ATM_SYSM_INCR, 0x4809C, _MOVZW(21, 0x1D80, LSL16), NULL }, // System memory pool increase.
|
||||||
|
{ ATM_GEN_PATCH, ID_SND_OFF_1200, _B(ID_SND_OFF_1200, FREE_CODE_OFF_1ST_1200), NULL}, // Send process id branch.
|
||||||
|
{ ATM_ARR_PATCH, FREE_CODE_OFF_1ST_1200, sizeof(PRC_ID_SND_1200) >> 2, PRC_ID_SND_1200}, // Send process id code.
|
||||||
|
{ ATM_GEN_PATCH, FREE_CODE_OFF_1ST_1200 + sizeof(PRC_ID_SND_1200), // Branch back and skip 4 instructions.
|
||||||
|
_B(FREE_CODE_OFF_1ST_1200 + sizeof(PRC_ID_SND_1200), ID_SND_OFF_1200 + sizeof(u32) * 4), NULL},
|
||||||
|
{ ATM_GEN_PATCH, ID_RCV_OFF_1200, _B(ID_RCV_OFF_1200, FREE_CODE_OFF_2ND_1200), NULL}, // Receive process id branch.
|
||||||
|
{ ATM_ARR_PATCH, FREE_CODE_OFF_2ND_1200, sizeof(PRC_ID_RCV_1200) >> 2, PRC_ID_RCV_1200}, // Receive process id code.
|
||||||
|
{ ATM_GEN_PATCH, FREE_CODE_OFF_2ND_1200 + sizeof(PRC_ID_RCV_1200), // Branch back and skip 4 instructions.
|
||||||
|
_B(FREE_CODE_OFF_2ND_1200 + sizeof(PRC_ID_RCV_1200), ID_RCV_OFF_1200 + sizeof(u32) * 4), NULL}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Kernel sha256 hashes. Offset 0x800 up to INI1 start.
|
||||||
static const pkg2_kernel_id_t _pkg2_kernel_ids[] =
|
static const pkg2_kernel_id_t _pkg2_kernel_ids[] =
|
||||||
{
|
{
|
||||||
{ "\xb8\xc5\x0c\x68\x25\xa9\xb9\x5b", _kernel_1_patchset }, // 1.0.0
|
{ "\xb8\xc5\x0c\x68\x25\xa9\xb9\x5b", _kernel_1_patchset }, // 1.0.0
|
||||||
|
@ -444,6 +477,7 @@ static const pkg2_kernel_id_t _pkg2_kernel_ids[] =
|
||||||
{ "\x21\xc1\xd7\x24\x8e\xcd\xbd\xa8", _kernel_10_patchset }, // 10.0.0. Kernel only.
|
{ "\x21\xc1\xd7\x24\x8e\xcd\xbd\xa8", _kernel_10_patchset }, // 10.0.0. Kernel only.
|
||||||
{ "\xD5\xD0\xBA\x5D\x52\xB9\x77\x85", _kernel_11_patchset }, // 11.0.0. Kernel only.
|
{ "\xD5\xD0\xBA\x5D\x52\xB9\x77\x85", _kernel_11_patchset }, // 11.0.0. Kernel only.
|
||||||
{ "\xF8\x1E\xE0\x30\x3C\x7A\x08\x04", _kernel_1101_patchset },// 11.0.1. Kernel only.
|
{ "\xF8\x1E\xE0\x30\x3C\x7A\x08\x04", _kernel_1101_patchset },// 11.0.1. Kernel only.
|
||||||
|
{ "\xA6\xD8\xFF\xF3\x67\x4A\x33\xFC", _kernel_12_patchset }, // 12.0.0. Kernel only.
|
||||||
};
|
};
|
||||||
|
|
||||||
enum kip_offset_section
|
enum kip_offset_section
|
||||||
|
@ -463,6 +497,7 @@ enum kip_offset_section
|
||||||
#define GET_KIP_PATCH_OFFSET(x) ((x) & KIP_PATCH_OFFSET_MASK)
|
#define GET_KIP_PATCH_OFFSET(x) ((x) & KIP_PATCH_OFFSET_MASK)
|
||||||
#define KPS(x) ((u32)(x) << KIP_PATCH_SECTION_SHIFT)
|
#define KPS(x) ((u32)(x) << KIP_PATCH_SECTION_SHIFT)
|
||||||
|
|
||||||
|
// All kip patch offsets are without the 0x100-sized header.
|
||||||
static kip1_patch_t _fs_emummc[] =
|
static kip1_patch_t _fs_emummc[] =
|
||||||
{
|
{
|
||||||
{ KPS(KIP_TEXT) | 1, 0, "", "" },
|
{ KPS(KIP_TEXT) | 1, 0, "", "" },
|
||||||
|
@ -686,6 +721,19 @@ static kip1_patchset_t _fs_patches_1100[] =
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static kip1_patch_t _fs_nogc_1200[] =
|
||||||
|
{
|
||||||
|
{ KPS(KIP_TEXT) | 0x13EA24, 8, "\xFD\x7B\xBE\xA9\xF4\x4F\x01\xA9", "\xE0\x03\x1F\x2A\xC0\x03\x5F\xD6" },
|
||||||
|
{ KPS(KIP_TEXT) | 0x155368, 4, "\x14\x40\x80\x52", "\x14\x80\x80\x52" },
|
||||||
|
{ 0, 0, NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static kip1_patchset_t _fs_patches_1200[] =
|
||||||
|
{
|
||||||
|
{ "nogc", _fs_nogc_1200 },
|
||||||
|
{ "emummc", _fs_emummc },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
// SHA256 hashes.
|
// SHA256 hashes.
|
||||||
static kip1_id_t _kip_ids[] =
|
static kip1_id_t _kip_ids[] =
|
||||||
|
@ -728,6 +776,8 @@ static kip1_id_t _kip_ids[] =
|
||||||
{ "FS", "\x16\x0D\x3E\x10\x4E\xAD\x61\x76", _fs_patches_1020 }, // FS 10.2.0 exfat
|
{ "FS", "\x16\x0D\x3E\x10\x4E\xAD\x61\x76", _fs_patches_1020 }, // FS 10.2.0 exfat
|
||||||
{ "FS", "\xE3\x99\x15\x6E\x84\x4E\xB0\xAA", _fs_patches_1100 }, // FS 11.0.0
|
{ "FS", "\xE3\x99\x15\x6E\x84\x4E\xB0\xAA", _fs_patches_1100 }, // FS 11.0.0
|
||||||
{ "FS", "\x0B\xA1\x5B\xB3\x04\xB5\x05\x63", _fs_patches_1100 }, // FS 11.0.0 exfat
|
{ "FS", "\x0B\xA1\x5B\xB3\x04\xB5\x05\x63", _fs_patches_1100 }, // FS 11.0.0 exfat
|
||||||
|
{ "FS", "\xDC\x2A\x08\x49\x96\xBB\x3C\x01", _fs_patches_1200 }, // FS 12.0.0
|
||||||
|
{ "FS", "\xD5\xA5\xBF\x36\x64\x0C\x49\xEA", _fs_patches_1200 }, // FS 12.0.0 exfat
|
||||||
};
|
};
|
||||||
|
|
||||||
static kip1_id_t *_kip_id_sets = _kip_ids;
|
static kip1_id_t *_kip_id_sets = _kip_ids;
|
||||||
|
@ -1311,7 +1361,7 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames)
|
||||||
}
|
}
|
||||||
currPatchset++;
|
currPatchset++;
|
||||||
}
|
}
|
||||||
if (emummc_patch_selected && !strncmp(_kip_id_sets[currKipIdx].name, "FS", 2))
|
if (emummc_patch_selected && !strncmp(_kip_id_sets[currKipIdx].name, "FS", sizeof(ki->kip1->name)))
|
||||||
{
|
{
|
||||||
emummc_patch_selected = false;
|
emummc_patch_selected = false;
|
||||||
emu_cfg.fs_ver = currKipIdx;
|
emu_cfg.fs_ver = currKipIdx;
|
||||||
|
|
|
@ -171,15 +171,15 @@ void config_exosphere(launch_ctxt_t *ctxt, u32 warmboot_base, bool exo_new)
|
||||||
if (!memcmp(ctxt->pkg1_id->id, "20190314172056", 8)) // 8.0.0 - 8.0.1.
|
if (!memcmp(ctxt->pkg1_id->id, "20190314172056", 8)) // 8.0.0 - 8.0.1.
|
||||||
exo_fw_no++;
|
exo_fw_no++;
|
||||||
|
|
||||||
|
if (!memcmp(ctxt->pkg1_id->id, "20210129111626", 8)) // 12.0.0.
|
||||||
|
exo_fw_no++;
|
||||||
|
|
||||||
// Feed old exosphere target versioning to new.
|
// Feed old exosphere target versioning to new.
|
||||||
if (exo_new)
|
if (exo_new)
|
||||||
{
|
{
|
||||||
switch (exo_fw_no)
|
switch (exo_fw_no)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1 ... 4:
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
case 6:
|
case 6:
|
||||||
exo_fw_no = EXO_FW_VER(exo_fw_no, 0, 0);
|
exo_fw_no = EXO_FW_VER(exo_fw_no, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
@ -192,11 +192,8 @@ void config_exosphere(launch_ctxt_t *ctxt, u32 warmboot_base, bool exo_new)
|
||||||
case 7:
|
case 7:
|
||||||
exo_fw_no = EXO_FW_VER(6, 2, 0);
|
exo_fw_no = EXO_FW_VER(6, 2, 0);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8 ... 9:
|
||||||
exo_fw_no = EXO_FW_VER(7, 0, 0);
|
exo_fw_no = EXO_FW_VER(exo_fw_no - 1, 0, 0);
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
exo_fw_no = EXO_FW_VER(8, 0, 0);
|
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
exo_fw_no = EXO_FW_VER(8, 1, 0);
|
exo_fw_no = EXO_FW_VER(8, 1, 0);
|
||||||
|
@ -207,11 +204,8 @@ void config_exosphere(launch_ctxt_t *ctxt, u32 warmboot_base, bool exo_new)
|
||||||
case 12:
|
case 12:
|
||||||
exo_fw_no = EXO_FW_VER(9, 1, 0);
|
exo_fw_no = EXO_FW_VER(9, 1, 0);
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13 ... 15:
|
||||||
exo_fw_no = EXO_FW_VER(10, 0, 0);
|
exo_fw_no = EXO_FW_VER(exo_fw_no - 3, 0, 0);
|
||||||
break;
|
|
||||||
case 14:
|
|
||||||
exo_fw_no = EXO_FW_VER(11, 0, 0);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,8 @@ static const pkg1_id_t _pkg1_ids[] = {
|
||||||
{ "20190809135709", 9, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 9.0.0 - 9.0.1.
|
{ "20190809135709", 9, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 9.0.0 - 9.0.1.
|
||||||
{ "20191021113848", 10, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 9.1.0 - 9.2.0.
|
{ "20191021113848", 10, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 9.1.0 - 9.2.0.
|
||||||
{ "20200303104606", 10, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 10.0.0 - 10.2.0.
|
{ "20200303104606", 10, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 10.0.0 - 10.2.0.
|
||||||
{ "20201030110855", 10, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 11.0.0+
|
{ "20201030110855", 10, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 11.0.0 - 11.0.1
|
||||||
|
{ "20210129111626", 10, 0x0E00, 0x6FE0, 0x40030000, 0x4003E000 }, // 12.0.0+
|
||||||
{ NULL } //End.
|
{ NULL } //End.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue