|
|
@@ -0,0 +1,73 @@
|
|
|
+// Copyright 2020 yuzu Emulator Project
|
|
|
+// Licensed under GPLv2 or any later version
|
|
|
+// Refer to the license.txt file included.
|
|
|
+
|
|
|
+#pragma once
|
|
|
+
|
|
|
+#include "common/common_types.h"
|
|
|
+
|
|
|
+namespace Kernel::Memory {
|
|
|
+
|
|
|
+class MemoryRegion final {
|
|
|
+ friend class MemoryLayout;
|
|
|
+
|
|
|
+public:
|
|
|
+ constexpr PAddr StartAddress() const {
|
|
|
+ return start_address;
|
|
|
+ }
|
|
|
+
|
|
|
+ constexpr PAddr EndAddress() const {
|
|
|
+ return end_address;
|
|
|
+ }
|
|
|
+
|
|
|
+private:
|
|
|
+ constexpr MemoryRegion() = default;
|
|
|
+ constexpr MemoryRegion(PAddr start_address, PAddr end_address)
|
|
|
+ : start_address{start_address}, end_address{end_address} {}
|
|
|
+
|
|
|
+ const PAddr start_address{};
|
|
|
+ const PAddr end_address{};
|
|
|
+};
|
|
|
+
|
|
|
+class MemoryLayout final {
|
|
|
+public:
|
|
|
+ constexpr const MemoryRegion& Application() const {
|
|
|
+ return application;
|
|
|
+ }
|
|
|
+
|
|
|
+ constexpr const MemoryRegion& Applet() const {
|
|
|
+ return applet;
|
|
|
+ }
|
|
|
+
|
|
|
+ constexpr const MemoryRegion& System() const {
|
|
|
+ return system;
|
|
|
+ }
|
|
|
+
|
|
|
+ static constexpr MemoryLayout GetDefaultLayout() {
|
|
|
+ constexpr std::size_t application_size{0xcd500000};
|
|
|
+ constexpr std::size_t applet_size{0x1fb00000};
|
|
|
+ constexpr PAddr application_start_address{Core::DramMemoryMap::End - application_size};
|
|
|
+ constexpr PAddr application_end_address{Core::DramMemoryMap::End};
|
|
|
+ constexpr PAddr applet_start_address{application_start_address - applet_size};
|
|
|
+ constexpr PAddr applet_end_address{applet_start_address + applet_size};
|
|
|
+ constexpr PAddr system_start_address{Core::DramMemoryMap::SlabHeapEnd};
|
|
|
+ constexpr PAddr system_end_address{applet_start_address};
|
|
|
+ return {application_start_address, application_end_address, applet_start_address,
|
|
|
+ applet_end_address, system_start_address, system_end_address};
|
|
|
+ }
|
|
|
+
|
|
|
+private:
|
|
|
+ constexpr MemoryLayout(PAddr application_start_address, std::size_t application_size,
|
|
|
+ PAddr applet_start_address, std::size_t applet_size,
|
|
|
+ PAddr system_start_address, std::size_t system_size)
|
|
|
+ : application{application_start_address, application_size},
|
|
|
+ applet{applet_start_address, applet_size}, system{system_start_address, system_size} {}
|
|
|
+
|
|
|
+ const MemoryRegion application;
|
|
|
+ const MemoryRegion applet;
|
|
|
+ const MemoryRegion system;
|
|
|
+
|
|
|
+ const PAddr start_address{};
|
|
|
+};
|
|
|
+
|
|
|
+} // namespace Kernel::Memory
|