mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 20:31:14 +00:00
kern: add InfoType_IoRegionHint
This commit is contained in:
parent
48f4c526f3
commit
25383db524
3 changed files with 27 additions and 0 deletions
|
@ -75,6 +75,19 @@ namespace ams::kern {
|
||||||
|
|
||||||
constexpr ALWAYS_INLINE KPhysicalAddress GetAddress() const { return m_physical_address; }
|
constexpr ALWAYS_INLINE KPhysicalAddress GetAddress() const { return m_physical_address; }
|
||||||
constexpr ALWAYS_INLINE size_t GetSize() const { return m_size; }
|
constexpr ALWAYS_INLINE size_t GetSize() const { return m_size; }
|
||||||
|
|
||||||
|
constexpr uintptr_t GetHint() const {
|
||||||
|
/* TODO: Is this architecture specific? */
|
||||||
|
if (m_size >= 2_MB) {
|
||||||
|
return GetInteger(m_physical_address) & (2_MB - 1);
|
||||||
|
} else if (m_size >= 64_KB) {
|
||||||
|
return GetInteger(m_physical_address) & (64_KB - 1);
|
||||||
|
} else if (m_size >= 4_KB) {
|
||||||
|
return GetInteger(m_physical_address) & (4_KB - 1);
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -297,6 +297,19 @@ namespace ams::kern::svc {
|
||||||
*out = GetCurrentProcess().IsPermittedSvc(static_cast<svc::SvcId>(info_subtype));
|
*out = GetCurrentProcess().IsPermittedSvc(static_cast<svc::SvcId>(info_subtype));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ams::svc::InfoType_IoRegionHint:
|
||||||
|
{
|
||||||
|
/* Verify the sub-type is valid. */
|
||||||
|
R_UNLESS(info_subtype == 0, svc::ResultInvalidCombination());
|
||||||
|
|
||||||
|
/* Get the io region from its handle. */
|
||||||
|
KScopedAutoObject io_region = GetCurrentProcess().GetHandleTable().GetObject<KIoRegion>(handle);
|
||||||
|
R_UNLESS(io_region.IsNotNull(), svc::ResultInvalidHandle());
|
||||||
|
|
||||||
|
/* Get the io region's address hint. */
|
||||||
|
*out = io_region->GetHint();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ams::svc::InfoType_MesosphereMeta:
|
case ams::svc::InfoType_MesosphereMeta:
|
||||||
{
|
{
|
||||||
/* Verify the handle is invalid. */
|
/* Verify the handle is invalid. */
|
||||||
|
|
|
@ -188,6 +188,7 @@ namespace ams::svc {
|
||||||
InfoType_FreeThreadCount = 24,
|
InfoType_FreeThreadCount = 24,
|
||||||
InfoType_ThreadTickCount = 25,
|
InfoType_ThreadTickCount = 25,
|
||||||
InfoType_IsSvcPermitted = 26,
|
InfoType_IsSvcPermitted = 26,
|
||||||
|
InfoType_IoRegionHint = 27,
|
||||||
|
|
||||||
InfoType_MesosphereMeta = 65000,
|
InfoType_MesosphereMeta = 65000,
|
||||||
InfoType_MesosphereCurrentProcess = 65001,
|
InfoType_MesosphereCurrentProcess = 65001,
|
||||||
|
|
Loading…
Reference in a new issue