summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_page_table.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/k_page_table.cpp')
-rw-r--r--src/core/hle/kernel/k_page_table.cpp147
1 files changed, 73 insertions, 74 deletions
diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp
index 0b0cef984..4d564a04f 100644
--- a/src/core/hle/kernel/k_page_table.cpp
+++ b/src/core/hle/kernel/k_page_table.cpp
@@ -2379,8 +2379,7 @@ Result KPageTable::MapPageGroup(KProcessAddress* out_addr, const KPageGroup& pg,
KScopedPageTableUpdater updater(this);
// Perform mapping operation.
- const KPageProperties properties = {perm, state == KMemoryState::Io, false,
- DisableMergeAttribute::DisableHead};
+ const KPageProperties properties = {perm, false, false, DisableMergeAttribute::DisableHead};
R_TRY(this->MapPageGroupImpl(updater.GetPageList(), addr, pg, properties, false));
// Update the blocks.
@@ -2422,8 +2421,7 @@ Result KPageTable::MapPageGroup(KProcessAddress addr, const KPageGroup& pg, KMem
KScopedPageTableUpdater updater(this);
// Perform mapping operation.
- const KPageProperties properties = {perm, state == KMemoryState::Io, false,
- DisableMergeAttribute::DisableHead};
+ const KPageProperties properties = {perm, false, false, DisableMergeAttribute::DisableHead};
R_TRY(this->MapPageGroupImpl(updater.GetPageList(), addr, pg, properties, false));
// Update the blocks.
@@ -2863,7 +2861,8 @@ Result KPageTable::LockForMapDeviceAddressSpace(bool* out_is_io, KProcessAddress
&KMemoryBlock::ShareToDevice, KMemoryPermission::None);
// Set whether the locked memory was io.
- *out_is_io = old_state == KMemoryState::Io;
+ *out_is_io =
+ static_cast<Svc::MemoryState>(old_state & KMemoryState::Mask) == Svc::MemoryState::Io;
R_SUCCEED();
}
@@ -3106,79 +3105,79 @@ void KPageTable::FinalizeUpdate(PageLinkedList* page_list) {
}
}
-KProcessAddress KPageTable::GetRegionAddress(KMemoryState state) const {
+KProcessAddress KPageTable::GetRegionAddress(Svc::MemoryState state) const {
switch (state) {
- case KMemoryState::Free:
- case KMemoryState::Kernel:
+ case Svc::MemoryState::Free:
+ case Svc::MemoryState::Kernel:
return m_address_space_start;
- case KMemoryState::Normal:
+ case Svc::MemoryState::Normal:
return m_heap_region_start;
- case KMemoryState::Ipc:
- case KMemoryState::NonSecureIpc:
- case KMemoryState::NonDeviceIpc:
+ case Svc::MemoryState::Ipc:
+ case Svc::MemoryState::NonSecureIpc:
+ case Svc::MemoryState::NonDeviceIpc:
return m_alias_region_start;
- case KMemoryState::Stack:
+ case Svc::MemoryState::Stack:
return m_stack_region_start;
- case KMemoryState::Static:
- case KMemoryState::ThreadLocal:
+ case Svc::MemoryState::Static:
+ case Svc::MemoryState::ThreadLocal:
return m_kernel_map_region_start;
- case KMemoryState::Io:
- case KMemoryState::Shared:
- case KMemoryState::AliasCode:
- case KMemoryState::AliasCodeData:
- case KMemoryState::Transfered:
- case KMemoryState::SharedTransfered:
- case KMemoryState::SharedCode:
- case KMemoryState::GeneratedCode:
- case KMemoryState::CodeOut:
- case KMemoryState::Coverage:
- case KMemoryState::Insecure:
+ case Svc::MemoryState::Io:
+ case Svc::MemoryState::Shared:
+ case Svc::MemoryState::AliasCode:
+ case Svc::MemoryState::AliasCodeData:
+ case Svc::MemoryState::Transfered:
+ case Svc::MemoryState::SharedTransfered:
+ case Svc::MemoryState::SharedCode:
+ case Svc::MemoryState::GeneratedCode:
+ case Svc::MemoryState::CodeOut:
+ case Svc::MemoryState::Coverage:
+ case Svc::MemoryState::Insecure:
return m_alias_code_region_start;
- case KMemoryState::Code:
- case KMemoryState::CodeData:
+ case Svc::MemoryState::Code:
+ case Svc::MemoryState::CodeData:
return m_code_region_start;
default:
UNREACHABLE();
}
}
-size_t KPageTable::GetRegionSize(KMemoryState state) const {
+size_t KPageTable::GetRegionSize(Svc::MemoryState state) const {
switch (state) {
- case KMemoryState::Free:
- case KMemoryState::Kernel:
+ case Svc::MemoryState::Free:
+ case Svc::MemoryState::Kernel:
return m_address_space_end - m_address_space_start;
- case KMemoryState::Normal:
+ case Svc::MemoryState::Normal:
return m_heap_region_end - m_heap_region_start;
- case KMemoryState::Ipc:
- case KMemoryState::NonSecureIpc:
- case KMemoryState::NonDeviceIpc:
+ case Svc::MemoryState::Ipc:
+ case Svc::MemoryState::NonSecureIpc:
+ case Svc::MemoryState::NonDeviceIpc:
return m_alias_region_end - m_alias_region_start;
- case KMemoryState::Stack:
+ case Svc::MemoryState::Stack:
return m_stack_region_end - m_stack_region_start;
- case KMemoryState::Static:
- case KMemoryState::ThreadLocal:
+ case Svc::MemoryState::Static:
+ case Svc::MemoryState::ThreadLocal:
return m_kernel_map_region_end - m_kernel_map_region_start;
- case KMemoryState::Io:
- case KMemoryState::Shared:
- case KMemoryState::AliasCode:
- case KMemoryState::AliasCodeData:
- case KMemoryState::Transfered:
- case KMemoryState::SharedTransfered:
- case KMemoryState::SharedCode:
- case KMemoryState::GeneratedCode:
- case KMemoryState::CodeOut:
- case KMemoryState::Coverage:
- case KMemoryState::Insecure:
+ case Svc::MemoryState::Io:
+ case Svc::MemoryState::Shared:
+ case Svc::MemoryState::AliasCode:
+ case Svc::MemoryState::AliasCodeData:
+ case Svc::MemoryState::Transfered:
+ case Svc::MemoryState::SharedTransfered:
+ case Svc::MemoryState::SharedCode:
+ case Svc::MemoryState::GeneratedCode:
+ case Svc::MemoryState::CodeOut:
+ case Svc::MemoryState::Coverage:
+ case Svc::MemoryState::Insecure:
return m_alias_code_region_end - m_alias_code_region_start;
- case KMemoryState::Code:
- case KMemoryState::CodeData:
+ case Svc::MemoryState::Code:
+ case Svc::MemoryState::CodeData:
return m_code_region_end - m_code_region_start;
default:
UNREACHABLE();
}
}
-bool KPageTable::CanContain(KProcessAddress addr, size_t size, KMemoryState state) const {
+bool KPageTable::CanContain(KProcessAddress addr, size_t size, Svc::MemoryState state) const {
const KProcessAddress end = addr + size;
const KProcessAddress last = end - 1;
@@ -3192,32 +3191,32 @@ bool KPageTable::CanContain(KProcessAddress addr, size_t size, KMemoryState stat
const bool is_in_alias = !(end <= m_alias_region_start || m_alias_region_end <= addr ||
m_alias_region_start == m_alias_region_end);
switch (state) {
- case KMemoryState::Free:
- case KMemoryState::Kernel:
+ case Svc::MemoryState::Free:
+ case Svc::MemoryState::Kernel:
return is_in_region;
- case KMemoryState::Io:
- case KMemoryState::Static:
- case KMemoryState::Code:
- case KMemoryState::CodeData:
- case KMemoryState::Shared:
- case KMemoryState::AliasCode:
- case KMemoryState::AliasCodeData:
- case KMemoryState::Stack:
- case KMemoryState::ThreadLocal:
- case KMemoryState::Transfered:
- case KMemoryState::SharedTransfered:
- case KMemoryState::SharedCode:
- case KMemoryState::GeneratedCode:
- case KMemoryState::CodeOut:
- case KMemoryState::Coverage:
- case KMemoryState::Insecure:
+ case Svc::MemoryState::Io:
+ case Svc::MemoryState::Static:
+ case Svc::MemoryState::Code:
+ case Svc::MemoryState::CodeData:
+ case Svc::MemoryState::Shared:
+ case Svc::MemoryState::AliasCode:
+ case Svc::MemoryState::AliasCodeData:
+ case Svc::MemoryState::Stack:
+ case Svc::MemoryState::ThreadLocal:
+ case Svc::MemoryState::Transfered:
+ case Svc::MemoryState::SharedTransfered:
+ case Svc::MemoryState::SharedCode:
+ case Svc::MemoryState::GeneratedCode:
+ case Svc::MemoryState::CodeOut:
+ case Svc::MemoryState::Coverage:
+ case Svc::MemoryState::Insecure:
return is_in_region && !is_in_heap && !is_in_alias;
- case KMemoryState::Normal:
+ case Svc::MemoryState::Normal:
ASSERT(is_in_heap);
return is_in_region && !is_in_alias;
- case KMemoryState::Ipc:
- case KMemoryState::NonSecureIpc:
- case KMemoryState::NonDeviceIpc:
+ case Svc::MemoryState::Ipc:
+ case Svc::MemoryState::NonSecureIpc:
+ case Svc::MemoryState::NonDeviceIpc:
ASSERT(is_in_alias);
return is_in_region && !is_in_heap;
default: