aboutsummaryrefslogtreecommitdiff
path: root/src/core/cpu_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/cpu_manager.h')
-rw-r--r--src/core/cpu_manager.h59
1 files changed, 32 insertions, 27 deletions
diff --git a/src/core/cpu_manager.h b/src/core/cpu_manager.h
index a249dc5f76..5e97f51bfb 100644
--- a/src/core/cpu_manager.h
+++ b/src/core/cpu_manager.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -14,6 +17,10 @@
#include "common/thread.h"
#include "core/hardware_properties.h"
+namespace Kernel {
+class KernelCore;
+}
+
namespace Common {
class Event;
class Fiber;
@@ -51,57 +58,55 @@ public:
void Initialize();
void Shutdown();
- std::function<void()> GetGuestActivateFunc() {
- return [this] { GuestActivate(); };
+ std::function<void()> GetGuestActivateFunc(Kernel::KernelCore& kernel) {
+ return [this, &kernel] { GuestActivate(kernel); };
}
- std::function<void()> GetGuestThreadFunc() {
- return [this] { GuestThreadFunction(); };
+ std::function<void()> GetGuestThreadFunc(Kernel::KernelCore& kernel) {
+ return [this, &kernel] { GuestThreadFunction(kernel); };
}
- std::function<void()> GetIdleThreadStartFunc() {
- return [this] { IdleThreadFunction(); };
+ std::function<void()> GetIdleThreadStartFunc(Kernel::KernelCore& kernel) {
+ return [this, &kernel] { IdleThreadFunction(kernel); };
}
- std::function<void()> GetShutdownThreadStartFunc() {
- return [this] { ShutdownThreadFunction(); };
+ std::function<void()> GetShutdownThreadStartFunc(Kernel::KernelCore& kernel) {
+ return [this, &kernel] { ShutdownThreadFunction(kernel); };
}
- void PreemptSingleCore(bool from_running_environment = true);
+ void PreemptSingleCore(Kernel::KernelCore& kernel, bool from_running_environment = true);
std::size_t CurrentCore() const {
return current_core.load();
}
private:
- void GuestThreadFunction();
- void IdleThreadFunction();
- void ShutdownThreadFunction();
+ void GuestThreadFunction(Kernel::KernelCore& kernel);
+ void IdleThreadFunction(Kernel::KernelCore& kernel);
+ void ShutdownThreadFunction(Kernel::KernelCore& kernel);
- void MultiCoreRunGuestThread();
- void MultiCoreRunIdleThread();
+ void MultiCoreRunGuestThread(Kernel::KernelCore& kernel);
+ void MultiCoreRunIdleThread(Kernel::KernelCore& kernel);
- void SingleCoreRunGuestThread();
- void SingleCoreRunIdleThread();
+ void SingleCoreRunGuestThread(Kernel::KernelCore& kernel);
+ void SingleCoreRunIdleThread(Kernel::KernelCore& kernel);
- void GuestActivate();
- void HandleInterrupt();
- void ShutdownThread();
+ void GuestActivate(Kernel::KernelCore& kernel);
+ void HandleInterrupt(Kernel::KernelCore& kernel);
+ void ShutdownThread(Kernel::KernelCore& kernel);
void RunThread(std::stop_token stop_token, std::size_t core);
+ static constexpr std::size_t max_cycle_runs = 5;
+
+ std::optional<Common::Barrier> gpu_barrier{};
struct CoreData {
std::shared_ptr<Common::Fiber> host_context;
std::jthread host_thread;
};
-
- std::unique_ptr<Common::Barrier> gpu_barrier{};
std::array<CoreData, Core::Hardware::NUM_CPU_CORES> core_data{};
-
- bool is_async_gpu{};
- bool is_multicore{};
+ Core::System& system;
std::atomic<std::size_t> current_core{};
std::size_t idle_count{};
std::size_t num_cores{};
- static constexpr std::size_t max_cycle_runs = 5;
-
- System& system;
+ bool is_async_gpu{};
+ bool is_multicore{};
};
} // namespace Core