diff options
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 9251f29ad..d57239472 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include "core/hardware_properties.h" | 24 | #include "core/hardware_properties.h" |
| 25 | #include "core/hle/kernel/init/init_slab_setup.h" | 25 | #include "core/hle/kernel/init/init_slab_setup.h" |
| 26 | #include "core/hle/kernel/k_client_port.h" | 26 | #include "core/hle/kernel/k_client_port.h" |
| 27 | #include "core/hle/kernel/k_dynamic_resource_manager.h" | ||
| 27 | #include "core/hle/kernel/k_handle_table.h" | 28 | #include "core/hle/kernel/k_handle_table.h" |
| 28 | #include "core/hle/kernel/k_memory_layout.h" | 29 | #include "core/hle/kernel/k_memory_layout.h" |
| 29 | #include "core/hle/kernel/k_memory_manager.h" | 30 | #include "core/hle/kernel/k_memory_manager.h" |
| @@ -76,6 +77,14 @@ struct KernelCore::Impl { | |||
| 76 | InitializePreemption(kernel); | 77 | InitializePreemption(kernel); |
| 77 | InitializePhysicalCores(); | 78 | InitializePhysicalCores(); |
| 78 | 79 | ||
| 80 | // Initialize the Dynamic Slab Heaps. | ||
| 81 | { | ||
| 82 | const auto& pt_heap_region = memory_layout->GetPageTableHeapRegion(); | ||
| 83 | ASSERT(pt_heap_region.GetEndAddress() != 0); | ||
| 84 | |||
| 85 | InitializeResourceManagers(pt_heap_region.GetAddress(), pt_heap_region.GetSize()); | ||
| 86 | } | ||
| 87 | |||
| 79 | RegisterHostThread(); | 88 | RegisterHostThread(); |
| 80 | } | 89 | } |
| 81 | 90 | ||
| @@ -257,6 +266,18 @@ struct KernelCore::Impl { | |||
| 257 | system.CoreTiming().ScheduleLoopingEvent(time_interval, time_interval, preemption_event); | 266 | system.CoreTiming().ScheduleLoopingEvent(time_interval, time_interval, preemption_event); |
| 258 | } | 267 | } |
| 259 | 268 | ||
| 269 | void InitializeResourceManagers(VAddr address, size_t size) { | ||
| 270 | dynamic_page_manager = std::make_unique<KDynamicPageManager>(); | ||
| 271 | memory_block_heap = std::make_unique<KMemoryBlockSlabHeap>(); | ||
| 272 | app_memory_block_manager = std::make_unique<KMemoryBlockSlabManager>(); | ||
| 273 | |||
| 274 | dynamic_page_manager->Initialize(address, size); | ||
| 275 | static constexpr size_t ApplicationMemoryBlockSlabHeapSize = 20000; | ||
| 276 | memory_block_heap->Initialize(dynamic_page_manager.get(), | ||
| 277 | ApplicationMemoryBlockSlabHeapSize); | ||
| 278 | app_memory_block_manager->Initialize(nullptr, memory_block_heap.get()); | ||
| 279 | } | ||
| 280 | |||
| 260 | void InitializeShutdownThreads() { | 281 | void InitializeShutdownThreads() { |
| 261 | for (u32 core_id = 0; core_id < Core::Hardware::NUM_CPU_CORES; core_id++) { | 282 | for (u32 core_id = 0; core_id < Core::Hardware::NUM_CPU_CORES; core_id++) { |
| 262 | shutdown_threads[core_id] = KThread::Create(system.Kernel()); | 283 | shutdown_threads[core_id] = KThread::Create(system.Kernel()); |
| @@ -770,6 +791,11 @@ struct KernelCore::Impl { | |||
| 770 | // Kernel memory management | 791 | // Kernel memory management |
| 771 | std::unique_ptr<KMemoryManager> memory_manager; | 792 | std::unique_ptr<KMemoryManager> memory_manager; |
| 772 | 793 | ||
| 794 | // Dynamic slab managers | ||
| 795 | std::unique_ptr<KDynamicPageManager> dynamic_page_manager; | ||
| 796 | std::unique_ptr<KMemoryBlockSlabHeap> memory_block_heap; | ||
| 797 | std::unique_ptr<KMemoryBlockSlabManager> app_memory_block_manager; | ||
| 798 | |||
| 773 | // Shared memory for services | 799 | // Shared memory for services |
| 774 | Kernel::KSharedMemory* hid_shared_mem{}; | 800 | Kernel::KSharedMemory* hid_shared_mem{}; |
| 775 | Kernel::KSharedMemory* font_shared_mem{}; | 801 | Kernel::KSharedMemory* font_shared_mem{}; |
| @@ -1041,6 +1067,14 @@ const KMemoryManager& KernelCore::MemoryManager() const { | |||
| 1041 | return *impl->memory_manager; | 1067 | return *impl->memory_manager; |
| 1042 | } | 1068 | } |
| 1043 | 1069 | ||
| 1070 | KMemoryBlockSlabManager& KernelCore::GetApplicationMemoryBlockManager() { | ||
| 1071 | return *impl->app_memory_block_manager; | ||
| 1072 | } | ||
| 1073 | |||
| 1074 | const KMemoryBlockSlabManager& KernelCore::GetApplicationMemoryBlockManager() const { | ||
| 1075 | return *impl->app_memory_block_manager; | ||
| 1076 | } | ||
| 1077 | |||
| 1044 | Kernel::KSharedMemory& KernelCore::GetHidSharedMem() { | 1078 | Kernel::KSharedMemory& KernelCore::GetHidSharedMem() { |
| 1045 | return *impl->hid_shared_mem; | 1079 | return *impl->hid_shared_mem; |
| 1046 | } | 1080 | } |