diff options
| author | bunnei <bunneidev@gmail.com> | 2020-06-28 12:37:50 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-28 12:37:50 -0400 |
| commit | b05795d704e0c194215f815a5703db09e524b59a (patch) | |
| tree | ecf4023b4ee0c91555c1d8263762fcb9dcb04a17 /src/core/hle/kernel/physical_core.h | |
| parent | 8596a127724e9d7e27c4d7d9becd323c8d6d4f8e (diff) | |
| parent | 2f8947583f2f0af4058600243d6c1d244e3c4890 (diff) | |
Merge pull request #3955 from FernandoS27/prometheus-2b
Remake Kernel Scheduling, CPU Management & Boot Management (Prometheus)
Diffstat (limited to 'src/core/hle/kernel/physical_core.h')
| -rw-r--r-- | src/core/hle/kernel/physical_core.h | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/src/core/hle/kernel/physical_core.h b/src/core/hle/kernel/physical_core.h index 3269166be..d7a7a951c 100644 --- a/src/core/hle/kernel/physical_core.h +++ b/src/core/hle/kernel/physical_core.h @@ -7,12 +7,17 @@ #include <cstddef> #include <memory> +namespace Common { +class SpinLock; +} + namespace Kernel { class Scheduler; } // namespace Kernel namespace Core { class ARM_Interface; +class CPUInterruptHandler; class ExclusiveMonitor; class System; } // namespace Core @@ -21,7 +26,8 @@ namespace Kernel { class PhysicalCore { public: - PhysicalCore(Core::System& system, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor); + PhysicalCore(Core::System& system, std::size_t id, Kernel::Scheduler& scheduler, + Core::CPUInterruptHandler& interrupt_handler); ~PhysicalCore(); PhysicalCore(const PhysicalCore&) = delete; @@ -30,23 +36,18 @@ public: PhysicalCore(PhysicalCore&&) = default; PhysicalCore& operator=(PhysicalCore&&) = default; - /// Execute current jit state - void Run(); - /// Execute a single instruction in current jit. - void Step(); - /// Stop JIT execution/exit - void Stop(); + void Idle(); + /// Interrupt this physical core. + void Interrupt(); - // Shutdown this physical core. - void Shutdown(); + /// Clear this core's interrupt + void ClearInterrupt(); - Core::ARM_Interface& ArmInterface() { - return *arm_interface; - } + /// Check if this core is interrupted + bool IsInterrupted() const; - const Core::ARM_Interface& ArmInterface() const { - return *arm_interface; - } + // Shutdown this physical core. + void Shutdown(); bool IsMainCore() const { return core_index == 0; @@ -61,21 +62,18 @@ public: } Kernel::Scheduler& Scheduler() { - return *scheduler; + return scheduler; } const Kernel::Scheduler& Scheduler() const { - return *scheduler; + return scheduler; } - void SetIs64Bit(bool is_64_bit); - private: + Core::CPUInterruptHandler& interrupt_handler; std::size_t core_index; - std::unique_ptr<Core::ARM_Interface> arm_interface_32; - std::unique_ptr<Core::ARM_Interface> arm_interface_64; - std::unique_ptr<Kernel::Scheduler> scheduler; - Core::ARM_Interface* arm_interface{}; + Kernel::Scheduler& scheduler; + std::unique_ptr<Common::SpinLock> guard; }; } // namespace Kernel |
