diff options
| author | 2019-03-06 15:55:56 -0500 | |
|---|---|---|
| committer | 2019-03-06 15:55:56 -0500 | |
| commit | 75b417489ad3e23f62060933b0fe0f29646bbd04 (patch) | |
| tree | 1b5944f3d09d3383a9c94c3fdaf2cb14c9a9a8cf /src/core/hle/kernel/kernel.cpp | |
| parent | Merge pull request #2201 from lioncash/audio-retval (diff) | |
| parent | kernel/address_arbiter: Pass in system instance to constructor (diff) | |
| download | yuzu-75b417489ad3e23f62060933b0fe0f29646bbd04.tar.gz yuzu-75b417489ad3e23f62060933b0fe0f29646bbd04.tar.xz yuzu-75b417489ad3e23f62060933b0fe0f29646bbd04.zip | |
Merge pull request #2199 from lioncash/arbiter
kernel/address_arbiter: Convert the address arbiter into a class
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index dd749eed4..04ea9349e 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include "core/core.h" | 13 | #include "core/core.h" |
| 14 | #include "core/core_timing.h" | 14 | #include "core/core_timing.h" |
| 15 | #include "core/hle/kernel/address_arbiter.h" | ||
| 15 | #include "core/hle/kernel/client_port.h" | 16 | #include "core/hle/kernel/client_port.h" |
| 16 | #include "core/hle/kernel/handle_table.h" | 17 | #include "core/hle/kernel/handle_table.h" |
| 17 | #include "core/hle/kernel/kernel.h" | 18 | #include "core/hle/kernel/kernel.h" |
| @@ -86,11 +87,13 @@ static void ThreadWakeupCallback(u64 thread_handle, [[maybe_unused]] int cycles_ | |||
| 86 | } | 87 | } |
| 87 | 88 | ||
| 88 | struct KernelCore::Impl { | 89 | struct KernelCore::Impl { |
| 89 | void Initialize(KernelCore& kernel, Core::Timing::CoreTiming& core_timing) { | 90 | explicit Impl(Core::System& system) : address_arbiter{system}, system{system} {} |
| 91 | |||
| 92 | void Initialize(KernelCore& kernel) { | ||
| 90 | Shutdown(); | 93 | Shutdown(); |
| 91 | 94 | ||
| 92 | InitializeSystemResourceLimit(kernel); | 95 | InitializeSystemResourceLimit(kernel); |
| 93 | InitializeThreads(core_timing); | 96 | InitializeThreads(); |
| 94 | } | 97 | } |
| 95 | 98 | ||
| 96 | void Shutdown() { | 99 | void Shutdown() { |
| @@ -122,9 +125,9 @@ struct KernelCore::Impl { | |||
| 122 | ASSERT(system_resource_limit->SetLimitValue(ResourceType::Sessions, 900).IsSuccess()); | 125 | ASSERT(system_resource_limit->SetLimitValue(ResourceType::Sessions, 900).IsSuccess()); |
| 123 | } | 126 | } |
| 124 | 127 | ||
| 125 | void InitializeThreads(Core::Timing::CoreTiming& core_timing) { | 128 | void InitializeThreads() { |
| 126 | thread_wakeup_event_type = | 129 | thread_wakeup_event_type = |
| 127 | core_timing.RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback); | 130 | system.CoreTiming().RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback); |
| 128 | } | 131 | } |
| 129 | 132 | ||
| 130 | std::atomic<u32> next_object_id{0}; | 133 | std::atomic<u32> next_object_id{0}; |
| @@ -135,6 +138,8 @@ struct KernelCore::Impl { | |||
| 135 | std::vector<SharedPtr<Process>> process_list; | 138 | std::vector<SharedPtr<Process>> process_list; |
| 136 | Process* current_process = nullptr; | 139 | Process* current_process = nullptr; |
| 137 | 140 | ||
| 141 | Kernel::AddressArbiter address_arbiter; | ||
| 142 | |||
| 138 | SharedPtr<ResourceLimit> system_resource_limit; | 143 | SharedPtr<ResourceLimit> system_resource_limit; |
| 139 | 144 | ||
| 140 | Core::Timing::EventType* thread_wakeup_event_type = nullptr; | 145 | Core::Timing::EventType* thread_wakeup_event_type = nullptr; |
| @@ -145,15 +150,18 @@ struct KernelCore::Impl { | |||
| 145 | /// Map of named ports managed by the kernel, which can be retrieved using | 150 | /// Map of named ports managed by the kernel, which can be retrieved using |
| 146 | /// the ConnectToPort SVC. | 151 | /// the ConnectToPort SVC. |
| 147 | NamedPortTable named_ports; | 152 | NamedPortTable named_ports; |
| 153 | |||
| 154 | // System context | ||
| 155 | Core::System& system; | ||
| 148 | }; | 156 | }; |
| 149 | 157 | ||
| 150 | KernelCore::KernelCore() : impl{std::make_unique<Impl>()} {} | 158 | KernelCore::KernelCore(Core::System& system) : impl{std::make_unique<Impl>(system)} {} |
| 151 | KernelCore::~KernelCore() { | 159 | KernelCore::~KernelCore() { |
| 152 | Shutdown(); | 160 | Shutdown(); |
| 153 | } | 161 | } |
| 154 | 162 | ||
| 155 | void KernelCore::Initialize(Core::Timing::CoreTiming& core_timing) { | 163 | void KernelCore::Initialize() { |
| 156 | impl->Initialize(*this, core_timing); | 164 | impl->Initialize(*this); |
| 157 | } | 165 | } |
| 158 | 166 | ||
| 159 | void KernelCore::Shutdown() { | 167 | void KernelCore::Shutdown() { |
| @@ -184,6 +192,14 @@ const Process* KernelCore::CurrentProcess() const { | |||
| 184 | return impl->current_process; | 192 | return impl->current_process; |
| 185 | } | 193 | } |
| 186 | 194 | ||
| 195 | AddressArbiter& KernelCore::AddressArbiter() { | ||
| 196 | return impl->address_arbiter; | ||
| 197 | } | ||
| 198 | |||
| 199 | const AddressArbiter& KernelCore::AddressArbiter() const { | ||
| 200 | return impl->address_arbiter; | ||
| 201 | } | ||
| 202 | |||
| 187 | void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) { | 203 | void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) { |
| 188 | impl->named_ports.emplace(std::move(name), std::move(port)); | 204 | impl->named_ports.emplace(std::move(name), std::move(port)); |
| 189 | } | 205 | } |