ams-1.0.0: meso no longer optional, remove conditional logic

This commit is contained in:
Michael Scire 2021-09-05 10:08:30 -07:00 committed by SciresM
parent 320f0bbcfd
commit da208f8001
10 changed files with 19 additions and 53 deletions

View file

@ -74,9 +74,6 @@ namespace ams {
ams_ctx.pc = ctx->pc.x; ams_ctx.pc = ctx->pc.x;
ams_ctx.pstate = ctx->pstate; ams_ctx.pstate = ctx->pstate;
ams_ctx.afsr0 = static_cast<u32>(::ams::exosphere::GetVersion(ATMOSPHERE_RELEASE_VERSION)); ams_ctx.afsr0 = static_cast<u32>(::ams::exosphere::GetVersion(ATMOSPHERE_RELEASE_VERSION));
if (svc::IsKernelMesosphere()) {
ams_ctx.afsr0 |= (static_cast<u32>('M') << (BITSIZEOF(u32) - BITSIZEOF(u8)));
}
ams_ctx.afsr1 = static_cast<u32>(hos::GetVersion()); ams_ctx.afsr1 = static_cast<u32>(hos::GetVersion());
ams_ctx.far = ctx->far.x; ams_ctx.far = ctx->far.x;
ams_ctx.report_identifier = armGetSystemTick(); ams_ctx.report_identifier = armGetSystemTick();

View file

@ -462,7 +462,7 @@ namespace ams::boot2 {
DetectAndDeclareFutureMitms(); DetectAndDeclareFutureMitms();
/* Device whether to launch tma or htc. */ /* Device whether to launch tma or htc. */
if (svc::IsKernelMesosphere() && IsHtcEnabled()) { if (IsHtcEnabled()) {
LaunchProgram(nullptr, ncm::ProgramLocation::Make(ncm::SystemProgramId::Htc, ncm::StorageId::None), 0); LaunchProgram(nullptr, ncm::ProgramLocation::Make(ncm::SystemProgramId::Htc, ncm::StorageId::None), 0);
LaunchProgram(nullptr, ncm::ProgramLocation::Make(ncm::SystemProgramId::Cs, ncm::StorageId::None), 0); LaunchProgram(nullptr, ncm::ProgramLocation::Make(ncm::SystemProgramId::Cs, ncm::StorageId::None), 0);
} else { } else {

View file

@ -219,10 +219,8 @@ namespace ams::erpt::srv {
} }
void SubmitResourceLimitContexts() { void SubmitResourceLimitContexts() {
if (hos::GetVersion() >= hos::Version_11_0_0 || svc::IsKernelMesosphere()) { SubmitResourceLimitLimitContext();
SubmitResourceLimitLimitContext(); SubmitResourceLimitPeakContext();
SubmitResourceLimitPeakContext();
}
} }
Result ValidateCreateReportContext(const ContextEntry *ctx) { Result ValidateCreateReportContext(const ContextEntry *ctx) {

View file

@ -40,6 +40,9 @@ namespace ams::hos {
/* Initialize hos::Version API. */ /* Initialize hos::Version API. */
hos::SetVersionForLibnxInternal(); hos::SetVersionForLibnxInternal();
/* Check that we're running under mesosphere. */
AMS_ABORT_UNLESS(svc::IsKernelMesosphere());
} }
void InitializeForStratosphereDebug(hos::Version debug_version) { void InitializeForStratosphereDebug(hos::Version debug_version) {
@ -48,6 +51,9 @@ namespace ams::hos {
/* Initialize hos::Version API. */ /* Initialize hos::Version API. */
hos::SetVersionForLibnxInternalDebug(debug_version); hos::SetVersionForLibnxInternalDebug(debug_version);
/* Check that we're running under mesosphere. */
AMS_ABORT_UNLESS(svc::IsKernelMesosphere());
} }
} }

View file

@ -56,27 +56,11 @@ namespace ams::os::impl {
} }
static u64 GetAslrSpaceBeginAddress() { static u64 GetAslrSpaceBeginAddress() {
if (hos::GetVersion() >= hos::Version_2_0_0 || svc::IsKernelMesosphere()) { return GetAslrInfo(svc::InfoType_AslrRegionAddress);
return GetAslrInfo(svc::InfoType_AslrRegionAddress);
} else {
if (GetHeapSpaceBeginAddress() < AslrBase64BitDeprecated || GetAliasSpaceBeginAddress() < AslrBase64BitDeprecated) {
return AslrBase32Bit;
} else {
return AslrBase64BitDeprecated;
}
}
} }
static u64 GetAslrSpaceEndAddress() { static u64 GetAslrSpaceEndAddress() {
if (hos::GetVersion() >= hos::Version_2_0_0 || svc::IsKernelMesosphere()) { return GetAslrInfo(svc::InfoType_AslrRegionAddress) + GetAslrInfo(svc::InfoType_AslrRegionSize);
return GetAslrInfo(svc::InfoType_AslrRegionAddress) + GetAslrInfo(svc::InfoType_AslrRegionSize);
} else {
if (GetHeapSpaceBeginAddress() < AslrBase64BitDeprecated || GetAliasSpaceBeginAddress() < AslrBase64BitDeprecated) {
return AslrBase32Bit + AslrSize32Bit;
} else {
return AslrBase64BitDeprecated + AslrSize64BitDeprecated;
}
}
} }
}; };

