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.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/core/hle/kernel/physical_core.h b/src/core/hle/kernel/physical_core.h
index 3269166be..c3da30b72 100644
--- a/src/core/hle/kernel/physical_core.h
+++ b/src/core/hle/kernel/physical_core.h
@@ -7,6 +7,12 @@
#include <cstddef>
#include <memory>
+#include "core/arm/cpu_interrupt_handler.h"
+
+namespace Common {
+ class SpinLock;
+}
+
namespace Kernel {
class Scheduler;
} // namespace Kernel
@@ -32,11 +38,24 @@ public:
/// Execute current jit state
void Run();
+ /// Set this core in IdleState.
+ void Idle();
/// Execute a single instruction in current jit.
void Step();
/// Stop JIT execution/exit
void Stop();
+ /// Interrupt this physical core.
+ void Interrupt();
+
+ /// Clear this core's interrupt
+ void ClearInterrupt();
+
+ /// Check if this core is interrupted
+ bool IsInterrupted() const {
+ return interrupt_handler.IsInterrupted();
+ }
+
// Shutdown this physical core.
void Shutdown();
@@ -71,11 +90,13 @@ public:
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{};
+ std::unique_ptr<Common::SpinLock> guard;
};
} // namespace Kernel