Changes

Jump to navigation Jump to search
10,671 bytes added ,  21:49, 11 August 2022
no edit summary
Line 6: Line 6:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || OpenController
+
| 0 || [[#OpenController]]
 
|}
 
|}
 +
 +
== OpenController ==
 +
Takes an input u32. Returns an output [[#IController]].
    
== IController ==
 
== IController ==
Line 42: Line 45:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetBatteryChargePercentage]]
+
| 0 || [[#GetBatteryChargePercentage|GetBatteryChargePercentage]]
 
|-
 
|-
| 1 || [[#GetChargerType]]
+
| 1 || [[#GetChargerType|GetChargerType]]
 
|-
 
|-
| 2 || [[#EnableBatteryCharging]]
+
| 2 || [[#EnableBatteryCharging|EnableBatteryCharging]]
 
|-
 
|-
| 3 || [[#DisableBatteryCharging]]
+
| 3 || [[#DisableBatteryCharging|DisableBatteryCharging]]
 
|-
 
|-
| 4 || [[#IsBatteryChargingEnabled]]
+
| 4 || [[#IsBatteryChargingEnabled|IsBatteryChargingEnabled]]
 
|-
 
|-
| 5 || [[#AcquireControllerPowerSupply]]
+
| 5 || [[#AcquireControllerPowerSupply|AcquireControllerPowerSupply]]
 
|-
 
|-
| 6 || [[#ReleaseControllerPowerSupply]]
+
| 6 || [[#ReleaseControllerPowerSupply|ReleaseControllerPowerSupply]]
 
|-
 
|-
| 7 || [[#OpenSession]]
+
| 7 || [[#OpenSession_1|OpenSession]]
 
|-
 
|-
| 8 || [[#EnableEnoughPowerChargeEmulation]]
+
| 8 || [[#EnableEnoughPowerChargeEmulation|EnableEnoughPowerChargeEmulation]]
 
|-
 
|-
| 9 || [[#DisableEnoughPowerChargeEmulation]]
+
| 9 || [[#DisableEnoughPowerChargeEmulation|DisableEnoughPowerChargeEmulation]]
 
|-
 
|-
| 10 || [[#EnableFastBatteryCharging]]
+
| 10 || [[#EnableFastBatteryCharging|EnableFastBatteryCharging]]
 
|-
 
|-
| 11 || [[#DisableFastBatteryCharging]]
+
| 11 || [[#DisableFastBatteryCharging|DisableFastBatteryCharging]]
 
|-
 
|-
| 12 || [[#GetBatteryVoltageState]]
+
| 12 || [[#GetBatteryVoltageState|GetBatteryVoltageState]]
 
|-
 
|-
| 13 || [[#GetRawBatteryChargePercentage]]
+
| 13 || [[#GetRawBatteryChargePercentage|GetRawBatteryChargePercentage]]
 
|-
 
|-
| 14 || [[#IsEnoughPowerSupplied]]
+
| 14 || [[#IsEnoughPowerSupplied|IsEnoughPowerSupplied]]
 
|-
 
|-
| 15 || [[#GetBatteryAgePercentage]]
+
| 15 || [[#GetBatteryAgePercentage|GetBatteryAgePercentage]]
 
|-
 
|-
| 16 || [[#GetBatteryChargeInfoEvent]]
+
| 16 || [[#GetBatteryChargeInfoEvent|GetBatteryChargeInfoEvent]]
 
|-
 
|-
| 17 || [[#GetBatteryChargeInfoFields]]
+
| 17 || [[#GetBatteryChargeInfoFields|GetBatteryChargeInfoFields]]
 
|-
 
|-
| 18 || [3.0.0+] GetBatteryChargeCalibratedEvent
+
| 18 || [3.0.0+] [[#GetBatteryChargeCalibratedEvent|GetBatteryChargeCalibratedEvent]]
 
|}
 
|}
    
== GetBatteryChargePercentage ==
 
== GetBatteryChargePercentage ==
No input, returns an output u32.
+
No input. Returns an output u32.
    
== GetChargerType ==
 
== GetChargerType ==
No input, returns an output u32.
+
No input. Returns an output [[#ChargerType|ChargerType]].
    
== EnableBatteryCharging ==
 
== EnableBatteryCharging ==
Line 94: Line 97:     
== IsBatteryChargingEnabled ==
 
== IsBatteryChargingEnabled ==
No input, returns an output u8.
+
No input. Returns an output bool.
    
== AcquireControllerPowerSupply ==
 
== AcquireControllerPowerSupply ==
Line 103: Line 106:     
== OpenSession ==
 
== OpenSession ==
No input, returns an output [[#IPsmSession]].
+
No input. Returns an output [[#IPsmSession]].
    
== EnableEnoughPowerChargeEmulation ==
 
== EnableEnoughPowerChargeEmulation ==
Line 118: Line 121:     
== GetBatteryVoltageState ==
 
== GetBatteryVoltageState ==
No input, returns an output u32.
+
No input. Returns an output [[#BatteryVoltageState|BatteryVoltageState]].
    
== GetRawBatteryChargePercentage ==
 
== GetRawBatteryChargePercentage ==
No input, returns an output u64.
+
No input. Returns an output double.
    
== IsEnoughPowerSupplied ==
 
== IsEnoughPowerSupplied ==
No input, returns an output u8.
+
No input. Returns an output bool.
    
== GetBatteryAgePercentage ==
 
== GetBatteryAgePercentage ==
No input, returns an output u64.
+
No input. returns an output double.
    
== GetBatteryChargeInfoEvent ==
 
== GetBatteryChargeInfoEvent ==
No input, returns an output event.
+
No input. returns an output Event handle.
    
== GetBatteryChargeInfoFields ==
 
== GetBatteryChargeInfoFields ==
No input, returns an output 0x40-byte struct.
+
No input. Returns an output [[#BatteryChargeInfoFields|BatteryChargeInfoFields]].
 +
 
 +
== GetBatteryChargeCalibratedEvent ==
 +
No input. returns an output Event handle.
    
== IPsmSession ==
 
== IPsmSession ==
Line 142: Line 148:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#BindStateChangeEvent]]
+
| 0 || [[#BindStateChangeEvent|BindStateChangeEvent]]
 
|-
 
|-
| 1 || [[#UnbindStateChangeEvent]]
+
| 1 || [[#UnbindStateChangeEvent|UnbindStateChangeEvent]]
 
|-
 
|-
| 2 || [[#SetChargerTypeChangeEventEnabled]]
+
| 2 || [[#SetChargerTypeChangeEventEnabled|SetChargerTypeChangeEventEnabled]]
 
|-
 
|-
| 3 || [[#SetPowerSupplyChangeEventEnabled]]
+
| 3 || [[#SetPowerSupplyChangeEventEnabled|SetPowerSupplyChangeEventEnabled]]
 
|-
 
|-
| 4 || [[#SetBatteryVoltageStateChangeEventEnabled]]
+
| 4 || [[#SetBatteryVoltageStateChangeEventEnabled|SetBatteryVoltageStateChangeEventEnabled]]
 
|}
 
|}
    
=== BindStateChangeEvent ===
 
=== BindStateChangeEvent ===
No input, returns an output event with autoclear disabled.
+
No input. Returns an output Event handle with EventClearMode=0.
    
=== UnbindStateChangeEvent ===
 
=== UnbindStateChangeEvent ===
Line 160: Line 166:     
=== SetChargerTypeChangeEventEnabled ===
 
=== SetChargerTypeChangeEventEnabled ===
Takes an input u8 bool, no output.
+
Takes an input bool. No output.
    
=== SetPowerSupplyChangeEventEnabled ===
 
=== SetPowerSupplyChangeEventEnabled ===
Takes an input u8 bool, no output.
+
Takes an input bool. No output.
    
=== SetBatteryVoltageStateChangeEventEnabled ===
 
=== SetBatteryVoltageStateChangeEventEnabled ===
Takes an input u8 bool, no output.
+
Takes an input bool. No output.
 +
 
 +
= psm:manu =
 +
This is "nn::psm::IPsmManufactureServer".
 +
 
 +
This service is not present in retail units.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#EnableVdd50StateControl|EnableVdd50StateControl]]
 +
|-
 +
| 1 || [[#DisableVdd50StateControl|DisableVdd50StateControl]]
 +
|-
 +
| 2 || [[#SetVdd50State|SetVdd50State]]
 +
|}
 +
 
 +
== EnableVdd50StateControl ==
 +
Unofficial name.
 +
 
 +
No input/output.
 +
 
 +
== DisableVdd50StateControl ==
 +
Unofficial name.
 +
 
 +
No input/output.
 +
 
 +
== SetVdd50State ==
 +
Unofficial name.
 +
 
 +
Takes an input [[#Vdd50State]]. No output.
    
= tc =
 
= tc =
Line 177: Line 214:  
| 0 || SetOperatingMode
 
| 0 || SetOperatingMode
 
|-
 
|-
| 1 || GetThermalEvent
+
| 1 || [1.0.0-10.2.0] GetThermalEvent
 
|-
 
|-
| 2 ||
+
| 2 || IsActionAllowed
 
|-
 
|-
| 3 ||
+
| 3 || EnableVirtualTemperature
 
|-
 
|-
| 4 ||
+
| 4 || DisableVirtualTemperature
 
|-
 
|-
| 5 ||
+
| 5 || SetVirtualTemperature
 
|-
 
|-
| 6 ||
+
| 6 || EnableFanControl
 
|-
 
|-
| 7 ||
+
| 7 || DisableFanControl
 
|-
 
|-
| 8 ||
+
| 8 || IsFanControlEnabled
 
|-
 
|-
| 9 || [5.0.0+]
+
| 9 || [5.0.0+] GetSkinTemperatureMilliC
 +
|-
 +
| 10 || [11.0.0+] LoadAndApplySettings
 
|}
 
|}
   Line 203: Line 242:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||
+
| 0 || [[#GetTemperatureRange|GetTemperatureRange]]
 
|-
 
|-
| 1 ||
+
| 1 || [[#GetTemperature|GetTemperature]]
 
|-
 
|-
| 2 ||
+
| 2 || [1.0.0-13.2.1] [[#SetMeasurementMode|SetMeasurementMode]]
 
|-
 
|-
| 3 ||
+
| 3 || [1.0.0-13.2.1] [[#GetTemperatureMilliC|GetTemperatureMilliC]]
 
|-
 
|-
| 4 || [8.0.0+] ? (Takes a total of 4-bytes of input, returns an [[#IUnknown0]])
+
| 4 || [8.0.0+] [[#OpenSession_2|OpenSession]]
 
|}
 
|}
   −
== IUnknown0 ==
+
== GetTemperatureRange ==
Added with [8.0.0+].
+
Takes an u8 [[#Location]] and returns an s32 minimum temperature + s32 maximum temperature.
 +
 
 +
The returned temperature values are in Celsius.
 +
 
 +
== GetTemperature ==
 +
Takes an u8 [[#Location]] and returns an output s32.
 +
 
 +
The output is the temperature in Celsius.
 +
 
 +
== SetMeasurementMode ==
 +
Takes an u8 [[#Location]] and an u8 MeasurementMode, no output.
 +
 
 +
== GetTemperatureMilliC ==
 +
Takes an u8 [[#Location]] and returns an output s32.
 +
 
 +
The output is the temperature in MilliC.
 +
 
 +
== OpenSession ==
 +
Takes a total of 4-bytes of input. Returns an [[#ISession]].
 +
 
 +
== ISession ==
 +
This is "nn::ts::server::ISession".
 +
 
 +
This was added with [8.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 223: Line 285:  
| 0 ||  
 
| 0 ||  
 
|-
 
|-
| 1 ||  
+
| 1 || [8.0.0-13.2.1]
 
|-
 
|-
 
| 2 ||  
 
| 2 ||  
 
|-
 
|-
| 3 ||  
+
| 3 || [8.0.0-13.2.1]
 +
|-
 +
| 4 || [10.0.0+]
 
|}
 
|}
    
= pcm =
 
= pcm =
 
This is "nn::pcm::IManager".
 
This is "nn::pcm::IManager".
 +
 +
[4.0.0+] This service was moved to '''nvdbgsvc''' and is only available to SDEV units.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 240: Line 306:  
|-
 
|-
 
| 1 || ReadCurrentPower
 
| 1 || ReadCurrentPower
 +
|-
 +
| 2 || [4.0.0+] IsServiceEnabled
 +
|-
 +
| 3 || [4.0.0+] ReadCurrentVoltage
 
|}
 
|}
   Line 253: Line 323:  
| 0 || [[#OpenSession]]
 
| 0 || [[#OpenSession]]
 
|-
 
|-
| 1 || GetPerformanceMode
+
| 1 || [[#GetPerformanceMode]]
 
|-
 
|-
 
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]
 
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]
Line 259: Line 329:     
== OpenSession ==
 
== OpenSession ==
Returns an [[#ISession]].
+
No input. Returns an output [[#ISession]].
 +
 
 +
== GetPerformanceMode ==
 +
No input. Returns an output [[#PerformanceMode]].
    
== IsCpuOverclockEnabled ==
 
== IsCpuOverclockEnabled ==
No input, returns an output u8 bool.
+
No input. Returns an output bool.
    
= apm:sys =
 
= apm:sys =
Line 271: Line 344:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || RequestPerformanceMode
+
| 0 || [[#RequestPerformanceMode]]
 
|-
 
|-
| 1 || GetPerformanceEvent
+
| 1 || [[#GetPerformanceEvent]]
 
|-
 
|-
| 2 || GetThrottlingState
+
| 2 || [[#GetThrottlingState]]
 
|-
 
|-
| 3 || GetLastThrottlingState
+
| 3 || [[#GetLastThrottlingState]]
 
|-
 
|-
| 4 || ClearLastThrottlingState
+
| 4 || [[#ClearLastThrottlingState]]
 
|-
 
|-
| 5 || [5.0.0+] LoadAndApplySettings
+
| 5 || [5.0.0+] [[#LoadAndApplySettings]]
 
|-
 
|-
 
| 6 || [7.0.0+] [[#SetCpuBoostMode]]
 
| 6 || [7.0.0+] [[#SetCpuBoostMode]]
Line 287: Line 360:  
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]
 
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]
 
|}
 
|}
 +
 +
== RequestPerformanceMode ==
 +
Takes an input [[#PerformanceMode]]. No output.
    
== GetPerformanceEvent ==
 
== GetPerformanceEvent ==
Returns an [[#ISession]].
+
Takes an input [[#EventTarget]]. Returns an Event handle with EventClearMode 0.
 +
 
 +
== GetThrottlingState ==
 +
No input. Returns an output [[#ThrottlingState]].
 +
 
 +
== GetLastThrottlingState ==
 +
No input. Returns an output [[#ThrottlingState]].
 +
 
 +
== ClearLastThrottlingState ==
 +
No input/output.
 +
 
 +
== LoadAndApplySettings ==
 +
No input/output.
    
== SetCpuBoostMode ==
 
== SetCpuBoostMode ==
Takes an u32 [[#CpuBoostMode]].
+
Takes an input [[#CpuBoostMode]]. No output.
 +
 
 +
== GetCurrentPerformanceConfiguration ==
 +
No input. Returns an output [[#PerformanceConfiguration]] (default value is 0x00020003).
 +
 
 +
= ISession =
 +
This is "nn::apm::ISession".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#SetPerformanceConfiguration]]
 +
|-
 +
| 1 || [[#GetPerformanceConfiguration]]
 +
|-
 +
| 2 || [8.0.0+] [[#SetCpuOverclockEnabled]]
 +
|}
 +
 
 +
== SetPerformanceConfiguration ==
 +
Takes an input [[#PerformanceMode]] and an input [[#PerformanceConfiguration]]. No output.
 +
 
 +
== GetPerformanceConfiguration ==
 +
Takes an input [[#PerformanceMode]]. Returns an output [[#PerformanceConfiguration]].
 +
 
 +
== SetCpuOverclockEnabled ==
 +
Takes an input bool. No output.
 +
 
 +
= fgm, fgm:0, fgm:1, fgm:2, fgm:3, fgm:4, fgm:5, fgm:6, fgm:7, fgm:9 =
 +
These are "nn::fgm::sf::ISession".
 +
 
 +
Each service represents a different priority from 0 (Highest/Thermal) to 9 (Lowest). The "fgm" service represents priority 8 (Default).
 +
 
 +
[2.0.0+] Only "fgm", "fgm:0" and "fgm:9" are now valid.
   −
=== CpuBoostMode ===
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Mode || Description
+
! Cmd || Name
 
|-
 
|-
| 0 || Disabled.
+
| 0 || [[#Initialize]]
 +
|}
 +
 
 +
== Initialize ==
 +
No input. Returns an output [[#IRequest]].
 +
 
 +
== IRequest ==
 +
This is "nn::fgm::sf::IRequest".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#Initialize_2|Initialize]]
 +
|-
 +
| 1 || [[#Set|Set]]
 +
|-
 +
| 2 || [[#Get|Get]]
 +
|-
 +
| 3 || [[#Cancel|Cancel]]
 +
|}
 +
 
 +
=== Initialize ===
 +
Takes a PID-descriptor, a [[#Module|ModuleId]] and a reserved input u64. Returns an Event handle with EventClearMode 0.
 +
 
 +
=== Set ===
 +
Takes 2 u32s '''ClockRateMin''' and '''ClockRateMax'''. No output.
 +
 
 +
=== Get ===
 +
No input. Returns an u32 '''ClockRateActual'''.
 +
 
 +
=== Cancel ===
 +
No input/output.
 +
 
 +
= fgm:dbg =
 +
This is "nn::fgm::sf::IDebugger".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#Initialize_3|Initialize]]
 
|-
 
|-
| 1 || Use [[#PerformanceConfiguration|performance configurations]] 0x92220009 and 0x9222000A, or 0x9222000B and 0x9222000C.
+
| 1 || [[#Read|Read]]
 
|-
 
|-
| 2 || Use [[#PerformanceConfiguration|performance configurations]] 0x9222000B and 0x9222000C.
+
| 2 || [[#Cancel_2|Cancel]]
 
|}
 
|}
   −
== GetCurrentPerformanceConfiguration ==
+
== Initialize ==
Returns the currently active [[#PerformanceConfiguration]] (default value is 0x00020003).
+
Takes the current process handle (0xFFFF8001) and an input u64 '''MemorySize'''. Returns an Event handle with EventClearMode 0.
 +
 
 +
== Read ==
 +
Takes a type-0x6 output buffer of [[#DebugEntry|DebugEntry]]. Returns three output s32s '''NumberReadOut''', '''NumberLostOut''' and '''NumberRemainingOut'''.
 +
 
 +
== Cancel ==
 +
No input/output.
 +
 
 +
= lbl =
 +
This is "nn::lbl::detail::ILblController".
 +
 
 +
[10.0.0+] This was moved from [[Backlight_services|lbl]].
   −
= ISession =
+
[11.0.0+] this was moved into [[Display_services|vi]].
This is "nn::apm::ISession".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 316: Line 487:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || SetPerformanceConfiguration
+
| 0 || SaveCurrentSetting
 
|-
 
|-
| 1 || GetPerformanceConfiguration
+
| 1 || LoadCurrentSetting
 
|-
 
|-
| 2 || [8.0.0+] [[#SetCpuOverclockEnabled]]
+
| 2 || SetCurrentBrightnessSetting
 +
|-
 +
| 3 || GetCurrentBrightnessSetting
 +
|-
 +
| 4 || ApplyCurrentBrightnessSettingToBacklight
 +
|-
 +
| 5 || GetBrightnessSettingAppliedToBacklight
 +
|-
 +
| 6 || SwitchBacklightOn
 +
|-
 +
| 7 || SwitchBacklightOff
 +
|-
 +
| 8 || GetBacklightSwitchStatus
 +
|-
 +
| 9 || EnableDimming
 +
|-
 +
| 10 || DisableDimming
 +
|-
 +
| 11 || IsDimmingEnabled
 +
|-
 +
| 12 || EnableAutoBrightnessControl
 +
|-
 +
| 13 || DisableAutoBrightnessControl
 +
|-
 +
| 14 || IsAutoBrightnessControlEnabled
 +
|-
 +
| 15 || SetAmbientLightSensorValue
 +
|-
 +
| 16 || GetAmbientLightSensorValue
 +
|-
 +
| 17 || SetBrightnessReflectionDelayLevel
 +
|-
 +
| 18 || GetBrightnessReflectionDelayLevel
 +
|-
 +
| 19 || SetCurrentBrightnessMapping
 +
|-
 +
| 20 || GetCurrentBrightnessMapping
 +
|-
 +
| 21 || SetCurrentAmbientLightSensorMapping
 +
|-
 +
| 22 || GetCurrentAmbientLightSensorMapping
 +
|-
 +
| 23 || [3.0.0+] IsAmbientLightSensorAvailable
 +
|-
 +
| 24 || [3.0.0+] SetCurrentBrightnessSettingForVrMode
 +
|-
 +
| 25 || [3.0.0+] GetCurrentBrightnessSettingForVrMode
 +
|-
 +
| 26 || [3.0.0+] EnableVrMode
 +
|-
 +
| 27 || [3.0.0+] DisableVrMode
 +
|-
 +
| 28 || [3.0.0+] IsVrModeEnabled
 +
|-
 +
| 29 || [7.0.0+] IsAutoBrightnessControlSupported
 +
|}
 +
 
 +
= ChargerType =
 +
This is "nn::psm::ChargerType".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Name
 +
|-
 +
| 0 || Unconnected
 +
|-
 +
| 1 || EnoughPower
 +
|-
 +
| 2 || LowPower
 +
|-
 +
| 3 || NotSupported
 
|}
 
|}
   −
== SetPerformanceConfiguration ==
+
= Vdd50State =
Takes an u32 [[#PerformanceMode]] and an u32 [[#PerformanceConfiguration]].
+
This is "nn::psm::Vdd50State".
   −
== GetPerformanceConfiguration ==
+
{| class="wikitable" border="1"
Takes an u32 [[#PerformanceMode]] and returns an output u32 [[#PerformanceConfiguration]].
+
|-
 +
! Value || Name
 +
|-
 +
| 0 || Unknown
 +
|-
 +
| 1 || Vdd50AOffVdd50BOff
 +
|-
 +
| 2 || Vdd50AOnVdd50BOff
 +
|-
 +
| 3 || Vdd50AOffVdd50BOn
 +
|}
   −
== SetCpuOverclockEnabled ==
+
= BatteryVoltageState =
Takes an input u8 bool, no output.
+
This is "nn::psm::BatteryVoltageState".
   −
== PerformanceMode ==
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || Handheld
+
| 0 || ShutdownRequired
 +
|-
 +
| 1 || SleepRequired
 +
|-
 +
| 2 || BoostPerformanceModeProhibited
 
|-
 
|-
| 1 || Docked
+
| 3 || Good
 
|}
 
|}
   −
== PerformanceConfiguration ==
+
= BatteryChargeInfoFields =  
 +
This is a 0x40-byte struct.
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value || CPU clock || GPU clock || Memory clock
+
! Offset || Size || Description
 
|-
 
|-
| 0x00010000 || 1020 || 384 || 1600
+
| 0x00 || 0x4 || u32. Input (Sink) current limit in mA
 
|-
 
|-
| 0x00010001 || 1020 || 768 || 1600
+
| 0x04 || 0x4 || u32. Output (Source/Vbus/OTG) current limit in mA
 
|-
 
|-
| 0x00010002 || 1224 || 691.2 || 1600
+
| 0x08 || 0x4 || u32. Battery charging current limit in mA
 
|-
 
|-
| 0x00020000 || 1020 || 230.4 || 1600
+
| 0x0C || 0x4 || u32. Battery charging voltage limit in mV
 
|-
 
|-
| 0x00020001 || 1020 || 307.2 || 1600
+
| 0x10 || 0x4 || enum, same as power-role? Always 1 except when OTG where it becomes 2
 
|-
 
|-
| 0x00020002 || 1224 || 230.4 || 1600
+
| 0x14 || 0x4 || Bit field (bit8: Enable Battery Charging)
 
|-
 
|-
| 0x00020003 || 1020 || 307 || 1331.2
+
| 0x18 || 0x4 || u32. Charging limits state based on battery temperature
 
|-
 
|-
| 0x00020004 || 1020 || 384 || 1331.2
+
| 0x1C || 0x4 || u32. Battery Temperature (milli C)
 
|-
 
|-
| 0x00020005 || 1020 || 307.2 || 1065.6
+
| 0x20 || 0x4 || u32. Capacity now per cent-mille (i.e. 100% = 100000 pcm)
 
|-
 
|-
| 0x00020006 || 1020 || 384 || 1065.6
+
| 0x24 || 0x4 || u32. Voltage avg in mV
 
|-
 
|-
| 0x92220007 || 1020  || 460.8 || 1600
+
| 0x28 || 0x4 || u32. Battery age (capacity full / capacity design) per cent-mille (i.e. 100% = 100000 pcm)
 
|-
 
|-
| 0x92220008 || 1020 || 460.8 || 1331.2
+
| 0x2C || 0x4 || enum. Power role (0: Unknown, 1: Sink, 2: Source)
 
|-
 
|-
| [7.0.0+] 0x92220009 || 1785 || 768 || 1600
+
| 0x30 || 0x4 || enum. [[#Charger]]
 
|-
 
|-
| [7.0.0+] 0x9222000A || 1785 || 768 || 1331.2
+
| 0x34 || 0x4 || u32. Charger voltage limit in mV
 
|-
 
|-
| [7.0.0+] 0x9222000B || 1020 || 768 || 1600
+
| 0x38 || 0x4 || u32. Charger current limit in mA
 
|-
 
|-
| [7.0.0+] 0x9222000C || 1020 || 768 || 1331.2
+
| 0x3C || 0x4 || Bit field (bit0: potentially no hub, bit8: Joy-con charging, bit12: OTG)
 
|}
 
|}
   −
Clocks are all in MHz.
+
=== Charger ===
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Name
 +
|-
 +
| 0 || Unknown
 +
|-
 +
| 1 || PD
 +
|-
 +
| 2 || Type-C 1.5A
 +
|-
 +
| 3 || Type-C 3.0A
 +
|-
 +
| 4 || DCP
 +
|-
 +
| 5 || CDP
 +
|-
 +
| 6 || SDP
 +
|-
 +
| 7 || Apple 500mA
 +
|-
 +
| 8 || Apple 1000mA
 +
|-
 +
| 9 || Apple 2000mA
 +
|}
 +
 
 +
= Location =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Name
 +
|-
 +
| 0 || Internal
 +
|-
 +
| 1 || External
 +
|}
 +
 
 +
= CpuBoostMode =
 +
This is "nn::apm::CpuBoostMode".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || 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.
 +
|}
 +
 
 +
= PerformanceMode =
 +
This is "nn::apm::PerformanceMode".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| -1 || Invalid
 +
|-
 +
| 0 || Normal
 +
|-
 +
| 1 || Boost
 +
|}
 +
 
 +
= PerformanceConfiguration =
 +
This is "nn::apm::PerformanceConfiguration".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description || CPU clock (MHz) || GPU clock (MHz) || Memory clock (MHz)
 +
|-
 +
| 0x00000000 || Invalid || 0 || 0 || 0
 +
|-
 +
| 0x00010000 || Cpu1020MhzGpu384Mhz || 1020.0 || 384.0 || 1600.0
 +
|-
 +
| 0x00010001 || Cpu1020MhzGpu768Mhz || 1020.0 || 768.0 || 1600.0
 +
|-
 +
| 0x00010002 || Cpu1224MhzGpu691Mhz || 1224.0 || 691.2 || 1600.0
 +
|-
 +
| 0x00020000 || Cpu1020MhzGpu230Mhz|| 1020.0 || 230.4 || 1600.0
 +
|-
 +
| 0x00020001 || Cpu1020MhzGpu307Mhz || 1020.0 || 307.2 || 1600.0
 +
|-
 +
| 0x00020002 || Cpu1224MhzGpu230Mhz || 1224.0 || 230.4 || 1600.0
 +
|-
 +
| 0x00020003 || Cpu1020MhzGpu307MhzEmc1331Mhz || 1020.0 || 307.2 || 1331.2
 +
|-
 +
| 0x00020004 || Cpu1020MhzGpu384MhzEmc1331Mhz || 1020.0 || 384.0 || 1331.2
 +
|-
 +
| 0x00020005 || Cpu1020MhzGpu307MhzEmc1065Mhz || 1020.0 || 307.2 || 1065.6
 +
|-
 +
| 0x00020006 || Cpu1020MhzGpu384MhzEmc1065Mhz || 1020.0 || 384.0 || 1065.6
 +
|-
 +
| 0x92220007 || Cpu1020MhzGpu460MhzEmc1600Mhz || 1020.0 || 460.8 || 1600.0
 +
|-
 +
| 0x92220008 || Cpu1020MhzGpu460MhzEmc1331Mhz || 1020.0 || 460.8 || 1331.2
 +
|-
 +
| [7.0.0+] 0x92220009 || Cpu1785MhzGpu76MhzEmc1600Mhz || 1785.0 || 76.8 || 1600.0
 +
|-
 +
| [7.0.0+] 0x9222000A || Cpu1785MhzGpu76MhzEmc1331Mhz || 1785.0 || 76.8 || 1331.2
 +
|-
 +
| [7.0.0+] 0x9222000B || Cpu1020MhzGpu76MhzEmc1600Mhz || 1020.0 || 76.8 || 1600.0
 +
|-
 +
| [7.0.0+] 0x9222000C || Cpu1020MhzGpu76MhzEmc1331Mhz || 1020.0 || 76.8 || 1331.2
 +
|}
    
Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 are only available for SDEV units.
 
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.
+
= EventTarget =
 +
This is "nn::apm::EventTarget".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| 0 || PerformanceModeChanged
 +
|-
 +
| 1 || SleepRequiredByLowVoltage
 +
|}
 +
 
 +
= ThrottlingState =
 +
This is "nn::apm::ThrottlingState".
   −
= fgm, fgm:0, fgm:9 =
+
{| class="wikitable" border="1"
This is "nn::fgm::sf::ISession".
+
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || DurationNanoSeconds
 +
|-
 +
| 0x8 || 0x4 || ThrottlingRateCpuDividend
 +
|-
 +
| 0xC || 0x4 || ThrottlingRateCpuDivisor
 +
|-
 +
| 0x10 || 0x4 || ThrottlingRateGpuDividend
 +
|-
 +
| 0x14 || 0x4 || ThrottlingRateGpuDivisor
 +
|-
 +
| 0x18 || 0x4 || ThrottleStatus
 +
|-
 +
| 0x1C || 0x4 || CpuPSkipStatus
 +
|-
 +
| 0x20 || 0x4 || GpuPSkipStatus
 +
|-
 +
| 0x24 || 0x1 || Enabled
 +
|-
 +
| 0x25 || 0x1 || Invoked
 +
|-
 +
| 0x26 || 0x2 || Reserved
 +
|}
 +
 
 +
= Module =
 +
This is "nn::fgm::Module".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Name || Block
 +
|-
 +
| 0 || Cpu
 +
|-
 +
| 1 || Gpu
 +
|-
 +
| 2 || Emc
 +
|-
 +
| 3 || SysBus
 +
|-
 +
| 4 || Mselect
 +
|-
 +
| 5 || Nvdec
 +
|-
 +
| 6 || Nvenc
 +
|-
 +
| 7 || Nvjpg
 +
|-
 +
| 8 || Test
 +
|}
 +
 
 +
= EventId =
 +
This is "nn::fgm::EventId".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Name || Block
 +
|-
 +
| 0 || Set
 +
|-
 +
| 1 || Unset
 +
|-
 +
| 2 || Completion
 +
|}
 +
 
 +
= DebugEntry =
 +
This is "nn::fgm::DebugEntry".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || [[#EventId|EventId]]
 +
|-
 +
| 0x4 || 0x4 || [[#Module|ModuleId]]
 +
|-
 +
| 0x8 || 0x8 || Timestamp
 
|-
 
|-
| 0 || Initialize
+
| 0x10 || 0x40 || [[#RequestEntry|RequestEntry]] (EventId = Set), empty (EventId = Unset) or [[#CompletionEntry|CompletionEntry]] (EventId = Completion)
 
|}
 
|}
   −
== IRequest ==
+
= RequestEntry =
This is "nn::fgm::sf::IRequest".
+
This is "nn::fgm::RequestEntry".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || ProcessId
 
|-
 
|-
| 0 || Initialize
+
| 0x8 || 0x4 || Priority
 
|-
 
|-
| 1 || Set
+
| 0xC || 0x4 || ClockRateMin
 
|-
 
|-
| 2 || Get
+
| 0x10 || 0x4 || ClockRateMax
 
|-
 
|-
| 3 || Cancel
+
| 0x14 || 0x2C || Reserved
 
|}
 
|}
   −
= fgm:dbg =
+
= CompletionEntry =
This is "nn::fgm::sf::IDebugger".
+
This is "nn::fgm::CompletionEntry".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || ClockRateMin
 
|-
 
|-
| 0 || Initialize
+
| 0x4 || 0x4 || ClockRateMax
 
|-
 
|-
| 1 || Read
+
| 0x8 || 0x4 || ClockRateActual
 
|-
 
|-
| 2 || Cancel
+
| 0xC || 0x34 || Reserved
 
|}
 
|}
  

Navigation menu