View file

@ -56,17 +56,11 @@ namespace ams::mitm::settings {
const auto api_info = exosphere::GetApiInfo(); const auto api_info = exosphere::GetApiInfo();
const char emummc_char = emummc::IsActive() ? 'E' : 'S'; const char emummc_char = emummc::IsActive() ? 'E' : 'S';
/* NOTE: While Mesosphere is in experimental/opt-in, we will display it as part of the firmware. */
const char mesosphere_char = svc::IsKernelMesosphere() ? 'M' : '0';
/* TODO: Remove separate display for mesosphere vs not mesosphere in Atmosphere 1.0.0. */
AMS_ABORT_UNLESS(api_info.GetMajorVersion() == 0);
/* NOTE: We have carefully accounted for the size of the string we print. */ /* NOTE: We have carefully accounted for the size of the string we print. */
/* No truncation occurs assuming two-digits for all version number components. */ /* No truncation occurs assuming two-digits for all version number components. */
char display_version[sizeof(g_ams_firmware_version.display_version)]; char display_version[sizeof(g_ams_firmware_version.display_version)];
util::SNPrintf(display_version, sizeof(display_version), "%s|AMS %c.%u.%u|%c", g_ams_firmware_version.display_version, mesosphere_char, api_info.GetMinorVersion(), api_info.GetMicroVersion(), emummc_char); util::SNPrintf(display_version, sizeof(display_version), "%s|AMS %u.%u.%u|%c", g_ams_firmware_version.display_version, api_info.GetMajorVersion(), api_info.GetMinorVersion(), api_info.GetMicroVersion(), emummc_char);
std::memcpy(g_ams_firmware_version.display_version, display_version, sizeof(display_version)); std::memcpy(g_ams_firmware_version.display_version, display_version, sizeof(display_version));
} }

View file

