svc_tick.cpp 936 B

1234567891011121314151617181920212223242526272829303132333435
  1. // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "core/core.h"
  4. #include "core/core_timing.h"
  5. #include "core/hle/kernel/kernel.h"
  6. #include "core/hle/kernel/svc.h"
  7. namespace Kernel::Svc {
  8. /// This returns the total CPU ticks elapsed since the CPU was powered-on
  9. int64_t GetSystemTick(Core::System& system) {
  10. LOG_TRACE(Kernel_SVC, "called");
  11. auto& core_timing = system.CoreTiming();
  12. // Returns the value of cntpct_el0 (https://switchbrew.org/wiki/SVC#svcGetSystemTick)
  13. const u64 result{core_timing.GetClockTicks()};
  14. if (!system.Kernel().IsMulticore()) {
  15. core_timing.AddTicks(400U);
  16. }
  17. return static_cast<int64_t>(result);
  18. }
  19. int64_t GetSystemTick64(Core::System& system) {
  20. return GetSystemTick(system);
  21. }
  22. int64_t GetSystemTick64From32(Core::System& system) {
  23. return GetSystemTick(system);
  24. }
  25. } // namespace Kernel::Svc