diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-27 12:20:28 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-27 12:20:28 -0400 |
| commit | 4441d54b2aa5a3efc2caabed6e40fd40d626d9ae (patch) | |
| tree | 7b5604a736af1544bbd80f0c54a90dd967927716 /src/core/hle/kernel/svc/svc_info.cpp | |
| parent | ad38a7d9f0a370fde7bc616ca191ca7894ede4f5 (diff) | |
kernel: stub Switch 2 svcGetInfo ids 29, 30 and 33
nnosInitialize queries ids 29/30 between the alias (2/3) and ASLR (12/13)
regions and aborts if they fail; report an empty region after the alias
region. VammManager::Initialize (enabled when the system resource size is
non-zero) queries id 33 and passes it to MapPhysicalMemory as a size, so
return 2 MiB. Both are logged as stubs; the real meanings are unknown.
Diffstat (limited to 'src/core/hle/kernel/svc/svc_info.cpp')
| -rw-r--r-- | src/core/hle/kernel/svc/svc_info.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/hle/kernel/svc/svc_info.cpp b/src/core/hle/kernel/svc/svc_info.cpp index 863bb58fa8..aec31ca148 100644 --- a/src/core/hle/kernel/svc/svc_info.cpp +++ b/src/core/hle/kernel/svc/svc_info.cpp @@ -40,6 +40,9 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle case InfoType::UsedNonSystemMemorySize: case InfoType::IsApplication: case InfoType::FreeThreadCount: + case InfoType::Nx2RegionAddress: + case InfoType::Nx2RegionSize: + case InfoType::Nx2VammSize: case InfoType::AliasRegionExtraSize: { R_UNLESS(info_sub_id == 0, ResultInvalidEnumValue); @@ -66,6 +69,22 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle case InfoType::HeapRegionSize: *result = process->GetPageTable().GetHeapRegionSize(); R_SUCCEED(); + case InfoType::Nx2RegionAddress: + // Unknown Switch 2 region; report an empty one just past the alias region. + *result = GetInteger(process->GetPageTable().GetAliasRegionStart()) + + process->GetPageTable().GetAliasRegionSize(); + LOG_WARNING(Kernel_SVC, "(STUBBED) Switch 2 InfoType 29, returning {:#x}", *result); + R_SUCCEED(); + case InfoType::Nx2RegionSize: + LOG_WARNING(Kernel_SVC, "(STUBBED) Switch 2 InfoType 30, returning 0"); + *result = 0; + R_SUCCEED(); + case InfoType::Nx2VammSize: + // Used as the size of VAMM's initial MapPhysicalMemory, so it must be non-zero. + // The real value is unknown; 2 MiB is the smallest size that keeps it block-aligned. + *result = 0x200000; + LOG_WARNING(Kernel_SVC, "(STUBBED) Switch 2 InfoType 33, returning {:#x}", *result); + R_SUCCEED(); case InfoType::AslrRegionAddress: *result = GetInteger(process->GetPageTable().GetAliasCodeRegionStart()); R_SUCCEED(); |
