diff options
Diffstat (limited to '')
| -rw-r--r-- | src/core/core.cpp | 28 | ||||
| -rw-r--r-- | src/core/core.h | 31 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 2 |
4 files changed, 52 insertions, 13 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index 7cb86ed92..6c32154db 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -312,6 +312,10 @@ Cpu& System::CurrentCpuCore() { | |||
| 312 | return impl->CurrentCpuCore(); | 312 | return impl->CurrentCpuCore(); |
| 313 | } | 313 | } |
| 314 | 314 | ||
| 315 | const Cpu& System::CurrentCpuCore() const { | ||
| 316 | return impl->CurrentCpuCore(); | ||
| 317 | } | ||
| 318 | |||
| 315 | System::ResultStatus System::RunLoop(bool tight_loop) { | 319 | System::ResultStatus System::RunLoop(bool tight_loop) { |
| 316 | return impl->RunLoop(tight_loop); | 320 | return impl->RunLoop(tight_loop); |
| 317 | } | 321 | } |
| @@ -342,7 +346,11 @@ PerfStatsResults System::GetAndResetPerfStats() { | |||
| 342 | return impl->GetAndResetPerfStats(); | 346 | return impl->GetAndResetPerfStats(); |
| 343 | } | 347 | } |
| 344 | 348 | ||
| 345 | Core::TelemetrySession& System::TelemetrySession() const { | 349 | TelemetrySession& System::TelemetrySession() { |
| 350 | return *impl->telemetry_session; | ||
| 351 | } | ||
| 352 | |||
| 353 | const TelemetrySession& System::TelemetrySession() const { | ||
| 346 | return *impl->telemetry_session; | 354 | return *impl->telemetry_session; |
| 347 | } | 355 | } |
| 348 | 356 | ||
| @@ -350,7 +358,11 @@ ARM_Interface& System::CurrentArmInterface() { | |||
| 350 | return CurrentCpuCore().ArmInterface(); | 358 | return CurrentCpuCore().ArmInterface(); |
| 351 | } | 359 | } |
| 352 | 360 | ||
| 353 | std::size_t System::CurrentCoreIndex() { | 361 | const ARM_Interface& System::CurrentArmInterface() const { |
| 362 | return CurrentCpuCore().ArmInterface(); | ||
| 363 | } | ||
| 364 | |||
| 365 | std::size_t System::CurrentCoreIndex() const { | ||
| 354 | return CurrentCpuCore().CoreIndex(); | 366 | return CurrentCpuCore().CoreIndex(); |
| 355 | } | 367 | } |
| 356 | 368 | ||
| @@ -358,6 +370,10 @@ Kernel::Scheduler& System::CurrentScheduler() { | |||
| 358 | return CurrentCpuCore().Scheduler(); | 370 | return CurrentCpuCore().Scheduler(); |
| 359 | } | 371 | } |
| 360 | 372 | ||
| 373 | const Kernel::Scheduler& System::CurrentScheduler() const { | ||
| 374 | return CurrentCpuCore().Scheduler(); | ||
| 375 | } | ||
| 376 | |||
| 361 | Kernel::Scheduler& System::Scheduler(std::size_t core_index) { | 377 | Kernel::Scheduler& System::Scheduler(std::size_t core_index) { |
| 362 | return CpuCore(core_index).Scheduler(); | 378 | return CpuCore(core_index).Scheduler(); |
| 363 | } | 379 | } |
| @@ -378,6 +394,10 @@ ARM_Interface& System::ArmInterface(std::size_t core_index) { | |||
| 378 | return CpuCore(core_index).ArmInterface(); | 394 | return CpuCore(core_index).ArmInterface(); |
| 379 | } | 395 | } |
| 380 | 396 | ||
| 397 | const ARM_Interface& System::ArmInterface(std::size_t core_index) const { | ||
| 398 | return CpuCore(core_index).ArmInterface(); | ||
| 399 | } | ||
| 400 | |||
| 381 | Cpu& System::CpuCore(std::size_t core_index) { | 401 | Cpu& System::CpuCore(std::size_t core_index) { |
| 382 | ASSERT(core_index < NUM_CPU_CORES); | 402 | ASSERT(core_index < NUM_CPU_CORES); |
| 383 | return *impl->cpu_cores[core_index]; | 403 | return *impl->cpu_cores[core_index]; |
| @@ -392,6 +412,10 @@ ExclusiveMonitor& System::Monitor() { | |||
| 392 | return *impl->cpu_exclusive_monitor; | 412 | return *impl->cpu_exclusive_monitor; |
| 393 | } | 413 | } |
| 394 | 414 | ||
| 415 | const ExclusiveMonitor& System::Monitor() const { | ||
| 416 | return *impl->cpu_exclusive_monitor; | ||
| 417 | } | ||
| 418 | |||
| 395 | Tegra::GPU& System::GPU() { | 419 | Tegra::GPU& System::GPU() { |
| 396 | return *impl->gpu_core; | 420 | return *impl->gpu_core; |
| 397 | } | 421 | } |
diff --git a/src/core/core.h b/src/core/core.h index 173be45f8..cfacceb81 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
| @@ -129,11 +129,11 @@ public: | |||
| 129 | */ | 129 | */ |
| 130 | bool IsPoweredOn() const; | 130 | bool IsPoweredOn() const; |
| 131 | 131 | ||
| 132 | /** | 132 | /// Gets a reference to the telemetry session for this emulation session. |
| 133 | * Returns a reference to the telemetry session for this emulation session. | 133 | Core::TelemetrySession& TelemetrySession(); |
| 134 | * @returns Reference to the telemetry session. | 134 | |
| 135 | */ | 135 | /// Gets a reference to the telemetry session for this emulation session. |
| 136 | Core::TelemetrySession& TelemetrySession() const; | 136 | const Core::TelemetrySession& TelemetrySession() const; |
| 137 | 137 | ||
| 138 | /// Prepare the core emulation for a reschedule | 138 | /// Prepare the core emulation for a reschedule |
| 139 | void PrepareReschedule(); | 139 | void PrepareReschedule(); |
| @@ -144,24 +144,36 @@ public: | |||
| 144 | /// Gets an ARM interface to the CPU core that is currently running | 144 | /// Gets an ARM interface to the CPU core that is currently running |
| 145 | ARM_Interface& CurrentArmInterface(); | 145 | ARM_Interface& CurrentArmInterface(); |
| 146 | 146 | ||
| 147 | /// Gets an ARM interface to the CPU core that is currently running | ||
| 148 | const ARM_Interface& CurrentArmInterface() const; | ||
| 149 | |||
| 147 | /// Gets the index of the currently running CPU core | 150 | /// Gets the index of the currently running CPU core |
| 148 | std::size_t CurrentCoreIndex(); | 151 | std::size_t CurrentCoreIndex() const; |
| 149 | 152 | ||
| 150 | /// Gets the scheduler for the CPU core that is currently running | 153 | /// Gets the scheduler for the CPU core that is currently running |
| 151 | Kernel::Scheduler& CurrentScheduler(); | 154 | Kernel::Scheduler& CurrentScheduler(); |
| 152 | 155 | ||
| 153 | /// Gets an ARM interface to the CPU core with the specified index | 156 | /// Gets the scheduler for the CPU core that is currently running |
| 157 | const Kernel::Scheduler& CurrentScheduler() const; | ||
| 158 | |||
| 159 | /// Gets a reference to an ARM interface for the CPU core with the specified index | ||
| 154 | ARM_Interface& ArmInterface(std::size_t core_index); | 160 | ARM_Interface& ArmInterface(std::size_t core_index); |
| 155 | 161 | ||
| 162 | /// Gets a const reference to an ARM interface from the CPU core with the specified index | ||
| 163 | const ARM_Interface& ArmInterface(std::size_t core_index) const; | ||
| 164 | |||
| 156 | /// Gets a CPU interface to the CPU core with the specified index | 165 | /// Gets a CPU interface to the CPU core with the specified index |
| 157 | Cpu& CpuCore(std::size_t core_index); | 166 | Cpu& CpuCore(std::size_t core_index); |
| 158 | 167 | ||
| 159 | /// Gets a CPU interface to the CPU core with the specified index | 168 | /// Gets a CPU interface to the CPU core with the specified index |
| 160 | const Cpu& CpuCore(std::size_t core_index) const; | 169 | const Cpu& CpuCore(std::size_t core_index) const; |
| 161 | 170 | ||
| 162 | /// Gets the exclusive monitor | 171 | /// Gets a reference to the exclusive monitor |
| 163 | ExclusiveMonitor& Monitor(); | 172 | ExclusiveMonitor& Monitor(); |
| 164 | 173 | ||
| 174 | /// Gets a constant reference to the exclusive monitor | ||
| 175 | const ExclusiveMonitor& Monitor() const; | ||
| 176 | |||
| 165 | /// Gets a mutable reference to the GPU interface | 177 | /// Gets a mutable reference to the GPU interface |
| 166 | Tegra::GPU& GPU(); | 178 | Tegra::GPU& GPU(); |
| 167 | 179 | ||
| @@ -230,6 +242,9 @@ private: | |||
| 230 | /// Returns the currently running CPU core | 242 | /// Returns the currently running CPU core |
| 231 | Cpu& CurrentCpuCore(); | 243 | Cpu& CurrentCpuCore(); |
| 232 | 244 | ||
| 245 | /// Returns the currently running CPU core | ||
| 246 | const Cpu& CurrentCpuCore() const; | ||
| 247 | |||
| 233 | /** | 248 | /** |
| 234 | * Initialize the emulated system. | 249 | * Initialize the emulated system. |
| 235 | * @param emu_window Reference to the host-system window used for video output and keyboard | 250 | * @param emu_window Reference to the host-system window used for video output and keyboard |
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 4b6b32dd5..1fd4ba5d2 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -32,7 +32,7 @@ namespace Kernel { | |||
| 32 | */ | 32 | */ |
| 33 | static void ThreadWakeupCallback(u64 thread_handle, [[maybe_unused]] int cycles_late) { | 33 | static void ThreadWakeupCallback(u64 thread_handle, [[maybe_unused]] int cycles_late) { |
| 34 | const auto proper_handle = static_cast<Handle>(thread_handle); | 34 | const auto proper_handle = static_cast<Handle>(thread_handle); |
| 35 | auto& system = Core::System::GetInstance(); | 35 | const auto& system = Core::System::GetInstance(); |
| 36 | 36 | ||
| 37 | // Lock the global kernel mutex when we enter the kernel HLE. | 37 | // Lock the global kernel mutex when we enter the kernel HLE. |
| 38 | std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock); | 38 | std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock); |
| @@ -90,7 +90,7 @@ static void ThreadWakeupCallback(u64 thread_handle, [[maybe_unused]] int cycles_ | |||
| 90 | /// The timer callback event, called when a timer is fired | 90 | /// The timer callback event, called when a timer is fired |
| 91 | static void TimerCallback(u64 timer_handle, int cycles_late) { | 91 | static void TimerCallback(u64 timer_handle, int cycles_late) { |
| 92 | const auto proper_handle = static_cast<Handle>(timer_handle); | 92 | const auto proper_handle = static_cast<Handle>(timer_handle); |
| 93 | auto& system = Core::System::GetInstance(); | 93 | const auto& system = Core::System::GetInstance(); |
| 94 | SharedPtr<Timer> timer = system.Kernel().RetrieveTimerFromCallbackHandleTable(proper_handle); | 94 | SharedPtr<Timer> timer = system.Kernel().RetrieveTimerFromCallbackHandleTable(proper_handle); |
| 95 | 95 | ||
| 96 | if (timer == nullptr) { | 96 | if (timer == nullptr) { |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 4e490e2b5..c7c579aaf 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -572,7 +572,7 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 572 | return ERR_INVALID_HANDLE; | 572 | return ERR_INVALID_HANDLE; |
| 573 | } | 573 | } |
| 574 | 574 | ||
| 575 | auto& system = Core::System::GetInstance(); | 575 | const auto& system = Core::System::GetInstance(); |
| 576 | const auto& scheduler = system.CurrentScheduler(); | 576 | const auto& scheduler = system.CurrentScheduler(); |
| 577 | const auto* const current_thread = scheduler.GetCurrentThread(); | 577 | const auto* const current_thread = scheduler.GetCurrentThread(); |
| 578 | const bool same_thread = current_thread == thread; | 578 | const bool same_thread = current_thread == thread; |