summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_page_table.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2022-03-26 09:46:41 +0100
committerbunnei <bunneidev@gmail.com>2022-03-26 09:46:41 +0100
commit0c75913bf25f89db715c20fdf65dd6d9d13f7e88 (patch)
tree76ddbc9433b62b0c66f82a4e4312dd156a772b42 /src/core/hle/kernel/k_page_table.h
parenthle: kernel: svc: MapProcessMemory: Fix usage of KPageLinkedList to use physical address space. (diff)
downloadyuzu-0c75913bf25f89db715c20fdf65dd6d9d13f7e88.tar
yuzu-0c75913bf25f89db715c20fdf65dd6d9d13f7e88.tar.gz
yuzu-0c75913bf25f89db715c20fdf65dd6d9d13f7e88.tar.bz2
yuzu-0c75913bf25f89db715c20fdf65dd6d9d13f7e88.tar.lz
yuzu-0c75913bf25f89db715c20fdf65dd6d9d13f7e88.tar.xz
yuzu-0c75913bf25f89db715c20fdf65dd6d9d13f7e88.tar.zst
yuzu-0c75913bf25f89db715c20fdf65dd6d9d13f7e88.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/k_page_table.h19
1 files changed, 19 insertions, 0 deletions
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;