summaryrefslogtreecommitdiff
path: root/src/core/mem_map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/mem_map.cpp')
-rw-r--r--src/core/mem_map.cpp125
1 files changed, 0 insertions, 125 deletions
diff --git a/src/core/mem_map.cpp b/src/core/mem_map.cpp
deleted file mode 100644
index f6a063825..000000000
--- a/src/core/mem_map.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <map>
6#include <memory>
7#include <utility>
8#include <vector>
9
10#include "common/common_types.h"
11#include "common/logging/log.h"
12
13#include "core/hle/config_mem.h"
14#include "core/hle/kernel/vm_manager.h"
15#include "core/hle/result.h"
16#include "core/hle/shared_page.h"
17#include "core/mem_map.h"
18#include "core/memory.h"
19#include "core/memory_setup.h"
20
21////////////////////////////////////////////////////////////////////////////////////////////////////
22
23namespace Memory {
24
25namespace {
26
27struct MemoryArea {
28 u32 base;
29 u32 size;
30 const char* name;
31};
32
33// We don't declare the IO regions in here since its handled by other means.
34static MemoryArea memory_areas[] = {
35 {SHARED_MEMORY_VADDR, SHARED_MEMORY_SIZE, "Shared Memory"}, // Shared memory
36 {VRAM_VADDR, VRAM_SIZE, "VRAM"}, // Video memory (VRAM)
37 {DSP_RAM_VADDR, DSP_RAM_SIZE, "DSP RAM"}, // DSP memory
38 {TLS_AREA_VADDR, TLS_AREA_SIZE, "TLS Area"}, // TLS memory
39};
40
41/// Represents a block of memory mapped by ControlMemory/MapMemoryBlock
42struct MemoryBlock {
43 MemoryBlock() : handle(0), base_address(0), address(0), size(0), operation(0), permissions(0) {
44 }
45 u32 handle;
46 u32 base_address;
47 u32 address;
48 u32 size;
49 u32 operation;
50 u32 permissions;
51
52 const u32 GetVirtualAddress() const{
53 return base_address + address;
54 }
55};
56
57static std::map<u32, MemoryBlock> heap_map;
58static std::map<u32, MemoryBlock> heap_linear_map;
59
60}
61
62u32 MapBlock_Heap(u32 size, u32 operation, u32 permissions) {
63 MemoryBlock block;
64
65 block.base_address = HEAP_VADDR;
66 block.size = size;
67 block.operation = operation;
68 block.permissions = permissions;
69
70 if (heap_map.size() > 0) {
71 const MemoryBlock last_block = heap_map.rbegin()->second;
72 block.address = last_block.address + last_block.size;
73 }
74 heap_map[block.GetVirtualAddress()] = block;
75
76 return block.GetVirtualAddress();
77}
78
79u32 MapBlock_HeapLinear(u32 size, u32 operation, u32 permissions) {
80 MemoryBlock block;
81
82 block.base_address = LINEAR_HEAP_VADDR;
83 block.size = size;
84 block.operation = operation;
85 block.permissions = permissions;
86
87 if (heap_linear_map.size() > 0) {
88 const MemoryBlock last_block = heap_linear_map.rbegin()->second;
89 block.address = last_block.address + last_block.size;
90 }
91 heap_linear_map[block.GetVirtualAddress()] = block;
92
93 return block.GetVirtualAddress();
94}
95
96void Init() {
97 InitMemoryMap();
98 LOG_DEBUG(HW_Memory, "initialized OK");
99}
100
101void InitLegacyAddressSpace(Kernel::VMManager& address_space) {
102 using namespace Kernel;
103
104 for (MemoryArea& area : memory_areas) {
105 auto block = std::make_shared<std::vector<u8>>(area.size);
106 address_space.MapMemoryBlock(area.base, std::move(block), 0, area.size, MemoryState::Private).Unwrap();
107 }
108
109 auto cfg_mem_vma = address_space.MapBackingMemory(CONFIG_MEMORY_VADDR,
110 (u8*)&ConfigMem::config_mem, CONFIG_MEMORY_SIZE, MemoryState::Shared).MoveFrom();
111 address_space.Reprotect(cfg_mem_vma, VMAPermission::Read);
112
113 auto shared_page_vma = address_space.MapBackingMemory(SHARED_PAGE_VADDR,
114 (u8*)&SharedPage::shared_page, SHARED_PAGE_SIZE, MemoryState::Shared).MoveFrom();
115 address_space.Reprotect(shared_page_vma, VMAPermission::Read);
116}
117
118void Shutdown() {
119 heap_map.clear();
120 heap_linear_map.clear();
121
122 LOG_DEBUG(HW_Memory, "shutdown OK");
123}
124
125} // namespace