diff --git a/libmesosphere/include/mesosphere/arch/arm64/init/kern_k_init_page_table.hpp b/libmesosphere/include/mesosphere/arch/arm64/init/kern_k_init_page_table.hpp index 73f497c4..0eedb6d8 100644 --- a/libmesosphere/include/mesosphere/arch/arm64/init/kern_k_init_page_table.hpp +++ b/libmesosphere/include/mesosphere/arch/arm64/init/kern_k_init_page_table.hpp @@ -676,7 +676,7 @@ namespace ams::kern::arch::arm64::init { } ALWAYS_INLINE void InitializeFromState(uintptr_t state_val) { - if (kern::GetTargetFirmware() >= kern::TargetFirmware_10_0_0) { + if (kern::GetTargetFirmware() >= ams::TargetFirmware_10_0_0) { this->state = *reinterpret_cast(state_val); } else { this->state.next_address = state_val; diff --git a/libmesosphere/include/mesosphere/kern_common.hpp b/libmesosphere/include/mesosphere/kern_common.hpp index b9862e71..e27cfc96 100644 --- a/libmesosphere/include/mesosphere/kern_common.hpp +++ b/libmesosphere/include/mesosphere/kern_common.hpp @@ -20,23 +20,7 @@ namespace ams::kern { constexpr size_t PageSize = 4_KB; - enum TargetFirmware : u32 { - TargetFirmware_1_0_0 = ATMOSPHERE_TARGET_FIRMWARE_100, - TargetFirmware_2_0_0 = ATMOSPHERE_TARGET_FIRMWARE_200, - TargetFirmware_3_0_0 = ATMOSPHERE_TARGET_FIRMWARE_300, - TargetFirmware_4_0_0 = ATMOSPHERE_TARGET_FIRMWARE_400, - TargetFirmware_5_0_0 = ATMOSPHERE_TARGET_FIRMWARE_500, - TargetFirmware_6_0_0 = ATMOSPHERE_TARGET_FIRMWARE_600, - TargetFirmware_6_2_0 = ATMOSPHERE_TARGET_FIRMWARE_620, - TargetFirmware_7_0_0 = ATMOSPHERE_TARGET_FIRMWARE_700, - TargetFirmware_8_0_0 = ATMOSPHERE_TARGET_FIRMWARE_800, - TargetFirmware_8_1_0 = ATMOSPHERE_TARGET_FIRMWARE_810, - TargetFirmware_9_0_0 = ATMOSPHERE_TARGET_FIRMWARE_900, - TargetFirmware_9_1_0 = ATMOSPHERE_TARGET_FIRMWARE_910, - TargetFirmware_10_0_0 = ATMOSPHERE_TARGET_FIRMWARE_1000, - }; - - TargetFirmware GetTargetFirmware(); + ams::TargetFirmware GetTargetFirmware(); } diff --git a/libstratosphere/include/stratosphere/ams/ams_types.hpp b/libstratosphere/include/stratosphere/ams/ams_types.hpp index 40ac14db..73b69fba 100644 --- a/libstratosphere/include/stratosphere/ams/ams_types.hpp +++ b/libstratosphere/include/stratosphere/ams/ams_types.hpp @@ -21,34 +21,18 @@ namespace ams::exosphere { - #define AMS_DEFINE_TARGET_FIRMWARE_ENUM(n) TargetFirmware_##n = ATMOSPHERE_TARGET_FIRMWARE_##n - enum TargetFirmware : u32 { - AMS_DEFINE_TARGET_FIRMWARE_ENUM(100), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(200), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(300), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(400), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(500), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(600), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(620), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(700), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(800), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(810), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(900), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(910), - AMS_DEFINE_TARGET_FIRMWARE_ENUM(1000), - }; - #undef AMS_DEFINE_TARGET_FIRMWARE_ENUM + using TargetFirmware = ams::TargetFirmware; constexpr ALWAYS_INLINE u32 GetVersion(u32 major, u32 minor, u32 micro) { return (major << 16) | (minor << 8) | (micro); } struct ApiInfo { - using MasterKeyRevision = util::BitPack64::Field<0, 8, u32>; - using TargetFirmwareVersion = util::BitPack64::Field; - using MicroVersion = util::BitPack64::Field; - using MinorVersion = util::BitPack64::Field; - using MajorVersion = util::BitPack64::Field; + using TargetFirmwareVersion = util::BitPack64::Field<0, 32, TargetFirmware>; + using MasterKeyRevision = util::BitPack64::Field; + using MicroVersion = util::BitPack64::Field; + using MinorVersion = util::BitPack64::Field; + using MajorVersion = util::BitPack64::Field; util::BitPack64 value; diff --git a/libstratosphere/include/stratosphere/hos/hos_types.hpp b/libstratosphere/include/stratosphere/hos/hos_types.hpp index 299828a8..b93c6e73 100644 --- a/libstratosphere/include/stratosphere/hos/hos_types.hpp +++ b/libstratosphere/include/stratosphere/hos/hos_types.hpp @@ -19,22 +19,47 @@ namespace ams::hos { - enum Version : u16 { - Version_Min = 0, - Version_1_0_0 = Version_Min, - Version_2_0_0 = 1, - Version_3_0_0 = 2, - Version_4_0_0 = 3, - Version_5_0_0 = 4, - Version_6_0_0 = 5, - Version_7_0_0 = 6, - Version_8_0_0 = 7, - Version_8_1_0 = 8, - Version_9_0_0 = 9, - Version_9_1_0 = 10, - Version_10_0_0 = 11, - Version_Current = Version_10_0_0, - Version_Max = 32, + enum Version : u32 { + Version_Min = ::ams::TargetFirmware_Min, + + Version_1_0_0 = ::ams::TargetFirmware_1_0_0, + Version_2_0_0 = ::ams::TargetFirmware_2_0_0, + Version_2_1_0 = ::ams::TargetFirmware_2_1_0, + Version_2_2_0 = ::ams::TargetFirmware_2_2_0, + Version_2_3_0 = ::ams::TargetFirmware_2_3_0, + Version_3_0_0 = ::ams::TargetFirmware_3_0_0, + Version_3_0_1 = ::ams::TargetFirmware_3_0_1, + Version_3_0_2 = ::ams::TargetFirmware_3_0_2, + Version_4_0_0 = ::ams::TargetFirmware_4_0_0, + Version_4_0_1 = ::ams::TargetFirmware_4_0_1, + Version_4_1_0 = ::ams::TargetFirmware_4_1_0, + Version_5_0_0 = ::ams::TargetFirmware_5_0_0, + Version_5_0_1 = ::ams::TargetFirmware_5_0_1, + Version_5_0_2 = ::ams::TargetFirmware_5_0_2, + Version_5_1_0 = ::ams::TargetFirmware_5_1_0, + Version_6_0_0 = ::ams::TargetFirmware_6_0_0, + Version_6_0_1 = ::ams::TargetFirmware_6_0_1, + Version_6_1_0 = ::ams::TargetFirmware_6_1_0, + Version_6_2_0 = ::ams::TargetFirmware_6_2_0, + Version_7_0_0 = ::ams::TargetFirmware_7_0_0, + Version_7_0_1 = ::ams::TargetFirmware_7_0_1, + Version_8_0_0 = ::ams::TargetFirmware_8_0_0, + Version_8_0_1 = ::ams::TargetFirmware_8_0_1, + Version_8_1_0 = ::ams::TargetFirmware_8_1_0, + Version_8_1_1 = ::ams::TargetFirmware_8_1_1, + Version_9_0_0 = ::ams::TargetFirmware_9_0_0, + Version_9_0_1 = ::ams::TargetFirmware_9_0_1, + Version_9_1_0 = ::ams::TargetFirmware_9_1_0, + Version_9_2_0 = ::ams::TargetFirmware_9_2_0, + Version_10_0_0 = ::ams::TargetFirmware_10_0_0, + Version_10_0_1 = ::ams::TargetFirmware_10_0_1, + Version_10_0_2 = ::ams::TargetFirmware_10_0_2, + + Version_Current = ::ams::TargetFirmware_Current, + + Version_Max = ::ams::TargetFirmware_Max, }; + + } diff --git a/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp b/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp index 47ac08c2..44e35b4f 100644 --- a/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp +++ b/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp @@ -61,7 +61,7 @@ namespace ams::sf::cmif { return this->handler; } }; - static_assert(std::is_pod::value && sizeof(ServiceCommandMeta) == 0x10, "sizeof(ServiceCommandMeta)"); + static_assert(std::is_pod::value && sizeof(ServiceCommandMeta) == 0x18, "sizeof(ServiceCommandMeta)"); namespace impl { diff --git a/libstratosphere/source/hos/hos_version_api.cpp b/libstratosphere/source/hos/hos_version_api.cpp index b11d56c8..56f4b65b 100644 --- a/libstratosphere/source/hos/hos_version_api.cpp +++ b/libstratosphere/source/hos/hos_version_api.cpp @@ -35,46 +35,9 @@ namespace ams::hos { return; } - switch (exosphere::GetApiInfo().GetTargetFirmware()) { - case exosphere::TargetFirmware_100: - g_hos_version = hos::Version_1_0_0; - break; - case exosphere::TargetFirmware_200: - g_hos_version = hos::Version_2_0_0; - break; - case exosphere::TargetFirmware_300: - g_hos_version = hos::Version_3_0_0; - break; - case exosphere::TargetFirmware_400: - g_hos_version = hos::Version_4_0_0; - break; - case exosphere::TargetFirmware_500: - g_hos_version = hos::Version_5_0_0; - break; - case exosphere::TargetFirmware_600: - case exosphere::TargetFirmware_620: - g_hos_version = hos::Version_6_0_0; - break; - case exosphere::TargetFirmware_700: - g_hos_version = hos::Version_7_0_0; - break; - case exosphere::TargetFirmware_800: - g_hos_version = hos::Version_8_0_0; - break; - case exosphere::TargetFirmware_810: - g_hos_version = hos::Version_8_1_0; - break; - case exosphere::TargetFirmware_900: - g_hos_version = hos::Version_9_0_0; - break; - case exosphere::TargetFirmware_910: - g_hos_version = hos::Version_9_1_0; - break; - case exosphere::TargetFirmware_1000: - g_hos_version = hos::Version_10_0_0; - break; - AMS_UNREACHABLE_DEFAULT_CASE(); - } + /* Hos version is a direct copy of target firmware, just renamed. */ + g_hos_version = static_cast(exosphere::GetApiInfo().GetTargetFirmware()); + AMS_ABORT_UNLESS(g_hos_version <= hos::Version_Max); __atomic_store_n(&g_has_cached, true, __ATOMIC_SEQ_CST); } @@ -87,69 +50,10 @@ namespace ams::hos { } void SetVersionForLibnxInternal() { - u32 major = 0, minor = 0, micro = 0; - switch (hos::GetVersion()) { - case hos::Version_1_0_0: - major = 1; - minor = 0; - micro = 0; - break; - case hos::Version_2_0_0: - major = 2; - minor = 0; - micro = 0; - break; - case hos::Version_3_0_0: - major = 3; - minor = 0; - micro = 0; - break; - case hos::Version_4_0_0: - major = 4; - minor = 0; - micro = 0; - break; - case hos::Version_5_0_0: - major = 5; - minor = 0; - micro = 0; - break; - case hos::Version_6_0_0: - major = 6; - minor = 0; - micro = 0; - break; - case hos::Version_7_0_0: - major = 7; - minor = 0; - micro = 0; - break; - case hos::Version_8_0_0: - major = 8; - minor = 0; - micro = 0; - break; - case hos::Version_8_1_0: - major = 8; - minor = 1; - micro = 0; - break; - case hos::Version_9_0_0: - major = 9; - minor = 0; - micro = 0; - case hos::Version_9_1_0: - major = 9; - minor = 1; - micro = 0; - break; - case hos::Version_10_0_0: - major = 10; - minor = 0; - micro = 0; - break; - AMS_UNREACHABLE_DEFAULT_CASE(); - } + const u32 hos_version_val = static_cast(hos::GetVersion()); + const u32 major = (hos_version_val >> 24) & 0xFF; + const u32 minor = (hos_version_val >> 16) & 0xFF; + const u32 micro = (hos_version_val >> 8) & 0xFF; hosversionSet(MAKEHOSVERSION(major, minor, micro)); } diff --git a/libvapours/include/vapours/ams/ams_target_firmware.h b/libvapours/include/vapours/ams/ams_target_firmware.h index 25764523..1d51bbe6 100644 --- a/libvapours/include/vapours/ams/ams_target_firmware.h +++ b/libvapours/include/vapours/ams/ams_target_firmware.h @@ -15,22 +15,94 @@ */ #pragma once -#define ATMOSPHERE_TARGET_FIRMWARE_100 1 -#define ATMOSPHERE_TARGET_FIRMWARE_200 2 -#define ATMOSPHERE_TARGET_FIRMWARE_300 3 -#define ATMOSPHERE_TARGET_FIRMWARE_400 4 -#define ATMOSPHERE_TARGET_FIRMWARE_500 5 -#define ATMOSPHERE_TARGET_FIRMWARE_600 6 -#define ATMOSPHERE_TARGET_FIRMWARE_620 7 -#define ATMOSPHERE_TARGET_FIRMWARE_700 8 -#define ATMOSPHERE_TARGET_FIRMWARE_800 9 -#define ATMOSPHERE_TARGET_FIRMWARE_810 10 -#define ATMOSPHERE_TARGET_FIRMWARE_900 11 -#define ATMOSPHERE_TARGET_FIRMWARE_910 12 -#define ATMOSPHERE_TARGET_FIRMWARE_1000 13 +#define ATMOSPHERE_TARGET_FIRMWARE_WITH_REVISION(major, minor, micro, rev) ((major << 24) | (minor << 16) | (micro << 8) | (rev)) -#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_1000 +#define ATMOSPHERE_TARGET_FIRMWARE(major, minor, micro) ATMOSPHERE_TARGET_FIRMWARE_WITH_REVISION(major, minor, micro, 0) -#define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE_100 +#define ATMOSPHERE_TARGET_FIRMWARE_1_0_0 ATMOSPHERE_TARGET_FIRMWARE( 1, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_2_0_0 ATMOSPHERE_TARGET_FIRMWARE( 2, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_2_1_0 ATMOSPHERE_TARGET_FIRMWARE( 2, 1, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_2_2_0 ATMOSPHERE_TARGET_FIRMWARE( 2, 2, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_2_3_0 ATMOSPHERE_TARGET_FIRMWARE( 2, 3, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_3_0_0 ATMOSPHERE_TARGET_FIRMWARE( 3, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_3_0_1 ATMOSPHERE_TARGET_FIRMWARE( 3, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_3_0_2 ATMOSPHERE_TARGET_FIRMWARE( 3, 0, 2) +#define ATMOSPHERE_TARGET_FIRMWARE_4_0_0 ATMOSPHERE_TARGET_FIRMWARE( 4, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_4_0_1 ATMOSPHERE_TARGET_FIRMWARE( 4, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_4_1_0 ATMOSPHERE_TARGET_FIRMWARE( 4, 1, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_5_0_0 ATMOSPHERE_TARGET_FIRMWARE( 5, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_5_0_1 ATMOSPHERE_TARGET_FIRMWARE( 5, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_5_0_2 ATMOSPHERE_TARGET_FIRMWARE( 5, 0, 2) +#define ATMOSPHERE_TARGET_FIRMWARE_5_1_0 ATMOSPHERE_TARGET_FIRMWARE( 5, 1, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_6_0_0 ATMOSPHERE_TARGET_FIRMWARE( 6, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_6_0_1 ATMOSPHERE_TARGET_FIRMWARE( 6, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_6_1_0 ATMOSPHERE_TARGET_FIRMWARE( 6, 1, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_6_2_0 ATMOSPHERE_TARGET_FIRMWARE( 6, 2, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_7_0_0 ATMOSPHERE_TARGET_FIRMWARE( 7, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_7_0_1 ATMOSPHERE_TARGET_FIRMWARE( 7, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_8_0_0 ATMOSPHERE_TARGET_FIRMWARE( 8, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_8_0_1 ATMOSPHERE_TARGET_FIRMWARE( 8, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_8_1_0 ATMOSPHERE_TARGET_FIRMWARE( 8, 1, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_8_1_1 ATMOSPHERE_TARGET_FIRMWARE( 8, 1, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_9_0_0 ATMOSPHERE_TARGET_FIRMWARE( 9, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_9_0_1 ATMOSPHERE_TARGET_FIRMWARE( 9, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_9_1_0 ATMOSPHERE_TARGET_FIRMWARE( 9, 1, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_9_2_0 ATMOSPHERE_TARGET_FIRMWARE( 9, 2, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_10_0_0 ATMOSPHERE_TARGET_FIRMWARE(10, 0, 0) +#define ATMOSPHERE_TARGET_FIRMWARE_10_0_1 ATMOSPHERE_TARGET_FIRMWARE(10, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_10_0_2 ATMOSPHERE_TARGET_FIRMWARE(10, 0, 2) + +#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_10_0_2 + +#define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE(0, 0, 0) #define ATMOSPHERE_TARGET_FIRMWARE_MAX ATMOSPHERE_TARGET_FIRMWARE_CURRENT -#define ATMOSPHERE_TARGET_FIRMWARE_COUNT ((ATMOSPHERE_TARGET_FIRMWARE_MAX - ATMOSPHERE_TARGET_FIRMWARE_MIN) + 1) \ No newline at end of file + +#ifdef __cplusplus + +namespace ams { + + enum TargetFirmware : u32 { + TargetFirmware_Min = ATMOSPHERE_TARGET_FIRMWARE_MIN, + + TargetFirmware_1_0_0 = ATMOSPHERE_TARGET_FIRMWARE_1_0_0, + TargetFirmware_2_0_0 = ATMOSPHERE_TARGET_FIRMWARE_2_0_0, + TargetFirmware_2_1_0 = ATMOSPHERE_TARGET_FIRMWARE_2_1_0, + TargetFirmware_2_2_0 = ATMOSPHERE_TARGET_FIRMWARE_2_2_0, + TargetFirmware_2_3_0 = ATMOSPHERE_TARGET_FIRMWARE_2_3_0, + TargetFirmware_3_0_0 = ATMOSPHERE_TARGET_FIRMWARE_3_0_0, + TargetFirmware_3_0_1 = ATMOSPHERE_TARGET_FIRMWARE_3_0_1, + TargetFirmware_3_0_2 = ATMOSPHERE_TARGET_FIRMWARE_3_0_2, + TargetFirmware_4_0_0 = ATMOSPHERE_TARGET_FIRMWARE_4_0_0, + TargetFirmware_4_0_1 = ATMOSPHERE_TARGET_FIRMWARE_4_0_1, + TargetFirmware_4_1_0 = ATMOSPHERE_TARGET_FIRMWARE_4_1_0, + TargetFirmware_5_0_0 = ATMOSPHERE_TARGET_FIRMWARE_5_0_0, + TargetFirmware_5_0_1 = ATMOSPHERE_TARGET_FIRMWARE_5_0_1, + TargetFirmware_5_0_2 = ATMOSPHERE_TARGET_FIRMWARE_5_0_2, + TargetFirmware_5_1_0 = ATMOSPHERE_TARGET_FIRMWARE_5_1_0, + TargetFirmware_6_0_0 = ATMOSPHERE_TARGET_FIRMWARE_6_0_0, + TargetFirmware_6_0_1 = ATMOSPHERE_TARGET_FIRMWARE_6_0_1, + TargetFirmware_6_1_0 = ATMOSPHERE_TARGET_FIRMWARE_6_1_0, + TargetFirmware_6_2_0 = ATMOSPHERE_TARGET_FIRMWARE_6_2_0, + TargetFirmware_7_0_0 = ATMOSPHERE_TARGET_FIRMWARE_7_0_0, + TargetFirmware_7_0_1 = ATMOSPHERE_TARGET_FIRMWARE_7_0_1, + TargetFirmware_8_0_0 = ATMOSPHERE_TARGET_FIRMWARE_8_0_0, + TargetFirmware_8_0_1 = ATMOSPHERE_TARGET_FIRMWARE_8_0_1, + TargetFirmware_8_1_0 = ATMOSPHERE_TARGET_FIRMWARE_8_1_0, + TargetFirmware_8_1_1 = ATMOSPHERE_TARGET_FIRMWARE_8_1_1, + TargetFirmware_9_0_0 = ATMOSPHERE_TARGET_FIRMWARE_9_0_0, + TargetFirmware_9_0_1 = ATMOSPHERE_TARGET_FIRMWARE_9_0_1, + TargetFirmware_9_1_0 = ATMOSPHERE_TARGET_FIRMWARE_9_1_0, + TargetFirmware_9_2_0 = ATMOSPHERE_TARGET_FIRMWARE_9_2_0, + TargetFirmware_10_0_0 = ATMOSPHERE_TARGET_FIRMWARE_10_0_0, + TargetFirmware_10_0_1 = ATMOSPHERE_TARGET_FIRMWARE_10_0_1, + TargetFirmware_10_0_2 = ATMOSPHERE_TARGET_FIRMWARE_10_0_2, + + TargetFirmware_Current = ATMOSPHERE_TARGET_FIRMWARE_CURRENT, + + TargetFirmware_Max = ATMOSPHERE_TARGET_FIRMWARE_MAX, + }; + static_assert(TargetFirmware_Current <= TargetFirmware_Max); + +} + +#endif