@ -358,10 +358,7 @@ namespace ams::creport {
} }
void CrashReport::SaveToFile(ScopedFile &file) { void CrashReport::SaveToFile(ScopedFile &file) {
file.WriteFormat("Atmosphère Crash Report (v1.5):\n"); file.WriteFormat("Atmosphère Crash Report (v1.6):\n");
/* TODO: Remove in Atmosphere 1.0.0. */
file.WriteFormat("Mesosphere: %s\n", svc::IsKernelMesosphere() ? "Enabled" : "Disabled");
file.WriteFormat("Result: 0x%X (2%03d-%04d)\n\n", this->result.GetValue(), this->result.GetModule(), this->result.GetDescription()); file.WriteFormat("Result: 0x%X (2%03d-%04d)\n\n", this->result.GetValue(), this->result.GetModule(), this->result.GetDescription());

View file

@ -235,7 +235,7 @@ namespace ams::fatal::srv {
font::AddSpacingLines(0.5f); font::AddSpacingLines(0.5f);
/* TODO: Remove Mesosphere identifier in 1.0.0. */ /* TODO: Remove Mesosphere identifier in 1.0.0. */
font::PrintFormatLine("Firmware: %s (Atmosphère%s %u.%u.%u-%s)", config.GetFirmwareVersion().display_version, svc::IsKernelMesosphere() ? " M" : "", ATMOSPHERE_RELEASE_VERSION, ams::GetGitRevision()); font::PrintFormatLine("Firmware: %s (Atmosphère %u.%u.%u-%s)", config.GetFirmwareVersion().display_version, ATMOSPHERE_RELEASE_VERSION, ams::GetGitRevision());
font::AddSpacingLines(1.5f); font::AddSpacingLines(1.5f);
if (!exosphere::ResultVersionMismatch::Includes(this->context->result)) { if (!exosphere::ResultVersionMismatch::Includes(this->context->result)) {
font::Print(config.GetErrorDescription()); font::Print(config.GetErrorDescription());

View file

@ -265,11 +265,7 @@ namespace ams::ldr {
flags |= svc::CreateProcessFlag_AddressSpace32BitWithoutAlias; flags |= svc::CreateProcessFlag_AddressSpace32BitWithoutAlias;
break; break;
case Npdm::AddressSpaceType_64Bit: case Npdm::AddressSpaceType_64Bit:
if (hos::GetVersion() >= hos::Version_2_0_0 || svc::IsKernelMesosphere()) { flags |= svc::CreateProcessFlag_AddressSpace64Bit;
flags |= svc::CreateProcessFlag_AddressSpace64Bit;
} else {
flags |= svc::CreateProcessFlag_AddressSpace64BitDeprecated;
}
break; break;
default: default:
return ResultInvalidMeta(); return ResultInvalidMeta();
@ -326,11 +322,9 @@ namespace ams::ldr {
} }
} }
/* 11.0.0+ Set Disable DAS merge. */ /* 11.0.0+/meso Set Disable DAS merge. */
if (hos::GetVersion() >= hos::Version_11_0_0 || svc::IsKernelMesosphere()) { if (meta_flags & Npdm::MetaFlag_DisableDeviceAddressSpaceMerge) {
if (meta_flags & Npdm::MetaFlag_DisableDeviceAddressSpaceMerge) { flags |= svc::CreateProcessFlag_DisableDeviceAddressSpaceMerge;
flags |= svc::CreateProcessFlag_DisableDeviceAddressSpaceMerge;
}
} }
*out = flags; *out = flags;

View file

@ -171,10 +171,6 @@ namespace ams::pm::resource {
} }
bool IsKTraceEnabled() { bool IsKTraceEnabled() {
if (!svc::IsKernelMesosphere()) {
return false;
}
u64 value = 0; u64 value = 0;
R_ABORT_UNLESS(svc::GetInfo(std::addressof(value), svc::InfoType_MesosphereMeta, INVALID_HANDLE, svc::MesosphereMetaInfo_IsKTraceEnabled)); R_ABORT_UNLESS(svc::GetInfo(std::addressof(value), svc::InfoType_MesosphereMeta, INVALID_HANDLE, svc::MesosphereMetaInfo_IsKTraceEnabled));
@ -248,7 +244,7 @@ namespace ams::pm::resource {
} }
/* Choose and initialize memory arrangement. */ /* Choose and initialize memory arrangement. */
const bool use_dynamic_memory_arrangement = (hos_version >= hos::Version_6_0_0) || (svc::IsKernelMesosphere() && hos_version >= hos::Version_5_0_0); const bool use_dynamic_memory_arrangement = (hos_version >= hos::Version_5_0_0);
if (use_dynamic_memory_arrangement) { if (use_dynamic_memory_arrangement) {
/* 6.0.0 retrieves memory limit information from the kernel, rather than using a hardcoded profile. */ /* 6.0.0 retrieves memory limit information from the kernel, rather than using a hardcoded profile. */
g_memory_arrangement = spl::MemoryArrangement_Dynamic; g_memory_arrangement = spl::MemoryArrangement_Dynamic;