summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
diff options
context:
space:
mode:
authorGravatar bunnei2020-04-08 17:11:25 -0400
committerGravatar bunnei2020-04-17 00:59:31 -0400
commitcfae8a1c1a6f26907cef94c0485a1b7027373040 (patch)
treec49df22189eecb3bb9a350ad0b74b53d4838542d /src/core/hle/kernel
parentkernel: memory: Add MemoryManager class, to manage page heaps. (diff)
downloadyuzu-cfae8a1c1a6f26907cef94c0485a1b7027373040.tar.gz
yuzu-cfae8a1c1a6f26907cef94c0485a1b7027373040.tar.xz
yuzu-cfae8a1c1a6f26907cef94c0485a1b7027373040.zip
kernel: memory: Add MemoryLayout class, to build physical memory layout.
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r--src/core/hle/kernel/memory/memory_layout.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/core/hle/kernel/memory/memory_layout.h b/src/core/hle/kernel/memory/memory_layout.h
new file mode 100644
index 000000000..830c6f0d7
--- /dev/null
+++ b/src/core/hle/kernel/memory/memory_layout.h
@@ -0,0 +1,73 @@
1// Copyright 2020 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "common/common_types.h"
8
9namespace Kernel::Memory {
10
11class MemoryRegion final {
12 friend class MemoryLayout;
13
14public:
15 constexpr PAddr StartAddress() const {
16 return start_address;
17 }
18
19 constexpr PAddr EndAddress() const {
20 return end_address;
21 }
22
23private:
24 constexpr MemoryRegion() = default;
25 constexpr MemoryRegion(PAddr start_address, PAddr end_address)
26 : start_address{start_address}, end_address{end_address} {}
27
28 const PAddr start_address{};
29 const PAddr end_address{};
30};
31
32class MemoryLayout final {
33public:
34 constexpr const MemoryRegion& Application() const {
35 return application;
36 }
37
38 constexpr const MemoryRegion& Applet() const {
39 return applet;
40 }
41
42 constexpr const MemoryRegion& System() const {
43 return system;
44 }
45
46 static constexpr MemoryLayout GetDefaultLayout() {
47 constexpr std::size_t application_size{0xcd500000};
48 constexpr std::size_t applet_size{0x1fb00000};
49 constexpr PAddr application_start_address{Core::DramMemoryMap::End - application_size};
50 constexpr PAddr application_end_address{Core::DramMemoryMap::End};
51 constexpr PAddr applet_start_address{application_start_address - applet_size};
52 constexpr PAddr applet_end_address{applet_start_address + applet_size};
53 constexpr PAddr system_start_address{Core::DramMemoryMap::SlabHeapEnd};
54 constexpr PAddr system_end_address{applet_start_address};
55 return {application_start_address, application_end_address, applet_start_address,
56 applet_end_address, system_start_address, system_end_address};
57 }
58
59private:
60 constexpr MemoryLayout(PAddr application_start_address, std::size_t application_size,
61 PAddr applet_start_address, std::size_t applet_size,
62 PAddr system_start_address, std::size_t system_size)
63 : application{application_start_address, application_size},
64 applet{applet_start_address, applet_size}, system{system_start_address, system_size} {}
65
66 const MemoryRegion application;
67 const MemoryRegion applet;
68 const MemoryRegion system;
69
70 const PAddr start_address{};
71};
72
73} // namespace Kernel::Memory