Difference between revisions of "PPC services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(also fix cpu boost values in PPC)
(13 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
APM is utilized for setting system performance profiles including clocks for CPU, GPU, and memory.
 
APM is utilized for setting system performance profiles including clocks for CPU, GPU, and memory.
 +
 +
[9.0.0+] The PPC system module is now stubbed and all its services were moved into [[PTM_services|PTM]].
  
 
= apm =
 
= apm =
 
This is "nn::apm::IManager".
 
This is "nn::apm::IManager".
 +
 +
This was moved to [[Applet_Manager_services|AM]] with [8.0.0+] and is now a shim for [[#apm:am|apm:am]].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 12: Line 16:
 
| 1 || GetPerformanceMode
 
| 1 || GetPerformanceMode
 
|-
 
|-
| 6 || IsCpuOverclockEnabled
+
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]
 
|}
 
|}
  
 
== OpenSession ==
 
== OpenSession ==
 
Returns an [[#ISession]].
 
Returns an [[#ISession]].
 +
 +
== IsCpuOverclockEnabled ==
 +
No input, returns an output u8 bool.
  
 
= apm:p =
 
= apm:p =
 
This is "nn::apm::IManagerPrivileged".
 
This is "nn::apm::IManagerPrivileged".
 +
 +
This service no longer exists in [8.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 30: Line 39:
 
== OpenSession ==
 
== OpenSession ==
 
Returns an [[#ISession]].
 
Returns an [[#ISession]].
 +
 +
= apm:am =
 +
This is "nn::apm::IManager".
 +
 +
This was added with [8.0.0+] and is the same as the old [[#apm|apm]] service.
  
 
= apm:sys =
 
= apm:sys =
Line 50: Line 64:
 
| 5 || [5.0.0+] LoadAndApplySettings
 
| 5 || [5.0.0+] LoadAndApplySettings
 
|-
 
|-
| 6 || [7.0.0+] SetCpuBoostMode
+
| 6 || [7.0.0+] [[#SetCpuBoostMode]]
 
|-
 
|-
 
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]
 
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]
Line 57: Line 71:
 
== GetPerformanceEvent ==
 
== GetPerformanceEvent ==
 
Returns an [[#ISession]].
 
Returns an [[#ISession]].
 +
 +
== SetCpuBoostMode ==
 +
Takes an u32 [[#CpuBoostMode]].
 +
 +
=== CpuBoostMode ===
 +
{| class="wikitable" border="1"
 +
|-
 +
! Mode || Description
 +
|-
 +
| 0 || Disabled.
 +
|-
 +
| 1 || Boost CPU. Additionally, throttle GPU to minimum.
 +
Use [[#PerformanceConfiguration|performance configurations]] 0x92220009 and 0x9222000A, or 0x9222000B and 0x9222000C.
 +
|-
 +
| 2 || Conserve power. Only throttle GPU to minimum.
 +
Use [[#PerformanceConfiguration|performance configurations]] 0x9222000B and 0x9222000C.
 +
|}
  
 
== GetCurrentPerformanceConfiguration ==
 
== GetCurrentPerformanceConfiguration ==
Line 71: Line 102:
 
|-
 
|-
 
| 1 || GetPerformanceConfiguration
 
| 1 || GetPerformanceConfiguration
 +
|-
 +
| 2 || [8.0.0+] [[#SetCpuOverclockEnabled]]
 
|}
 
|}
  
 
== SetPerformanceConfiguration ==
 
== SetPerformanceConfiguration ==
Takes u32 [[#PerformanceMode]] and u32 [[#PerformanceConfiguration]].
+
Takes an u32 [[#PerformanceMode]] and an u32 [[#PerformanceConfiguration]].
  
 
== GetPerformanceConfiguration ==
 
== GetPerformanceConfiguration ==
Takes u32 [[#PerformanceMode]], returns output u32 [[#PerformanceConfiguration]].
+
Takes an u32 [[#PerformanceMode]] and returns an output u32 [[#PerformanceConfiguration]].
 +
 
 +
== SetCpuOverclockEnabled ==
 +
Takes an input u8 bool, no output.
  
 
== PerformanceMode ==
 
== PerformanceMode ==
Line 94: Line 130:
 
! Value || CPU clock || GPU clock || Memory clock
 
! Value || CPU clock || GPU clock || Memory clock
 
|-
 
|-
| 0x00010000 || 1020 || 384 || 1600
+
| 0x00010000 || 1020.0 || 384.0 || 1600.0
 
|-
 
|-
| 0x00010001 || 1020 || 768 || 1600
+
| 0x00010001 || 1020.0 || 768.0 || 1600.0
 
|-
 
|-
| 0x00010002 || 1224 || 691.2 || 1600
+
| 0x00010002 || 1224.0 || 691.2 || 1600.0
 
|-
 
|-
| 0x00020000 || 1020 || 230.4 || 1600
+
| 0x00020000 || 1020.0 || 230.4 || 1600.0
 
|-
 
|-
| 0x00020001 || 1020 || 307.2 || 1600
+
| 0x00020001 || 1020.0 || 307.2 || 1600.0
 
|-
 
|-
| 0x00020002 || 1224|| 230.4 || 1600
+
| 0x00020002 || 1224.0 || 230.4 || 1600.0
 
|-
 
|-
| 0x00020003 || 1020 || 307 || 1331.2
+
| 0x00020003 || 1020.0 || 307.2 || 1331.2
 
|-
 
|-
| 0x00020004 || 1020 || 384 || 1331.2
+
| 0x00020004 || 1020.0 || 384.0 || 1331.2
 
|-
 
|-
| 0x00020005 || 1020 || 307.2 || 1065.6
+
| 0x00020005 || 1020.0 || 307.2 || 1065.6
 
|-
 
|-
| 0x00020006 || 1020 || 384 || 1065.6
+
| 0x00020006 || 1020.0 || 384.0 || 1065.6
 
|-
 
|-
| 0x92220007 || 1020  || 460.8 || 1600
+
| 0x92220007 || 1020.0 || 460.8 || 1600.0
 
|-
 
|-
| 0x92220008 || 1020 || 460.8 || 1331.2
+
| 0x92220008 || 1020.0 || 460.8 || 1331.2
 +
|-
 +
| [7.0.0+] 0x92220009 || 1785.0 || 76.8 || 1600.0
 +
|-
 +
| [7.0.0+] 0x9222000A || 1785.0 || 76.8 || 1331.2
 +
|-
 +
| [7.0.0+] 0x9222000B || 1020.0 || 76.8 || 1600.0
 +
|-
 +
| [7.0.0+] 0x9222000C || 1020.0 || 76.8 || 1331.2
 
|}
 
|}
 +
 
Clocks are all in MHz.
 
Clocks are all in MHz.
  
Line 168: Line 213:
 
|-
 
|-
 
! Key || Size || Notes
 
! Key || Size || Notes
 +
|-
 +
| background_download_stress_testing_storage || strlen || "sdcard", "builtin", "system".
 
|-
 
|-
 
| battery_draining_enabled || 1 || ?
 
| battery_draining_enabled || 1 || ?
 +
|-
 +
| fs_access_log_mode || strlen || "log", "sdcard", "log+sdcard", "off".
 +
|-
 +
| fs_speed_emulation_mode || strlen || "faster", "slower", "random", "off".
 +
|-
 +
| host_romfs_redirection_target || strlen || "builtin", "off".
 +
|-
 +
| idle_time_detect_mode || strlen || "on", "off".
 +
|-
 +
| initial_tick_value || strlen || "7days", "14days", "30days", "90days", "hex": ?.
 +
|-
 +
| memory_mode || strlen || "auto", "4GB", "6GB".
 +
|-
 +
| needs_update_vulnerability_policy || strlen || "default": ?, "force_true": ?, "force_false": ?.
 +
|-
 +
| operation_mode_policy || strlen || "auto": ?, "handheld", "console".
 
|-
 
|-
 
| performance_mode_policy || strlen || "auto": use boost mode when docked. "normal": never use boost mode. "boost": always use boost mode (SDEV only).
 
| performance_mode_policy || strlen || "auto": use boost mode when docked. "normal": never use boost mode. "boost": always use boost mode (SDEV only).
 +
|-
 +
| screenshot_target || strlen || "screenshot": ?, "physical": ?.
 
|-
 
|-
 
| sdev_cpu_overclock_enabled || 1 || SDEV only. Used to allow access to 1224MHz CPU mode.
 
| sdev_cpu_overclock_enabled || 1 || SDEV only. Used to allow access to 1224MHz CPU mode.
Line 178: Line 243:
 
|-
 
|-
 
| sdev_throttling_additional_delay_enabled || 1 || SDEV only.
 
| sdev_throttling_additional_delay_enabled || 1 || SDEV only.
 +
|-
 +
| sleep_mode || strlen || "default": ?, "pseudo": ?.
 
|-
 
|-
 
| throttling_for_smpd_enabled || 1 || Not used as of 3.0.
 
| throttling_for_smpd_enabled || 1 || Not used as of 3.0.

Revision as of 08:11, 27 September 2019

APM is utilized for setting system performance profiles including clocks for CPU, GPU, and memory.

[9.0.0+] The PPC system module is now stubbed and all its services were moved into PTM.

apm

This is "nn::apm::IManager".

This was moved to AM with [8.0.0+] and is now a shim for apm:am.

Cmd Name
0 #OpenSession
1 GetPerformanceMode
6 [7.0.0+] #IsCpuOverclockEnabled

OpenSession

Returns an #ISession.

IsCpuOverclockEnabled

No input, returns an output u8 bool.

apm:p

This is "nn::apm::IManagerPrivileged".

This service no longer exists in [8.0.0+].

Cmd Name
0 OpenSession

OpenSession

Returns an #ISession.

apm:am

This is "nn::apm::IManager".

This was added with [8.0.0+] and is the same as the old apm service.

apm:sys

This is "nn::apm::ISystemManager".

Cmd Name
0 RequestPerformanceMode
1 GetPerformanceEvent
2 GetThrottlingState
3 GetLastThrottlingState
4 ClearLastThrottlingState
5 [5.0.0+] LoadAndApplySettings
6 [7.0.0+] #SetCpuBoostMode
7 [7.0.0+] #GetCurrentPerformanceConfiguration

GetPerformanceEvent

Returns an #ISession.

SetCpuBoostMode

Takes an u32 #CpuBoostMode.

CpuBoostMode

Mode Description
0 Disabled.
1 Boost CPU. Additionally, throttle GPU to minimum.

Use performance configurations 0x92220009 and 0x9222000A, or 0x9222000B and 0x9222000C.

2 Conserve power. Only throttle GPU to minimum.

Use performance configurations 0x9222000B and 0x9222000C.

GetCurrentPerformanceConfiguration

Returns the currently active #PerformanceConfiguration (default value is 0x00020003).

ISession

This is "nn::apm::ISession".

Cmd Name
0 SetPerformanceConfiguration
1 GetPerformanceConfiguration
2 [8.0.0+] #SetCpuOverclockEnabled

SetPerformanceConfiguration

Takes an u32 #PerformanceMode and an u32 #PerformanceConfiguration.

GetPerformanceConfiguration

Takes an u32 #PerformanceMode and returns an output u32 #PerformanceConfiguration.

SetCpuOverclockEnabled

Takes an input u8 bool, no output.

PerformanceMode

Value Name
0 Handheld
1 Docked

PerformanceConfiguration

Value CPU clock GPU clock Memory clock
0x00010000 1020.0 384.0 1600.0
0x00010001 1020.0 768.0 1600.0
0x00010002 1224.0 691.2 1600.0
0x00020000 1020.0 230.4 1600.0
0x00020001 1020.0 307.2 1600.0
0x00020002 1224.0 230.4 1600.0
0x00020003 1020.0 307.2 1331.2
0x00020004 1020.0 384.0 1331.2
0x00020005 1020.0 307.2 1065.6
0x00020006 1020.0 384.0 1065.6
0x92220007 1020.0 460.8 1600.0
0x92220008 1020.0 460.8 1331.2
[7.0.0+] 0x92220009 1785.0 76.8 1600.0
[7.0.0+] 0x9222000A 1785.0 76.8 1331.2
[7.0.0+] 0x9222000B 1020.0 76.8 1600.0
[7.0.0+] 0x9222000C 1020.0 76.8 1331.2

Clocks are all in MHz.

Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 are only available for SDEV units.

Some of these require apm:p.

fgm, fgm:0, fgm:9

This is "nn::fgm::sf::ISession".

Cmd Name
0 Initialize

IRequest

This is "nn::fgm::sf::IRequest".

Cmd Name
0 Initialize
1 Set
2 Get
3 Cancel

fgm:dbg

This is "nn::fgm::sf::IDebugger".

Cmd Name
0 Initialize
1 Read
2 Cancel

Settings

Key Size Notes
background_download_stress_testing_storage strlen "sdcard", "builtin", "system".
battery_draining_enabled 1 ?
fs_access_log_mode strlen "log", "sdcard", "log+sdcard", "off".
fs_speed_emulation_mode strlen "faster", "slower", "random", "off".
host_romfs_redirection_target strlen "builtin", "off".
idle_time_detect_mode strlen "on", "off".
initial_tick_value strlen "7days", "14days", "30days", "90days", "hex": ?.
memory_mode strlen "auto", "4GB", "6GB".
needs_update_vulnerability_policy strlen "default": ?, "force_true": ?, "force_false": ?.
operation_mode_policy strlen "auto": ?, "handheld", "console".
performance_mode_policy strlen "auto": use boost mode when docked. "normal": never use boost mode. "boost": always use boost mode (SDEV only).
screenshot_target strlen "screenshot": ?, "physical": ?.
sdev_cpu_overclock_enabled 1 SDEV only. Used to allow access to 1224MHz CPU mode.
sdev_throttling_additional_delay_us 4 SDEV only.
sdev_throttling_additional_delay_enabled 1 SDEV only.
sleep_mode strlen "default": ?, "pseudo": ?.
throttling_for_smpd_enabled 1 Not used as of 3.0.
throttling_for_undock_enabled 1 Not used as of 3.0.