summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/physical_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/physical_core.h')
-rw-r--r--src/core/hle/kernel/physical_core.h29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/core/hle/kernel/physical_core.h b/src/core/hle/kernel/physical_core.h
index d7a7a951c..ace058a5a 100644
--- a/src/core/hle/kernel/physical_core.h
+++ b/src/core/hle/kernel/physical_core.h
@@ -4,9 +4,12 @@
#pragma once
+#include <array>
#include <cstddef>
#include <memory>
+#include "core/arm/arm_interface.h"
+
namespace Common {
class SpinLock;
}
@@ -16,7 +19,6 @@ class Scheduler;
} // namespace Kernel
namespace Core {
-class ARM_Interface;
class CPUInterruptHandler;
class ExclusiveMonitor;
class System;
@@ -26,8 +28,8 @@ namespace Kernel {
class PhysicalCore {
public:
- PhysicalCore(Core::System& system, std::size_t id, Kernel::Scheduler& scheduler,
- Core::CPUInterruptHandler& interrupt_handler);
+ PhysicalCore(std::size_t core_index, Core::System& system, Kernel::Scheduler& scheduler,
+ Core::CPUInterrupts& interrupts);
~PhysicalCore();
PhysicalCore(const PhysicalCore&) = delete;
@@ -36,7 +38,14 @@ public:
PhysicalCore(PhysicalCore&&) = default;
PhysicalCore& operator=(PhysicalCore&&) = default;
+ /// Initialize the core for the specified parameters.
+ void Initialize(bool is_64_bit);
+
+ /// Execute current jit state
+ void Run();
+
void Idle();
+
/// Interrupt this physical core.
void Interrupt();
@@ -49,6 +58,14 @@ public:
// Shutdown this physical core.
void Shutdown();
+ Core::ARM_Interface& ArmInterface() {
+ return *arm_interface;
+ }
+
+ const Core::ARM_Interface& ArmInterface() const {
+ return *arm_interface;
+ }
+
bool IsMainCore() const {
return core_index == 0;
}
@@ -70,10 +87,12 @@ public:
}
private:
- Core::CPUInterruptHandler& interrupt_handler;
- std::size_t core_index;
+ const std::size_t core_index;
+ Core::System& system;
Kernel::Scheduler& scheduler;
+ Core::CPUInterrupts& interrupts;
std::unique_ptr<Common::SpinLock> guard;
+ std::unique_ptr<Core::ARM_Interface> arm_interface;
};
} // namespace Kernel