summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/core.cpp11
-rw-r--r--src/core/core.h5
-rw-r--r--src/core/hle/kernel/kernel.cpp14
-rw-r--r--src/core/hle/kernel/kernel.h9
4 files changed, 34 insertions, 5 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp
index bf39ad689..713ee17c1 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -136,7 +136,7 @@ struct System::Impl {
136 if (virtual_filesystem == nullptr) 136 if (virtual_filesystem == nullptr)
137 virtual_filesystem = std::make_shared<FileSys::RealVfsFilesystem>(); 137 virtual_filesystem = std::make_shared<FileSys::RealVfsFilesystem>();
138 138
139 current_process = Kernel::Process::Create(kernel, "main"); 139 kernel.MakeCurrentProcess(Kernel::Process::Create(kernel, "main"));
140 140
141 cpu_barrier = std::make_shared<CpuBarrier>(); 141 cpu_barrier = std::make_shared<CpuBarrier>();
142 cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size()); 142 cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size());
@@ -202,7 +202,7 @@ struct System::Impl {
202 return init_result; 202 return init_result;
203 } 203 }
204 204
205 const Loader::ResultStatus load_result{app_loader->Load(current_process)}; 205 const Loader::ResultStatus load_result{app_loader->Load(kernel.CurrentProcess())};
206 if (load_result != Loader::ResultStatus::Success) { 206 if (load_result != Loader::ResultStatus::Success) {
207 LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result)); 207 LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result));
208 Shutdown(); 208 Shutdown();
@@ -281,7 +281,6 @@ struct System::Impl {
281 std::unique_ptr<VideoCore::RendererBase> renderer; 281 std::unique_ptr<VideoCore::RendererBase> renderer;
282 std::unique_ptr<Tegra::GPU> gpu_core; 282 std::unique_ptr<Tegra::GPU> gpu_core;
283 std::shared_ptr<Tegra::DebugContext> debug_context; 283 std::shared_ptr<Tegra::DebugContext> debug_context;
284 Kernel::SharedPtr<Kernel::Process> current_process;
285 std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor; 284 std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor;
286 std::shared_ptr<CpuBarrier> cpu_barrier; 285 std::shared_ptr<CpuBarrier> cpu_barrier;
287 std::array<std::shared_ptr<Cpu>, NUM_CPU_CORES> cpu_cores; 286 std::array<std::shared_ptr<Cpu>, NUM_CPU_CORES> cpu_cores;
@@ -363,7 +362,11 @@ const std::shared_ptr<Kernel::Scheduler>& System::Scheduler(size_t core_index) {
363} 362}
364 363
365Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() { 364Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() {
366 return impl->current_process; 365 return impl->kernel.CurrentProcess();
366}
367
368const Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() const {
369 return impl->kernel.CurrentProcess();
367} 370}
368 371
369ARM_Interface& System::ArmInterface(size_t core_index) { 372ARM_Interface& System::ArmInterface(size_t core_index) {
diff --git a/src/core/core.h b/src/core/core.h
index 5c3c0e2a1..ab3663427 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -174,9 +174,12 @@ public:
174 /// Gets the scheduler for the CPU core with the specified index 174 /// Gets the scheduler for the CPU core with the specified index
175 const std::shared_ptr<Kernel::Scheduler>& Scheduler(size_t core_index); 175 const std::shared_ptr<Kernel::Scheduler>& Scheduler(size_t core_index);
176 176
177 /// Gets the current process 177 /// Provides a reference to the current process
178 Kernel::SharedPtr<Kernel::Process>& CurrentProcess(); 178 Kernel::SharedPtr<Kernel::Process>& CurrentProcess();
179 179
180 /// Provides a constant reference to the current process.
181 const Kernel::SharedPtr<Kernel::Process>& CurrentProcess() const;
182
180 /// Provides a reference to the kernel instance. 183 /// Provides a reference to the kernel instance.
181 Kernel::KernelCore& Kernel(); 184 Kernel::KernelCore& Kernel();
182 185
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 7902c2882..3e0800a71 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -116,6 +116,7 @@ struct KernelCore::Impl {
116 next_thread_id = 1; 116 next_thread_id = 1;
117 117
118 process_list.clear(); 118 process_list.clear();
119 current_process.reset();
119 120
120 handle_table.Clear(); 121 handle_table.Clear();
121 resource_limits.fill(nullptr); 122 resource_limits.fill(nullptr);
@@ -206,6 +207,7 @@ struct KernelCore::Impl {
206 207
207 // Lists all processes that exist in the current session. 208 // Lists all processes that exist in the current session.
208 std::vector<SharedPtr<Process>> process_list; 209 std::vector<SharedPtr<Process>> process_list;
210 SharedPtr<Process> current_process;
209 211
210 Kernel::HandleTable handle_table; 212 Kernel::HandleTable handle_table;
211 std::array<SharedPtr<ResourceLimit>, 4> resource_limits; 213 std::array<SharedPtr<ResourceLimit>, 4> resource_limits;
@@ -264,6 +266,18 @@ void KernelCore::AppendNewProcess(SharedPtr<Process> process) {
264 impl->process_list.push_back(std::move(process)); 266 impl->process_list.push_back(std::move(process));
265} 267}
266 268
269void KernelCore::MakeCurrentProcess(SharedPtr<Process> process) {
270 impl->current_process = std::move(process);
271}
272
273SharedPtr<Process>& KernelCore::CurrentProcess() {
274 return impl->current_process;
275}
276
277const SharedPtr<Process>& KernelCore::CurrentProcess() const {
278 return impl->current_process;
279}
280
267void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) { 281void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) {
268 impl->named_ports.emplace(std::move(name), std::move(port)); 282 impl->named_ports.emplace(std::move(name), std::move(port));
269} 283}
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index ab2e9bffa..c0771ecf0 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -65,6 +65,15 @@ public:
65 /// Adds the given shared pointer to an internal list of active processes. 65 /// Adds the given shared pointer to an internal list of active processes.
66 void AppendNewProcess(SharedPtr<Process> process); 66 void AppendNewProcess(SharedPtr<Process> process);
67 67
68 /// Makes the given process the new current process.
69 void MakeCurrentProcess(SharedPtr<Process> process);
70
71 /// Retrieves a reference to the current process.
72 SharedPtr<Process>& CurrentProcess();
73
74 /// Retrieves a const reference to the current process.
75 const SharedPtr<Process>& CurrentProcess() const;
76
68 /// Adds a port to the named port table 77 /// Adds a port to the named port table
69 void AddNamedPort(std::string name, SharedPtr<ClientPort> port); 78 void AddNamedPort(std::string name, SharedPtr<ClientPort> port);
70 79