summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/init
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-05-05 06:35:42 +0200
committerbunnei <bunneidev@gmail.com>2021-05-06 01:40:54 +0200
commitb805ee653f3d178ed2b4b2e0a403bb0ab61dad8b (patch)
treefd54235441ff4c2a0986e106bf57c501c2c9982b /src/core/hle/kernel/init
parentfixup! hle: kernel: Migrate KSharedMemory to KAutoObject. (diff)
downloadyuzu-b805ee653f3d178ed2b4b2e0a403bb0ab61dad8b.tar
yuzu-b805ee653f3d178ed2b4b2e0a403bb0ab61dad8b.tar.gz
yuzu-b805ee653f3d178ed2b4b2e0a403bb0ab61dad8b.tar.bz2
yuzu-b805ee653f3d178ed2b4b2e0a403bb0ab61dad8b.tar.lz
yuzu-b805ee653f3d178ed2b4b2e0a403bb0ab61dad8b.tar.xz
yuzu-b805ee653f3d178ed2b4b2e0a403bb0ab61dad8b.tar.zst
yuzu-b805ee653f3d178ed2b4b2e0a403bb0ab61dad8b.zip
Diffstat (limited to 'src/core/hle/kernel/init')
-rw-r--r--src/core/hle/kernel/init/init_slab_setup.cpp54
-rw-r--r--src/core/hle/kernel/init/init_slab_setup.h9
2 files changed, 31 insertions, 32 deletions
diff --git a/src/core/hle/kernel/init/init_slab_setup.cpp b/src/core/hle/kernel/init/init_slab_setup.cpp
index 2dd792e71..69ae405e6 100644
--- a/src/core/hle/kernel/init/init_slab_setup.cpp
+++ b/src/core/hle/kernel/init/init_slab_setup.cpp
@@ -25,7 +25,7 @@
namespace Kernel::Init {
-#define SLAB_COUNT(CLASS) g_slab_resource_counts.num_##CLASS
+#define SLAB_COUNT(CLASS) kernel.SlabResourceCounts().num_##CLASS
#define FOREACH_SLAB_TYPE(HANDLER, ...) \
HANDLER(KProcess, (SLAB_COUNT(KProcess)), ##__VA_ARGS__) \
@@ -67,26 +67,6 @@ constexpr size_t SlabCountKBeta = 6;
constexpr size_t SlabCountExtraKThread = 160;
-// Global to hold our resource counts.
-KSlabResourceCounts g_slab_resource_counts = {
- .num_KProcess = SlabCountKProcess,
- .num_KThread = SlabCountKThread,
- .num_KEvent = SlabCountKEvent,
- .num_KInterruptEvent = SlabCountKInterruptEvent,
- .num_KPort = SlabCountKPort,
- .num_KSharedMemory = SlabCountKSharedMemory,
- .num_KTransferMemory = SlabCountKTransferMemory,
- .num_KCodeMemory = SlabCountKCodeMemory,
- .num_KDeviceAddressSpace = SlabCountKDeviceAddressSpace,
- .num_KSession = SlabCountKSession,
- .num_KLightSession = SlabCountKLightSession,
- .num_KObjectName = SlabCountKObjectName,
- .num_KResourceLimit = SlabCountKResourceLimit,
- .num_KDebug = SlabCountKDebug,
- .num_KAlpha = SlabCountKAlpha,
- .num_KBeta = SlabCountKBeta,
-};
-
template <typename T>
VAddr InitializeSlabHeap(Core::System& system, KMemoryLayout& memory_layout, VAddr address,
size_t num_objects) {
@@ -105,19 +85,35 @@ VAddr InitializeSlabHeap(Core::System& system, KMemoryLayout& memory_layout, VAd
} // namespace
-const KSlabResourceCounts& GetSlabResourceCounts() {
- return g_slab_resource_counts;
+KSlabResourceCounts KSlabResourceCounts::CreateDefault() {
+ return {
+ .num_KProcess = SlabCountKProcess,
+ .num_KThread = SlabCountKThread,
+ .num_KEvent = SlabCountKEvent,
+ .num_KInterruptEvent = SlabCountKInterruptEvent,
+ .num_KPort = SlabCountKPort,
+ .num_KSharedMemory = SlabCountKSharedMemory,
+ .num_KTransferMemory = SlabCountKTransferMemory,
+ .num_KCodeMemory = SlabCountKCodeMemory,
+ .num_KDeviceAddressSpace = SlabCountKDeviceAddressSpace,
+ .num_KSession = SlabCountKSession,
+ .num_KLightSession = SlabCountKLightSession,
+ .num_KObjectName = SlabCountKObjectName,
+ .num_KResourceLimit = SlabCountKResourceLimit,
+ .num_KDebug = SlabCountKDebug,
+ .num_KAlpha = SlabCountKAlpha,
+ .num_KBeta = SlabCountKBeta,
+ };
}
-void InitializeSlabResourceCounts() {
- // Note: Nintendo initializes all fields here, but we initialize all constants at compile-time.
-
+void InitializeSlabResourceCounts(KernelCore& kernel) {
+ kernel.SlabResourceCounts() = KSlabResourceCounts::CreateDefault();
if (KSystemControl::Init::ShouldIncreaseThreadResourceLimit()) {
- g_slab_resource_counts.num_KThread += SlabCountExtraKThread;
+ kernel.SlabResourceCounts().num_KThread += SlabCountExtraKThread;
}
}
-size_t CalculateTotalSlabHeapSize() {
+size_t CalculateTotalSlabHeapSize(const KernelCore& kernel) {
size_t size = 0;
#define ADD_SLAB_SIZE(NAME, COUNT, ...) \
@@ -138,6 +134,8 @@ size_t CalculateTotalSlabHeapSize() {
}
void InitializeSlabHeaps(Core::System& system, KMemoryLayout& memory_layout) {
+ auto& kernel = system.Kernel();
+
// Get the start of the slab region, since that's where we'll be working.
VAddr address = memory_layout.GetSlabRegionAddress();
diff --git a/src/core/hle/kernel/init/init_slab_setup.h b/src/core/hle/kernel/init/init_slab_setup.h
index 6418b97ac..a8f7e0918 100644
--- a/src/core/hle/kernel/init/init_slab_setup.h
+++ b/src/core/hle/kernel/init/init_slab_setup.h
@@ -9,12 +9,15 @@ class System;
} // namespace Core
namespace Kernel {
+class KernelCore;
class KMemoryLayout;
} // namespace Kernel
namespace Kernel::Init {
struct KSlabResourceCounts {
+ static KSlabResourceCounts CreateDefault();
+
size_t num_KProcess;
size_t num_KThread;
size_t num_KEvent;
@@ -33,10 +36,8 @@ struct KSlabResourceCounts {
size_t num_KBeta;
};
-void InitializeSlabResourceCounts();
-const KSlabResourceCounts& GetSlabResourceCounts();
-
-size_t CalculateTotalSlabHeapSize();
+void InitializeSlabResourceCounts(KernelCore& kernel);
+size_t CalculateTotalSlabHeapSize(const KernelCore& kernel);
void InitializeSlabHeaps(Core::System& system, KMemoryLayout& memory_layout);
} // namespace Kernel::Init