diff options
| author | bunnei <bunneidev@gmail.com> | 2022-03-26 01:46:41 -0700 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2022-03-26 01:46:41 -0700 |
| commit | 0c75913bf25f89db715c20fdf65dd6d9d13f7e88 (patch) | |
| tree | 76ddbc9433b62b0c66f82a4e4312dd156a772b42 /src/core/hle/kernel/k_page_table.h | |
| parent | 1b3dba329aaf4bcaecefb8edde504f5087727689 (diff) | |
hle: kernel: k_page_table: Implement LockMemoryAndOpen & UnlockMemory.
Diffstat (limited to 'src/core/hle/kernel/k_page_table.h')
| -rw-r--r-- | src/core/hle/kernel/k_page_table.h | 19 |
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; |
