From 0c75913bf25f89db715c20fdf65dd6d9d13f7e88 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sat, 26 Mar 2022 01:46:41 -0700 Subject: hle: kernel: k_page_table: Implement LockMemoryAndOpen & UnlockMemory. --- src/core/hle/kernel/k_page_table.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/core/hle/kernel/k_page_table.h') diff --git a/src/core/hle/kernel/k_page_table.h b/src/core/hle/kernel/k_page_table.h index b61a39145..bfabdf38c 100644 --- a/src/core/hle/kernel/k_page_table.h +++ b/src/core/hle/kernel/k_page_table.h @@ -164,6 +164,17 @@ private: attr_mask, attr, ignore_attr); } + ResultCode LockMemoryAndOpen(KPageLinkedList* out_pg, PAddr* out_paddr, VAddr addr, size_t size, + KMemoryState state_mask, KMemoryState state, + KMemoryPermission perm_mask, KMemoryPermission perm, + KMemoryAttribute attr_mask, KMemoryAttribute attr, + KMemoryPermission new_perm, KMemoryAttribute lock_attr); + ResultCode UnlockMemory(VAddr addr, size_t size, KMemoryState state_mask, KMemoryState state, + KMemoryPermission perm_mask, KMemoryPermission perm, + KMemoryAttribute attr_mask, KMemoryAttribute attr, + KMemoryPermission new_perm, KMemoryAttribute lock_attr, + const KPageLinkedList* pg); + ResultCode MakePageGroup(KPageLinkedList& pg, VAddr addr, size_t num_pages); bool IsLockedByCurrentThread() const { @@ -176,6 +187,14 @@ private: return layout.IsHeapPhysicalAddress(cached_physical_heap_region, phys_addr); } + bool GetPhysicalAddressLocked(PAddr* out, VAddr virt_addr) const { + ASSERT(this->IsLockedByCurrentThread()); + + *out = GetPhysicalAddr(virt_addr); + + return *out != 0; + } + mutable KLightLock general_lock; mutable KLightLock map_physical_memory_lock; -- cgit v1.2.3