summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_code_memory.h
diff options
context:
space:
mode:
authoritsmeft24 <rishabh.tumminkatti@gmail.com>2021-12-05 21:04:08 +0100
committeritsmeft24 <rishabh.tumminkatti@gmail.com>2021-12-05 21:04:08 +0100
commit8aef8f39d86affd8fcc9a812d3d597f8eaee90b8 (patch)
treec0249fef800fad1f0ad0b027b85a1801ac41e294 /src/core/hle/kernel/k_code_memory.h
parentMerge pull request #7494 from Morph1984/no-time-to-wait (diff)
downloadyuzu-8aef8f39d86affd8fcc9a812d3d597f8eaee90b8.tar
yuzu-8aef8f39d86affd8fcc9a812d3d597f8eaee90b8.tar.gz
yuzu-8aef8f39d86affd8fcc9a812d3d597f8eaee90b8.tar.bz2
yuzu-8aef8f39d86affd8fcc9a812d3d597f8eaee90b8.tar.lz
yuzu-8aef8f39d86affd8fcc9a812d3d597f8eaee90b8.tar.xz
yuzu-8aef8f39d86affd8fcc9a812d3d597f8eaee90b8.tar.zst
yuzu-8aef8f39d86affd8fcc9a812d3d597f8eaee90b8.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/k_code_memory.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_code_memory.h b/src/core/hle/kernel/k_code_memory.h
new file mode 100644
index 000000000..a7f7d749b
--- /dev/null
+++ b/src/core/hle/kernel/k_code_memory.h
@@ -0,0 +1,76 @@
+#pragma once
+
+#include "core/core.h"
+#include "core/core_timing.h"
+#include "core/hle/kernel/k_client_port.h"
+#include "core/hle/kernel/k_client_session.h"
+#include "core/hle/kernel/k_event.h"
+#include "core/hle/kernel/k_handle_table.h"
+#include "core/hle/kernel/k_memory_block.h"
+#include "core/hle/kernel/k_memory_layout.h"
+#include "core/hle/kernel/k_page_table.h"
+#include "core/hle/kernel/k_process.h"
+#include "core/hle/kernel/k_readable_event.h"
+#include "core/hle/kernel/k_resource_limit.h"
+#include "core/hle/kernel/k_scheduler.h"
+#include "core/hle/kernel/k_scoped_resource_reservation.h"
+#include "core/hle/kernel/k_shared_memory.h"
+#include "core/hle/kernel/k_synchronization_object.h"
+#include "core/hle/kernel/k_thread.h"
+#include "core/hle/kernel/k_transfer_memory.h"
+#include "core/hle/kernel/k_writable_event.h"
+#include "core/hle/kernel/kernel.h"
+#include "core/hle/kernel/physical_core.h"
+#include "core/hle/kernel/svc.h"
+#include "core/hle/kernel/svc_results.h"
+#include "core/hle/kernel/svc_types.h"
+#include "core/hle/kernel/svc_wrap.h"
+#include "core/hle/lock.h"
+#include "core/hle/result.h"
+#include "core/memory.h"
+#include "core/reporter.h"
+
+namespace Kernel {
+
+enum class CodeMemoryOperation : u32 { Map = 0, MapToOwner = 1, Unmap = 2, UnmapFromOwner = 3 };
+
+class KCodeMemory final
+ : public KAutoObjectWithSlabHeapAndContainer<KCodeMemory, KAutoObjectWithList> {
+ KERNEL_AUTOOBJECT_TRAITS(KCodeMemory, KAutoObject);
+
+private:
+ KPageLinkedList m_page_group;
+ KProcess* m_owner;
+ VAddr m_address;
+ KLightLock m_lock;
+ bool m_is_initialized;
+ bool m_is_owner_mapped;
+ bool m_is_mapped;
+
+public:
+ explicit KCodeMemory(KernelCore& kernel_);
+
+ ResultCode Initialize(Core::DeviceMemory& device_memory, VAddr address, size_t size);
+ void Finalize();
+
+ ResultCode Map(VAddr address, size_t size);
+ ResultCode Unmap(VAddr address, size_t size);
+ ResultCode MapToOwner(VAddr address, size_t size, Svc::MemoryPermission perm);
+ ResultCode UnmapFromOwner(VAddr address, size_t size);
+
+ bool IsInitialized() const {
+ return m_is_initialized;
+ }
+ static void PostDestroy([[maybe_unused]] uintptr_t arg) {}
+
+ KProcess* GetOwner() const {
+ return m_owner;
+ }
+ VAddr GetSourceAddress() {
+ return m_address;
+ }
+ size_t GetSize() const {
+ return m_is_initialized ? m_page_group.GetNumPages() * PageSize : 0;
+ }
+};
+} // namespace Kernel \ No newline at end of file