controller.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright 2019 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "common/logging/log.h"
  5. #include "core/core_timing.h"
  6. #include "core/hle/service/apm/controller.h"
  7. #include "core/settings.h"
  8. namespace Service::APM {
  9. constexpr PerformanceConfiguration DEFAULT_PERFORMANCE_CONFIGURATION =
  10. PerformanceConfiguration::Config7;
  11. Controller::Controller(Core::Timing::CoreTiming& core_timing)
  12. : core_timing{core_timing}, configs{
  13. {PerformanceMode::Handheld, DEFAULT_PERFORMANCE_CONFIGURATION},
  14. {PerformanceMode::Docked, DEFAULT_PERFORMANCE_CONFIGURATION},
  15. } {}
  16. Controller::~Controller() = default;
  17. void Controller::SetPerformanceConfiguration(PerformanceMode mode,
  18. PerformanceConfiguration config) {
  19. static const std::map<PerformanceConfiguration, u32> PCONFIG_TO_SPEED_MAP{
  20. {PerformanceConfiguration::Config1, 1020}, {PerformanceConfiguration::Config2, 1020},
  21. {PerformanceConfiguration::Config3, 1224}, {PerformanceConfiguration::Config4, 1020},
  22. {PerformanceConfiguration::Config5, 1020}, {PerformanceConfiguration::Config6, 1224},
  23. {PerformanceConfiguration::Config7, 1020}, {PerformanceConfiguration::Config8, 1020},
  24. {PerformanceConfiguration::Config9, 1020}, {PerformanceConfiguration::Config10, 1020},
  25. {PerformanceConfiguration::Config11, 1020}, {PerformanceConfiguration::Config12, 1020},
  26. {PerformanceConfiguration::Config13, 1785}, {PerformanceConfiguration::Config14, 1785},
  27. {PerformanceConfiguration::Config15, 1020}, {PerformanceConfiguration::Config16, 1020},
  28. };
  29. SetClockSpeed(PCONFIG_TO_SPEED_MAP.find(config)->second);
  30. configs.insert_or_assign(mode, config);
  31. }
  32. void Controller::SetFromCpuBoostMode(CpuBoostMode mode) {
  33. constexpr std::array<PerformanceConfiguration, 3> BOOST_MODE_TO_CONFIG_MAP{{
  34. PerformanceConfiguration::Config7,
  35. PerformanceConfiguration::Config13,
  36. PerformanceConfiguration::Config15,
  37. }};
  38. SetPerformanceConfiguration(PerformanceMode::Docked,
  39. BOOST_MODE_TO_CONFIG_MAP.at(static_cast<u32>(mode)));
  40. }
  41. PerformanceMode Controller::GetCurrentPerformanceMode() const {
  42. return Settings::values.use_docked_mode ? PerformanceMode::Docked : PerformanceMode::Handheld;
  43. }
  44. PerformanceConfiguration Controller::GetCurrentPerformanceConfiguration(PerformanceMode mode) {
  45. if (configs.find(mode) == configs.end()) {
  46. configs.insert_or_assign(mode, DEFAULT_PERFORMANCE_CONFIGURATION);
  47. }
  48. return configs[mode];
  49. }
  50. void Controller::SetClockSpeed(u32 mhz) {
  51. LOG_INFO(Service_APM, "called, mhz={:08X}", mhz);
  52. // TODO(DarkLordZach): Actually signal core_timing to change clock speed.
  53. // TODO(Rodrigo): Remove [[maybe_unused]] when core_timing is used.
  54. }
  55. } // namespace Service::APM