diff --git a/config_templates/kip_patches/default_nogc/160D3E104EAD6176991B8AE7AFA2B78BC5879FC07BE88A4FC9E16812971BC161.ips b/config_templates/kip_patches/default_nogc/160D3E104EAD6176991B8AE7AFA2B78BC5879FC07BE88A4FC9E16812971BC161.ips new file mode 100644 index 000000000..2d018e38f Binary files /dev/null and b/config_templates/kip_patches/default_nogc/160D3E104EAD6176991B8AE7AFA2B78BC5879FC07BE88A4FC9E16812971BC161.ips differ diff --git a/config_templates/kip_patches/default_nogc/A952B657ADF9C2BA1434BA9B8B86F3317D20659A8AC8510D8ECF4CE1BD7593E2.ips b/config_templates/kip_patches/default_nogc/A952B657ADF9C2BA1434BA9B8B86F3317D20659A8AC8510D8ECF4CE1BD7593E2.ips new file mode 100644 index 000000000..2d018e38f Binary files /dev/null and b/config_templates/kip_patches/default_nogc/A952B657ADF9C2BA1434BA9B8B86F3317D20659A8AC8510D8ECF4CE1BD7593E2.ips differ diff --git a/emummc/source/FS/FS_offsets.c b/emummc/source/FS/FS_offsets.c index d7da45c4a..821d31061 100644 --- a/emummc/source/FS/FS_offsets.c +++ b/emummc/source/FS/FS_offsets.c @@ -47,6 +47,8 @@ #include "offsets/910_exfat.h" #include "offsets/1000.h" #include "offsets/1000_exfat.h" +#include "offsets/1020.h" +#include "offsets/1020_exfat.h" #include "../utils/fatal.h" #define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers @@ -104,6 +106,8 @@ DEFINE_OFFSET_STRUCT(_910); DEFINE_OFFSET_STRUCT(_910_EXFAT); DEFINE_OFFSET_STRUCT(_1000); DEFINE_OFFSET_STRUCT(_1000_EXFAT); +DEFINE_OFFSET_STRUCT(_1020); +DEFINE_OFFSET_STRUCT(_1020_EXFAT); const fs_offsets_t *get_fs_offsets(enum FS_VER version) { switch (version) { @@ -169,6 +173,10 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) { return &(GET_OFFSET_STRUCT_NAME(_1000)); case FS_VER_10_0_0_EXFAT: return &(GET_OFFSET_STRUCT_NAME(_1000_EXFAT)); + case FS_VER_10_2_0: + return &(GET_OFFSET_STRUCT_NAME(_1020)); + case FS_VER_10_2_0_EXFAT: + return &(GET_OFFSET_STRUCT_NAME(_1020_EXFAT)); default: fatal_abort(Fatal_UnknownVersion); } diff --git a/emummc/source/FS/FS_versions.h b/emummc/source/FS/FS_versions.h index 2a12f7a00..3d7826879 100644 --- a/emummc/source/FS/FS_versions.h +++ b/emummc/source/FS/FS_versions.h @@ -68,6 +68,9 @@ enum FS_VER FS_VER_10_0_0, FS_VER_10_0_0_EXFAT, + FS_VER_10_2_0, + FS_VER_10_2_0_EXFAT, + FS_VER_MAX, }; diff --git a/emummc/source/FS/offsets/1020.h b/emummc/source/FS/offsets/1020.h new file mode 100644 index 000000000..2d43be5cd --- /dev/null +++ b/emummc/source/FS/offsets/1020.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2019 m4xw + * Copyright (c) 2019 Atmosphere-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef __FS_1020_H__ +#define __FS_1020_H__ + +// Accessor vtable getters +#define FS_OFFSET_1020_SDMMC_ACCESSOR_GC 0x14E0F0 +#define FS_OFFSET_1020_SDMMC_ACCESSOR_SD 0x14C200 +#define FS_OFFSET_1020_SDMMC_ACCESSOR_NAND 0x147080 + +// Hooks +#define FS_OFFSET_1020_SDMMC_WRAPPER_READ 0x1427E0 +#define FS_OFFSET_1020_SDMMC_WRAPPER_WRITE 0x1428C0 +#define FS_OFFSET_1020_RTLD 0x634 +#define FS_OFFSET_1020_RTLD_DESTINATION 0x9C + +#define FS_OFFSET_1020_CLKRST_SET_MIN_V_CLK_RATE 0x141A00 + +// Misc funcs +#define FS_OFFSET_1020_LOCK_MUTEX 0x28910 +#define FS_OFFSET_1020_UNLOCK_MUTEX 0x28960 + +#define FS_OFFSET_1020_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x142740 + +// Misc Data +#define FS_OFFSET_1020_SD_MUTEX 0xE273E8 +#define FS_OFFSET_1020_NAND_MUTEX 0xE22DA0 +#define FS_OFFSET_1020_ACTIVE_PARTITION 0xE22DE0 +#define FS_OFFSET_1020_SDMMC_DAS_HANDLE 0xE0AB90 + +// NOPs +#define FS_OFFSET_1020_SD_DAS_INIT 0x15214C + +// Nintendo Paths +#define FS_OFFSET_1020_NINTENDO_PATHS \ +{ \ + {.opcode_reg = 3, .adrp_offset = 0x0006BBA4, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x00078520, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007ED0C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0009115C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ +} + +#endif // __FS_1020_H__ diff --git a/emummc/source/FS/offsets/1020_exfat.h b/emummc/source/FS/offsets/1020_exfat.h new file mode 100644 index 000000000..0ed6a8fcf --- /dev/null +++ b/emummc/source/FS/offsets/1020_exfat.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2019 m4xw + * Copyright (c) 2019 Atmosphere-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef __FS_1020_EXFAT_H__ +#define __FS_1020_EXFAT_H__ + +// Accessor vtable getters +#define FS_OFFSET_1020_EXFAT_SDMMC_ACCESSOR_GC 0x14E0F0 +#define FS_OFFSET_1020_EXFAT_SDMMC_ACCESSOR_SD 0x14C200 +#define FS_OFFSET_1020_EXFAT_SDMMC_ACCESSOR_NAND 0x147080 + +// Hooks +#define FS_OFFSET_1020_EXFAT_SDMMC_WRAPPER_READ 0x1427E0 +#define FS_OFFSET_1020_EXFAT_SDMMC_WRAPPER_WRITE 0x1428C0 +#define FS_OFFSET_1020_EXFAT_RTLD 0x634 +#define FS_OFFSET_1020_EXFAT_RTLD_DESTINATION 0x9C + +#define FS_OFFSET_1020_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x141A00 + +// Misc funcs +#define FS_OFFSET_1020_EXFAT_LOCK_MUTEX 0x28910 +#define FS_OFFSET_1020_EXFAT_UNLOCK_MUTEX 0x28960 + +#define FS_OFFSET_1020_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x142740 + +// Misc Data +#define FS_OFFSET_1020_EXFAT_SD_MUTEX 0xE353E8 +#define FS_OFFSET_1020_EXFAT_NAND_MUTEX 0xE30DA0 +#define FS_OFFSET_1020_EXFAT_ACTIVE_PARTITION 0xE30DE0 +#define FS_OFFSET_1020_EXFAT_SDMMC_DAS_HANDLE 0xE18B90 + +// NOPs +#define FS_OFFSET_1020_EXFAT_SD_DAS_INIT 0x15214C + +// Nintendo Paths +#define FS_OFFSET_1020_EXFAT_NINTENDO_PATHS \ +{ \ + {.opcode_reg = 3, .adrp_offset = 0x0006BBA4, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x00078520, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007ED0C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0009115C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ +} + +#endif // __FS_1020_EXFAT_H__ diff --git a/fusee/fusee-secondary/src/emummc_cfg.h b/fusee/fusee-secondary/src/emummc_cfg.h index 7f30ecc21..23d611439 100644 --- a/fusee/fusee-secondary/src/emummc_cfg.h +++ b/fusee/fusee-secondary/src/emummc_cfg.h @@ -85,6 +85,9 @@ typedef enum { FS_VER_10_0_0, FS_VER_10_0_0_EXFAT, + FS_VER_10_2_0, + FS_VER_10_2_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 a07438a65..18c0cac6a 100644 --- a/fusee/fusee-secondary/src/ips.c +++ b/fusee/fusee-secondary/src/ips.c @@ -420,6 +420,9 @@ static const uint8_t g_fs_hashes[FS_VER_MAX][0x8] = { "\x3E\xEB\xD9\xB7\xBC\xD1\xB5\xE0", /* FS_VER_10_0_0 */ "\x81\x7E\xA2\xB0\xB7\x02\xC1\xF3", /* FS_VER_10_0_0_EXFAT */ + + "\xA9\x52\xB6\x57\xAD\xF9\xC2\xBA", /* FS_VER_10_2_0 */ + "\x16\x0D\x3E\x10\x4E\xAD\x61\x76", /* FS_VER_10_2_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 8ec82a796..f00367086 100644 --- a/fusee/fusee-secondary/src/nxboot.c +++ b/fusee/fusee-secondary/src/nxboot.c @@ -236,6 +236,7 @@ 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_10_0_0) { + CHECK_NCA("26325de4db3909e0ef2379787c7e671d", 10_2_0); CHECK_NCA("5077973537f6735b564dd7475b779f87", 10_1_1); /* Exclusive to China. */ CHECK_NCA("fd1faed0ca750700d254c0915b93d506", 10_1_0); CHECK_NCA("34728c771299443420820d8ae490ea41", 10_0_4); diff --git a/libraries/libvapours/include/vapours/ams/ams_api_version.h b/libraries/libvapours/include/vapours/ams/ams_api_version.h index 81c77fd0e..50e3367a1 100644 --- a/libraries/libvapours/include/vapours/ams/ams_api_version.h +++ b/libraries/libvapours/include/vapours/ams/ams_api_version.h @@ -17,10 +17,10 @@ #define ATMOSPHERE_RELEASE_VERSION_MAJOR 0 #define ATMOSPHERE_RELEASE_VERSION_MINOR 14 -#define ATMOSPHERE_RELEASE_VERSION_MICRO 2 +#define ATMOSPHERE_RELEASE_VERSION_MICRO 3 #define ATMOSPHERE_RELEASE_VERSION ATMOSPHERE_RELEASE_VERSION_MAJOR, ATMOSPHERE_RELEASE_VERSION_MINOR, ATMOSPHERE_RELEASE_VERSION_MICRO #define ATMOSPHERE_SUPPORTED_HOS_VERSION_MAJOR 10 -#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 1 -#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO 1 +#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 2 +#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO 0 diff --git a/libraries/libvapours/include/vapours/ams/ams_target_firmware.h b/libraries/libvapours/include/vapours/ams/ams_target_firmware.h index 0e9de3cb3..010a83198 100644 --- a/libraries/libvapours/include/vapours/ams/ams_target_firmware.h +++ b/libraries/libvapours/include/vapours/ams/ams_target_firmware.h @@ -55,8 +55,9 @@ #define ATMOSPHERE_TARGET_FIRMWARE_10_0_4 ATMOSPHERE_TARGET_FIRMWARE(10, 0, 4) #define ATMOSPHERE_TARGET_FIRMWARE_10_1_0 ATMOSPHERE_TARGET_FIRMWARE(10, 1, 0) #define ATMOSPHERE_TARGET_FIRMWARE_10_1_1 ATMOSPHERE_TARGET_FIRMWARE(10, 1, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_10_2_0 ATMOSPHERE_TARGET_FIRMWARE(10, 2, 0) -#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_10_1_1 +#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_10_2_0 #define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE(0, 0, 0) #define ATMOSPHERE_TARGET_FIRMWARE_MAX ATMOSPHERE_TARGET_FIRMWARE_CURRENT @@ -104,6 +105,7 @@ namespace ams { TargetFirmware_10_0_4 = ATMOSPHERE_TARGET_FIRMWARE_10_0_4, TargetFirmware_10_1_0 = ATMOSPHERE_TARGET_FIRMWARE_10_1_0, TargetFirmware_10_1_1 = ATMOSPHERE_TARGET_FIRMWARE_10_1_1, + TargetFirmware_10_2_0 = ATMOSPHERE_TARGET_FIRMWARE_10_2_0, TargetFirmware_Current = ATMOSPHERE_TARGET_FIRMWARE_CURRENT,