From dc6a0d756285ff0f1f1ee7caf3e1c8e27a093829 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Wed, 7 Apr 2021 17:24:18 -0700 Subject: [PATCH] ams: add target firmware 12.0.0, fusee recognition --- fusee/fusee-secondary/src/emummc_cfg.h | 3 +++ fusee/fusee-secondary/src/ips.c | 3 +++ fusee/fusee-secondary/src/nxboot.c | 10 +++++++++- .../include/stratosphere/hos/hos_types.hpp | 1 + .../include/vapours/ams/ams_target_firmware.h | 4 +++- 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/fusee/fusee-secondary/src/emummc_cfg.h b/fusee/fusee-secondary/src/emummc_cfg.h index 0099bd2d8..330305aa3 100644 --- a/fusee/fusee-secondary/src/emummc_cfg.h +++ b/fusee/fusee-secondary/src/emummc_cfg.h @@ -91,6 +91,9 @@ typedef enum { FS_VER_11_0_0, FS_VER_11_0_0_EXFAT, + FS_VER_12_0_0, + FS_VER_12_0_0_EXFAT, + FS_VER_MAX, } emummc_fs_ver_t; diff --git a/fusee/fusee-secondary/src/ips.c b/fusee/fusee-secondary/src/ips.c index 2f17730ed..13957f2f4 100644 --- a/fusee/fusee-secondary/src/ips.c +++ b/fusee/fusee-secondary/src/ips.c @@ -426,6 +426,9 @@ static const uint8_t g_fs_hashes[FS_VER_MAX][0x8] = { "\xE3\x99\x15\x6E\x84\x4E\xB0\xAA", /* FS_VER_11_0_0 */ "\x0B\xA1\x5B\xB3\x04\xB5\x05\x63", /* FS_VER_11_0_0_EXFAT */ + + "\xDC\x2A\x08\x49\x96\xBB\x3C\x01", /* FS_VER_12_0_0 */ + "\xD5\xA5\xBF\x36\x64\x0C\x49\xEA", /* FS_VER_12_0_0_EXFAT */ }; kip1_header_t *apply_kip_ips_patches(kip1_header_t *kip, size_t kip_size, emummc_fs_ver_t *out_fs_ver) { diff --git a/fusee/fusee-secondary/src/nxboot.c b/fusee/fusee-secondary/src/nxboot.c index ee81427e1..67e291ec4 100644 --- a/fusee/fusee-secondary/src/nxboot.c +++ b/fusee/fusee-secondary/src/nxboot.c @@ -285,7 +285,9 @@ static bool is_nca_present(const char *nca_name) { static uint32_t nxboot_get_specific_target_firmware(uint32_t target_firmware){ #define CHECK_NCA(NCA_ID, VERSION) do { if (is_nca_present(NCA_ID)) { return ATMOSPHERE_TARGET_FIRMWARE_##VERSION; } } while(0) - if (target_firmware >= ATMOSPHERE_TARGET_FIRMWARE_11_0_0) { + if (target_firmware >= ATMOSPHERE_TARGET_FIRMWARE_12_0_0) { + CHECK_NCA("bd4185843550fbba125b20787005d1d2", 12_0_0); + } else if (target_firmware >= ATMOSPHERE_TARGET_FIRMWARE_11_0_0) { CHECK_NCA("56211c7a5ed20a5332f5cdda67121e37", 11_0_1); CHECK_NCA("594c90bcdbcccad6b062eadba0cd0e7e", 11_0_0); } else if (target_firmware >= ATMOSPHERE_TARGET_FIRMWARE_10_0_0) { @@ -388,6 +390,8 @@ static uint32_t nxboot_get_target_firmware(const void *package1loader) { return ATMOSPHERE_TARGET_FIRMWARE_10_0_0; } else if (memcmp(package1loader_header->build_timestamp, "20201030", 8) == 0) { return ATMOSPHERE_TARGET_FIRMWARE_11_0_0; + } else if (memcmp(package1loader_header->build_timestamp, "20210129", 8) == 0) { + return ATMOSPHERE_TARGET_FIRMWARE_12_0_0; } else { fatal_error("[NXBOOT] Unable to identify package1!\n"); } @@ -595,6 +599,10 @@ static void nxboot_configure_stratosphere(uint32_t target_firmware) { if (target_firmware >= ATMOSPHERE_TARGET_FIRMWARE_11_0_0 && !(fuse_get_reserved_odm(7) & ~0x00001FFF)) { kip_patches_set_enable_nogc(); } + + /* NOTE: 12.0.0 added a new lotus firmware, but did not burn a fuse. */ + /* This is literally undetectable using normal fuses.... */ + /* C'est la vie. */ } } diff --git a/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp b/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp index 7e9ce33d0..ac7a56c24 100644 --- a/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp +++ b/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp @@ -60,6 +60,7 @@ namespace ams::hos { Version_10_2_0 = ::ams::TargetFirmware_10_2_0, Version_11_0_0 = ::ams::TargetFirmware_11_0_0, Version_11_0_1 = ::ams::TargetFirmware_11_0_1, + Version_12_0_0 = ::ams::TargetFirmware_12_0_0, Version_Current = ::ams::TargetFirmware_Current, diff --git a/libraries/libvapours/include/vapours/ams/ams_target_firmware.h b/libraries/libvapours/include/vapours/ams/ams_target_firmware.h index cd6e4dc5f..9a4dde468 100644 --- a/libraries/libvapours/include/vapours/ams/ams_target_firmware.h +++ b/libraries/libvapours/include/vapours/ams/ams_target_firmware.h @@ -58,8 +58,9 @@ #define ATMOSPHERE_TARGET_FIRMWARE_10_2_0 ATMOSPHERE_TARGET_FIRMWARE(10, 2, 0) #define ATMOSPHERE_TARGET_FIRMWARE_11_0_0 ATMOSPHERE_TARGET_FIRMWARE(11, 0, 0) #define ATMOSPHERE_TARGET_FIRMWARE_11_0_1 ATMOSPHERE_TARGET_FIRMWARE(11, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_12_0_0 ATMOSPHERE_TARGET_FIRMWARE(12, 0, 0) -#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_11_0_1 +#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_12_0_0 #define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE(0, 0, 0) #define ATMOSPHERE_TARGET_FIRMWARE_MAX ATMOSPHERE_TARGET_FIRMWARE_CURRENT @@ -110,6 +111,7 @@ namespace ams { TargetFirmware_10_2_0 = ATMOSPHERE_TARGET_FIRMWARE_10_2_0, TargetFirmware_11_0_0 = ATMOSPHERE_TARGET_FIRMWARE_11_0_0, TargetFirmware_11_0_1 = ATMOSPHERE_TARGET_FIRMWARE_11_0_1, + TargetFirmware_12_0_0 = ATMOSPHERE_TARGET_FIRMWARE_12_0_0, TargetFirmware_Current = ATMOSPHERE_TARGET_FIRMWARE_CURRENT,