Difference between revisions of "PCV services"

From Nintendo Switch Brew
Jump to navigation Jump to search
 
(23 intermediate revisions by 2 users not shown)
Line 16: Line 16:
 
| 4 || [[#GetAcOk]]
 
| 4 || [[#GetAcOk]]
 
|-
 
|-
| 5 || [[#GetBoardPowerControlEvent]]
+
| 5 || [[#GetPowerEvent]]
 
|-
 
|-
| 6 || [2.0.0+] [[#GetSleepButtonState]]
+
| 6 || [2.0.0-13.2.1] [[#GetSleepButtonState]]
 
|-
 
|-
| 7 || [2.0.0+] [[#GetPowerEvent]]
+
| 7 || [2.0.0+] [[#GetPowerButtonEvent]]
 
|-
 
|-
 
| 8 || [2.0.0-9.2.0] [[#CreateWakeupTimer]]
 
| 8 || [2.0.0-9.2.0] [[#CreateWakeupTimer]]
Line 36: Line 36:
 
| 14 || [6.0.0+] [[#GetPowerButton]]
 
| 14 || [6.0.0+] [[#GetPowerButton]]
 
|-
 
|-
| 15 || [10.0.0+] [[#SetEnableWakeupTimer]]
+
| 15 || [10.0.0+] [[#SetUpRtcResetOnShutdown]]
 
|}
 
|}
  
Line 54: Line 54:
 
No input. Returns an output bool.
 
No input. Returns an output bool.
  
== GetBoardPowerControlEvent ==
+
== GetPowerEvent ==
 
Takes an input [[#BoardPowerControlEventTarget|BoardPowerControlEventTarget]]. Returns an output Event handle.
 
Takes an input [[#BoardPowerControlEventTarget|BoardPowerControlEventTarget]]. Returns an output Event handle.
  
Line 60: Line 60:
 
No input. Returns an output [[#SleepButtonState|SleepButtonState]].
 
No input. Returns an output [[#SleepButtonState|SleepButtonState]].
  
== GetPowerEvent ==
+
== GetPowerButtonEvent ==
 
Takes an input [[#EventTarget|EventTarget]]. Returns an output Event handle.
 
Takes an input [[#EventTarget|EventTarget]]. Returns an output Event handle.
  
Line 86: Line 86:
 
No input. Returns an output bool '''IsPushed'''.
 
No input. Returns an output bool '''IsPushed'''.
  
== SetEnableWakeupTimer ==
+
== SetUpRtcResetOnShutdown ==
Unofficial name.
 
 
 
 
No input/output. Enables an internal wakeup timer when calling [[#ShutdownSystem|ShutdownSystem]] or [[#RebootSystem|RebootSystem]].
 
No input/output. Enables an internal wakeup timer when calling [[#ShutdownSystem|ShutdownSystem]] or [[#RebootSystem|RebootSystem]].
  
Line 143: Line 141:
 
| 4 || [[#GetAcOk]]
 
| 4 || [[#GetAcOk]]
 
|-
 
|-
| 5 || [[#GetBoardPowerControlEvent]]
+
| 5 || [[#GetPowerEvent]]
 
|}
 
|}
  
Line 157: Line 155:
 
| 0 || [[#GetSleepButtonState]]
 
| 0 || [[#GetSleepButtonState]]
 
|-
 
|-
| 1 || [[#GetPowerEvent]]
+
| 1 || [[#GetPowerButtonEvent]]
 
|}
 
|}
  
Line 376: Line 374:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#OpenSession]]
+
| 0 || [[#OpenSession|OpenSession]]
 
|-
 
|-
| 1 || GetTemperatureThresholds
+
| 1 || [[#GetTemperatureThresholds|GetTemperatureThresholds]]
 
|-
 
|-
| 2 || SetTemperature
+
| 2 || [[#NotifyTemperature|NotifyTemperature]]
 
|-
 
|-
| 3 ||  
+
| 3 || [[#GetClkrstStateTable|GetClkrstStateTable]]
 
|-
 
|-
| 4 ||  
+
| 4 || [[#GetClkrstStateTableUpdateEvent|GetClkrstStateTableUpdateEvent]]
 
|-
 
|-
| 5 || [[#GetClockModuleNumLimit]]
+
| 5 || [[#GetClkrstStateTableCount|GetClkrstStateTableCount]]
 +
|-
 +
| 6 || [15.0.0+] PrintClockTree
 
|}
 
|}
  
Line 392: Line 392:
 
Takes an input [[#Module|DeviceCode]] and an input u32. Returns an [[#IClkrstSession]].
 
Takes an input [[#Module|DeviceCode]] and an input u32. Returns an [[#IClkrstSession]].
  
== GetClockModuleNumLimit ==
+
== NotifyTemperature ==
Returns 0x1A.
+
Takes an input float. No output.
 +
 
 +
== GetClkrstStateTable ==
 +
Takes a type-0xA output buffer of [[#ModuleState|ModuleState]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''.
 +
 
 +
[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer.
 +
 
 +
== GetClkrstStateTableUpdateEvent ==
 +
No input. Returns an output Event handle.
 +
 
 +
== GetClkrstStateTableCount ==
 +
No input. Returns 0x1A.
  
 
== IClkrstSession ==
 
== IClkrstSession ==
Line 402: Line 413:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || SetClockEnabled
+
| 0 || EnableClock
 
|-
 
|-
| 1 || SetClockDisabled
+
| 1 || DisableClock
 
|-
 
|-
| 2 || SetResetAsserted
+
| 2 || AssertReset
 
|-
 
|-
| 3 || SetResetDeasserted
+
| 3 || DeassertReset
 
|-
 
|-
| 4 || SetPowerEnabled
+
| 4 || EnablePower
 
|-
 
|-
| 5 || SetPowerDisabled
+
| 5 || DisablePower
 
|-
 
|-
| 6 || GetState
+
| 6 || GetModuleState
 
|-
 
|-
 
| 7 || SetClockRate
 
| 7 || SetClockRate
Line 420: Line 431:
 
| 8 || GetClockRate
 
| 8 || GetClockRate
 
|-
 
|-
| 9 || SetMinVClockRate
+
| 9 || SetMinimumVoltageClockRate
 
|-
 
|-
 
| 10 || GetPossibleClockRates
 
| 10 || GetPossibleClockRates
 
|-
 
|-
 
| 11 || GetDvfsTable
 
| 11 || GetDvfsTable
 +
|-
 +
| 12 || [14.0.0+] IsParentClock
 +
|-
 +
| 13 || [14.0.0+] SetParentClock
 +
|-
 +
| 14 || [18.0.0+]
 +
|-
 +
| 15 || [18.0.0+]
 
|}
 
|}
  
Line 451: Line 470:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#OpenSession]]
+
| 0 || [[#OpenSession_2|OpenSession]]
 
|-
 
|-
| 1 ||  
+
| 1 || [[#GetRegulatorStateTable|GetRegulatorStateTable]]
 
|-
 
|-
| 2 ||  
+
| 2 || [[#GetRegulatorStateTableUpdateEvent|GetRegulatorStateTableUpdateEvent]]
 
|-
 
|-
| 3 || [[#GetPowerModuleNumLimit]]
+
| 3 || [[#GetRegulatorStateTableCount|GetRegulatorStateTableCount]]
 
|}
 
|}
  
Line 463: Line 482:
 
Takes an input [[#PowerDomain|DeviceCode]] and returns an [[#IRegulatorSession]].
 
Takes an input [[#PowerDomain|DeviceCode]] and returns an [[#IRegulatorSession]].
  
== GetPowerModuleNumLimit ==
+
== GetRegulatorStateTable ==
Returns 0x3.
+
Takes a type-0xA output buffer of [[#PowerDomainState|PowerDomainState]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''.
 +
 
 +
[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer.
 +
 
 +
== GetRegulatorStateTableUpdateEvent ==
 +
No input. Returns an output Event handle.
 +
 
 +
== GetRegulatorStateTableCount ==
 +
No input. Returns 0x3.
  
 
== IRegulatorSession ==
 
== IRegulatorSession ==
Line 473: Line 500:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || SetVoltageEnabled
+
| 0 || RequestOutput
 +
|-
 +
| 1 || CancelOutputRequest
 +
|-
 +
| 2 || IsOutputEnabled
 +
|-
 +
| 3 || GetVoltageRangeInMicroVolt
 
|-
 
|-
| 1 ||
+
| 4 || GetVoltageInMicroVolt
 
|-
 
|-
| 2 || GetVoltageEnabled
+
| 5 || RequestVoltageInMicroVolt
 
|-
 
|-
| 3 || GetVoltageRange
+
| 6 || CancelVoltageRequest
 
|-
 
|-
| 4 || GetVoltageValue
+
| 7 || [13.0.0+] [[#GetMinimumOffStateHoldTime|GetMinimumOffStateHoldTime]]
 
|-
 
|-
| 5 || SetVoltageValue
+
| 8 || [13.0.0+] [[#RequestMinimumOffStateHoldTime|RequestMinimumOffStateHoldTime]]
 
|-
 
|-
| 6 || ChangeVoltage
+
| 9 || [13.0.0+] [[#CancelMinimumOffStateHoldTimeRequest|CancelMinimumOffStateHoldTimeRequest]]
 
|}
 
|}
 +
 +
=== GetMinimumOffStateHoldTime ===
 +
No input. Returns an output u64.
 +
 +
=== RequestMinimumOffStateHoldTime ===
 +
Takes an input u64. No output.
 +
 +
=== CancelMinimumOffStateHoldTimeRequest ===
 +
No input/output.
  
 
= rtc =
 
= rtc =
 +
This is "nn::rtc::IRtcManager".
 +
 
This was added with [8.0.0+].
 
This was added with [8.0.0+].
  
Line 495: Line 539:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetRtcTime_2|GetRtcTime]]
+
| 0 || [[#GetTimeInSeconds|GetTimeInSeconds]]
 
|-
 
|-
| 1 || [[#SetRtcTime_2|SetRtcTime]]
+
| 1 || [[#SetTimeInSeconds|SetTimeInSeconds]]
 
|-
 
|-
| 2 || [[#SetUpRtcResetOnShutdown_2|SetUpRtcResetOnShutdown]]
+
| 2 || [[#SetResetOnShutdown|SetResetOnShutdown]]
 
|-
 
|-
| 3 || [[#GetRtcResetDetected_2|GetRtcResetDetected]]
+
| 3 || [[#GetResetDetected|GetResetDetected]]
 
|-
 
|-
| 4 || [[#ClearRtcResetDetected_2|ClearRtcResetDetected]]
+
| 4 || [[#ClearResetDetected|ClearResetDetected]]
 
|-
 
|-
| 10 || [10.0.0+]
+
| 10 || [10.0.0+] [[#EnableAlarm|EnableAlarm]]
 
|-
 
|-
| 11 || [10.0.0+]  
+
| 11 || [10.0.0+] [[#DisableRtcAlarm|DisableRtcAlarm]]
 +
|-
 +
| 12 || [18.0.0+]
 +
|-
 +
| 13 || [18.0.0+]  
 
|}
 
|}
  
== GetRtcTime ==
+
== GetTimeInSeconds ==
 
Same as [[#GetRtcTime|GetRtcTime]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
 
Same as [[#GetRtcTime|GetRtcTime]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
  
== SetRtcTime ==
+
== SetTimeInSeconds ==
 
Same as [[#SetRtcTime|SetRtcTime]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
 
Same as [[#SetRtcTime|SetRtcTime]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
  
== SetUpRtcResetOnShutdown ==
+
== SetResetOnShutdown ==
 
Takes an input bool '''DoReset''' and an input [[Bus_services#I2cDevice|DeviceCode]]. Similar to [[#SetUpRtcResetOnShutdown|SetUpRtcResetOnShutdown]], but this version assigns the provided boolean value on a per-client basis (instead of a global variable) and checks it when the current [[PSC_services#Power_Management_States|power state]] is '''ReadyShutdown'''.
 
Takes an input bool '''DoReset''' and an input [[Bus_services#I2cDevice|DeviceCode]]. Similar to [[#SetUpRtcResetOnShutdown|SetUpRtcResetOnShutdown]], but this version assigns the provided boolean value on a per-client basis (instead of a global variable) and checks it when the current [[PSC_services#Power_Management_States|power state]] is '''ReadyShutdown'''.
  
== GetRtcResetDetected ==
+
== GetResetDetected ==
 
Same as [[#GetRtcResetDetected|GetRtcResetDetected]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
 
Same as [[#GetRtcResetDetected|GetRtcResetDetected]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
  
== ClearRtcResetDetected ==
+
== ClearResetDetected ==
 
Same as [[#ClearRtcResetDetected|ClearRtcResetDetected]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
 
Same as [[#ClearRtcResetDetected|ClearRtcResetDetected]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001).
 +
 +
== EnableAlarm ==
 +
Takes an input [[#Module|DeviceCode]], an input u32 '''RtcAlarmId''' (0 = RtcAlarm1, 1 = RtcAlarm2) and an u64 '''RtcAlarmTime'''. No output.
 +
 +
== DisableAlarm ==
 +
Takes an input [[#Module|DeviceCode]] and an input u32 '''RtcAlarmId''' (0 = RtcAlarm1, 1 = RtcAlarm2). No output.
  
 
= time:u, time:a, time:s =
 
= time:u, time:a, time:s =
Line 920: Line 974:
 
|-
 
|-
 
| [6.0.0+] 86 || Extperiph2 || 0x40000057 || VddSoc
 
| [6.0.0+] 86 || Extperiph2 || 0x40000057 || VddSoc
 +
|-
 +
| [8.0.0+] - || OscClk || 0x40000080 || None
 
|}
 
|}
  
Line 943: Line 999:
 
| 6 || Max77620_Ldo2 || 0x3A0000A2 || SdCard (1.8v, 3.3v)
 
| 6 || Max77620_Ldo2 || 0x3A0000A2 || SdCard (1.8v, 3.3v)
 
|-
 
|-
| 7 || Max77620_Ldo3 || 0x3A0000A3 || GcAsic (3.1v)
+
| 7 || Max77620_Ldo3 || 0x3A0000A3 || GcCard (3.1v)
 
|-
 
|-
 
| 8 || Max77620_Ldo4 || 0x3A0000A4 || Rtc (0.85v)
 
| 8 || Max77620_Ldo4 || 0x3A0000A4 || Rtc (0.85v)
Line 951: Line 1,007:
 
| 10 || Max77620_Ldo6 || 0x3A0000A6 || TouchPanel, ALS (2.9v)
 
| 10 || Max77620_Ldo6 || 0x3A0000A6 || TouchPanel, ALS (2.9v)
 
|-
 
|-
| 11 || Max77620_Ldo7 || 0x3A0000A7 || Xusb, MillauNfc (1.05v)
+
| 11 || Max77620_Ldo7 || 0x3A0000A7 || Xusb (1.05v)
 
|-
 
|-
 
| 12 || Max77620_Ldo8 || 0x3A0000A8 || DisplayPort, HDMI, SioMcu (1.05v)
 
| 12 || Max77620_Ldo8 || 0x3A0000A8 || DisplayPort, HDMI, SioMcu (1.05v)
Line 966: Line 1,022:
 
|}
 
|}
  
= ClockRatesListType =
+
= PowerControlTarget =
This is "nn::pcv::ClockRatesListType".
+
This is "nn::pcv::PowerControlTarget".
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value || Description
+
! Value || Name || DeviceCode || Description
 +
|-
 +
| 0 || || 0x3C000004 || SdCard (Ldo2)
 +
|-
 +
| [6.0.0+] 1 || || 0x34000007 || DisplayPort, HDMI (Ldo8)
 +
|-
 +
| [6.0.0+] 2 || || || Debug (Ldo7, Hoag only)
 
|-
 
|-
| 0 || Invalid
+
| [6.0.0+] 3 || || 0x3500041A || SioMcu (Ldo8, Hoag only)
 
|-
 
|-
| 1 || Discrete
+
| [14.0.0+] - || || 0x3C000404 || GcCard (Ldo3)
 
|-
 
|-
| 2 || Range
+
| [14.0.0+] - || || 0x3C000405 || GcCard (Ldo5)
 
|}
 
|}
  
 
= ModuleState =
 
= ModuleState =
This is "nn::pcv::ModuleState".
+
This is "nn::pcv::ModuleState". This is a 0xC-byte struct.
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 998: Line 1,060:
 
|-
 
|-
 
| 0x8 || 0x4 || MinVClockRate
 
| 0x8 || 0x4 || MinVClockRate
 +
|}
 +
 +
= PowerDomainState =
 +
This is "nn::pcv::PowerDomainState". This is a 0x8-byte struct.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x1 || Enabled
 +
|-
 +
| 0x1 || 0x3 || Reserved
 +
|-
 +
| 0x4 || 0x4 || Voltage
 +
|}
 +
 +
[8.0.0+] This is a 0xC-byte struct.
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || DeviceCode
 +
|-
 +
| 0x4 || 0x1 || Enabled
 +
|-
 +
| 0x5 || 0x3 || Reserved
 +
|-
 +
| 0x8 || 0x4 || Voltage
 
|}
 
|}
  
 
= TemperatureThreshold =
 
= TemperatureThreshold =
This is "nn::pcv::TemperatureThreshold".
+
This is "nn::pcv::TemperatureThreshold". This is a 0x8-byte struct.
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,012: Line 1,102:
 
|}
 
|}
  
= PowerControlTarget =
+
= ClockRatesListType =
This is "nn::pcv::PowerControlTarget".
+
This is "nn::pcv::ClockRatesListType".
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value || Name || DeviceCode || Description
+
! Value || Description
 
|-
 
|-
| 0 || || 0x3C000004 || SdCard
+
| 0 || Invalid
 
|-
 
|-
| 1 || || 0x34000007 || DisplayPort, HDMI
+
| 1 || Discrete
 
|-
 
|-
| 2 || || || MillauNfc
+
| 2 || Range
|-
 
| 3 || || 0x3500041A || SioMcu
 
 
|}
 
|}
 
= PowerDomainState =
 
This is "nn::pcv::PowerDomainState".
 
  
 
= SteadyClockTimePoint =
 
= SteadyClockTimePoint =

Latest revision as of 19:33, 26 March 2024

bpc

This is "nn::bpc::IBoardPowerControlManager".

Cmd Name
0 #ShutdownSystem
1 #RebootSystem
2 #GetWakeupReason
3 #GetShutdownReason
4 #GetAcOk
5 #GetPowerEvent
6 [2.0.0-13.2.1] #GetSleepButtonState
7 [2.0.0+] #GetPowerButtonEvent
8 [2.0.0-9.2.0] #CreateWakeupTimer
9 [2.0.0-9.2.0] #CancelWakeupTimer
10 [2.0.0-9.2.0] #EnableWakeupTimerOnDevice
11 [3.0.0-9.2.0] #CreateWakeupTimerEx
12 [3.0.0-9.2.0] #GetLastEnabledWakeupTimerType
13 [3.0.0-9.2.0] #CleanAllWakeupTimers
14 [6.0.0+] #GetPowerButton
15 [10.0.0+] #SetUpRtcResetOnShutdown

ShutdownSystem

No input/output.

RebootSystem

No input/output.

GetWakeupReason

No input. Returns an output u32.

GetShutdownReason

No input. Returns an output u32.

GetAcOk

No input. Returns an output bool.

GetPowerEvent

Takes an input BoardPowerControlEventTarget. Returns an output Event handle.

GetSleepButtonState

No input. Returns an output SleepButtonState.

GetPowerButtonEvent

Takes an input EventTarget. Returns an output Event handle.

CreateWakeupTimer

Takes an input u64. Returns an output u32.

CancelWakeupTimer

Takes an input u32. No output.

EnableWakeupTimerOnDevice

No input. Returns an output bool IsEnabled and an output u64 Interval.

[3.0.0+] Now returns an u32 and an u64.

CreateWakeupTimerEx

Takes two input u64s. Returns an output u32.

GetLastEnabledWakeupTimerType

No input. Returns an output u32.

CleanAllWakeupTimers

Takes an input u32. No output.

GetPowerButton

No input. Returns an output bool IsPushed.

SetUpRtcResetOnShutdown

No input/output. Enables an internal wakeup timer when calling ShutdownSystem or RebootSystem.

bpc:r

This is "nn::bpc::IRtcManager".

Cmd Name
0 #GetRtcTime
1 #SetRtcTime
2 #GetRtcResetDetected
3 [2.0.0+] #ClearRtcResetDetected
4 [3.0.0+] #SetUpRtcResetOnShutdown

GetRtcTime

No input. Returns an output u64.

SetRtcTime

Takes an input u64. No output.

GetRtcResetDetected

No input. Returns an output bool.

ClearRtcResetDetected

No input/output.

SetUpRtcResetOnShutdown

No input/output.

bpc:c

This is "nn::bpc::IBoardPowerControlManager".

[2.0.0+] This service was replaced by bpc.

Cmd Name
0 #ShutdownSystem
1 #RebootSystem
2 #GetWakeupReason
3 #GetShutdownReason
4 #GetAcOk
5 #GetPowerEvent

bpc:b

This is "nn::bpc::IPowerButtonManager".

[2.0.0+] This service was merged into bpc.

Cmd Name
0 #GetSleepButtonState
1 #GetPowerButtonEvent

bpc:w

This is "nn::bpc::IWakeupConfigManager".

[2.0.0+] This service was merged into bpc.

Cmd Name
0 #CreateWakeupTimer
1 #CancelWakeupTimer
2 #EnableWakeupTimerOnDevice

pcv

This is "nn::pcv::detail::IPcvService".

Cmd Name
[1.0.0-7.0.1] 0 #SetPowerEnabled
[1.0.0-7.0.1] 1 #SetClockEnabled
[1.0.0-7.0.1] 2 #SetClockRate
[1.0.0-7.0.1] 3 #GetClockRate
[1.0.0-7.0.1] 4 #GetState
[1.0.0-7.0.1] 5 #GetPossibleClockRates
[1.0.0-7.0.1] 6 #SetMinVClockRate
[1.0.0-7.0.1] 7 #SetReset
[1.0.0-7.0.1] 8 #SetVoltageEnabled
[1.0.0-7.0.1] 9 #GetVoltageEnabled
[1.0.0-7.0.1] 10 #GetVoltageRange
[1.0.0-7.0.1] 11 #SetVoltageValue
[1.0.0-7.0.1] 12 #GetVoltageValue
[1.0.0-7.0.1] 13 #GetTemperatureThresholds
[1.0.0-7.0.1] 14 #SetTemperature
[1.0.0-5.1.0] 15 #Initialize
[1.0.0-5.1.0] 16 #IsInitialized
[1.0.0-5.1.0] 17 #Finalize
[3.0.0-7.0.1] 18 #PowerOn
[3.0.0-7.0.1] 19 #PowerOff
[3.0.0-7.0.1] 20 #ChangeVoltage
[3.0.0-7.0.1] 21 #GetPowerClockInfoEvent
[3.0.0-7.0.1] 22 #GetOscillatorClock
[3.0.0-7.0.1] 23 #GetDvfsTable
[3.0.0-7.0.1] 24 #GetModuleStateTable
[3.0.0-7.0.1] 25 #GetPowerDomainStateTable
26 [3.0.0+] #GetFuseInfo
27 [5.0.0+] #GetDramId
[6.0.0-7.0.1] 28 #IsPoweredOn
[6.0.0-7.0.1] 29 #GetVoltage

SetPowerEnabled

Takes an input ModuleId and an input bool Enabled. No output.

SetClockEnabled

Takes an input ModuleId and an input bool Enabled. No output.

SetClockRate

Takes an input ModuleId and an input u32 ClockRateHz. No output.

GetClockRate

Takes an input ModuleId. Returns an output u32 ClockRateHz.

GetState

Takes an input ModuleId. Returns an output ModuleState.

GetPossibleClockRates

Takes a type-0xA output buffer of ClockRatesListType, an input ModuleId and an input s32 MaxCount. Returns an output s32 OutCount and an output u32 OutRates.

SetMinVClockRate

Takes an input ModuleId and an input u32 ClockRateHz. No output.

SetReset

Takes an input ModuleId and an input bool Asserted. No output.

SetVoltageEnabled

Takes an input PowerDomain and an input bool Enabled. No output.

GetVoltageEnabled

Takes an input PowerDomain. Returns an output bool Enabled.

GetVoltageRange

Takes an input PowerDomain. Returns three output s32s MinVolt, MaxVolt and StepVolt.

SetVoltageValue

Takes an input PowerDomain and an input s32 MicroVolt. No output.

GetVoltageValue

Takes an input PowerDomain. Returns an output s32 MicroVolt.

GetTemperatureThresholds

Takes a type-0xA output buffer of TemperatureThreshold and an input s32 MaxCount. Returns an output s32 OutCount.

SetTemperature

Takes an input s32 TemperatureMilliC. No output.

Initialize

No input/output.

IsInitialized

No input. Returns an output bool.

Finalize

No input/output.

PowerOn

Takes an input PowerControlTarget and an input s32 MicroVolt. No output.

PowerOff

Takes an input PowerControlTarget. No output.

ChangeVoltage

Takes an input PowerControlTarget and an input s32 MicroVolt. No output.

GetPowerClockInfoEvent

No input. Returns an output Event handle.

GetOscillatorClock

No input. Returns an output u32.

GetDvfsTable

Takes two type-0xA output buffers and two input s32s. Returns an output s32 OutCount.

[7.0.0+] The type-0xA output buffers were replaced with type-0x22 output buffers.

GetModuleStateTable

Takes a type-0xA output buffer of ModuleState and an input s32 MaxCount. Returns an output s32 OutCount.

[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer.

GetPowerDomainStateTable

Takes a type-0xA output buffer of PowerDomainState and an input s32 MaxCount. Returns an output s32 OutCount.

[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer.

GetFuseInfo

Takes a type-0xA output buffer and an input s32 MaxCount. Returns an output s32 OutCount.

GetDramId

No input. Returns an u32.

IsPoweredOn

Takes an input PowerControlTarget. Returns an output bool.

GetVoltage

Takes an input PowerControlTarget. Returns an output s32.

pcv:arb

This is "nn::pcv::IArbitrationManager".

This service no longer exists in [8.0.0+].

Cmd Name
0 #ReleaseControl

ReleaseControl

Takes an input ModuleId. No output.

pcv:imm

This is "nn::pcv::IImmediateManager".

This service no longer exists in [8.0.0+].

Cmd Name
0 #SetClockRate

clkrst, clkrst:i

These are "nn::clkrst::IClkrstManager" and "nn::clkrst::IImmediateManager".

These were added with [8.0.0+].

Cmd Name
0 OpenSession
1 GetTemperatureThresholds
2 NotifyTemperature
3 GetClkrstStateTable
4 GetClkrstStateTableUpdateEvent
5 GetClkrstStateTableCount
6 [15.0.0+] PrintClockTree

OpenSession

Takes an input DeviceCode and an input u32. Returns an #IClkrstSession.

NotifyTemperature

Takes an input float. No output.

GetClkrstStateTable

Takes a type-0xA output buffer of ModuleState and an input s32 MaxCount. Returns an output s32 OutCount.

[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer.

GetClkrstStateTableUpdateEvent

No input. Returns an output Event handle.

GetClkrstStateTableCount

No input. Returns 0x1A.

IClkrstSession

This is "nn::clkrst::IClkrstSession".

Cmd Name
0 EnableClock
1 DisableClock
2 AssertReset
3 DeassertReset
4 EnablePower
5 DisablePower
6 GetModuleState
7 SetClockRate
8 GetClockRate
9 SetMinimumVoltageClockRate
10 GetPossibleClockRates
11 GetDvfsTable
12 [14.0.0+] IsParentClock
13 [14.0.0+] SetParentClock
14 [18.0.0+]
15 [18.0.0+]

clkrst:a

This is "nn::clkrst::IArbitrationManager".

This was added with [8.0.0+].

Cmd Name
0 ReleaseControl

ReleaseControl

Takes an input DeviceCode. No output.

rgltr

This is "nn::regulator::IRegulatorManager".

This was added with [8.0.0+].

Cmd Name
0 OpenSession
1 GetRegulatorStateTable
2 GetRegulatorStateTableUpdateEvent
3 GetRegulatorStateTableCount

OpenSession

Takes an input DeviceCode and returns an #IRegulatorSession.

GetRegulatorStateTable

Takes a type-0xA output buffer of PowerDomainState and an input s32 MaxCount. Returns an output s32 OutCount.

[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer.

GetRegulatorStateTableUpdateEvent

No input. Returns an output Event handle.

GetRegulatorStateTableCount

No input. Returns 0x3.

IRegulatorSession

This is "nn::regulator::IRegulatorSession".

Cmd Name
0 RequestOutput
1 CancelOutputRequest
2 IsOutputEnabled
3 GetVoltageRangeInMicroVolt
4 GetVoltageInMicroVolt
5 RequestVoltageInMicroVolt
6 CancelVoltageRequest
7 [13.0.0+] GetMinimumOffStateHoldTime
8 [13.0.0+] RequestMinimumOffStateHoldTime
9 [13.0.0+] CancelMinimumOffStateHoldTimeRequest

GetMinimumOffStateHoldTime

No input. Returns an output u64.

RequestMinimumOffStateHoldTime

Takes an input u64. No output.

CancelMinimumOffStateHoldTimeRequest

No input/output.

rtc

This is "nn::rtc::IRtcManager".

This was added with [8.0.0+].

Cmd Name
0 GetTimeInSeconds
1 SetTimeInSeconds
2 SetResetOnShutdown
3 GetResetDetected
4 ClearResetDetected
10 [10.0.0+] EnableAlarm
11 [10.0.0+] DisableRtcAlarm
12 [18.0.0+]
13 [18.0.0+]

GetTimeInSeconds

Same as GetRtcTime, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

SetTimeInSeconds

Same as SetRtcTime, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

SetResetOnShutdown

Takes an input bool DoReset and an input DeviceCode. Similar to SetUpRtcResetOnShutdown, but this version assigns the provided boolean value on a per-client basis (instead of a global variable) and checks it when the current power state is ReadyShutdown.

GetResetDetected

Same as GetRtcResetDetected, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

ClearResetDetected

Same as ClearRtcResetDetected, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

EnableAlarm

Takes an input DeviceCode, an input u32 RtcAlarmId (0 = RtcAlarm1, 1 = RtcAlarm2) and an u64 RtcAlarmTime. No output.

DisableAlarm

Takes an input DeviceCode and an input u32 RtcAlarmId (0 = RtcAlarm1, 1 = RtcAlarm2). No output.

time:u, time:a, time:s

This is "nn::timesrv::detail::service::IStaticService".

[9.0.0+] These services were moved to Glue and PSC.

Cmd Name
0 #GetStandardUserSystemClock
1 #GetStandardNetworkSystemClock
2 #GetStandardSteadyClock
3 #GetTimeZoneService
4 #GetStandardLocalSystemClock
5 [4.0.0+] #GetEphemeralNetworkSystemClock
20 [6.0.0+] GetSharedMemoryNativeHandle
30 [6.0.0+] GetStandardNetworkClockOperationEventReadableHandle
31 [6.0.0+] GetEphemeralNetworkClockOperationEventReadableHandle
50 [4.0.0+] SetStandardSteadyClockInternalOffset
100 IsStandardUserSystemClockAutomaticCorrectionEnabled
101 SetStandardUserSystemClockAutomaticCorrectionEnabled
102 [5.0.0+] GetStandardUserSystemClockInitialYear
200 [3.0.0+] IsStandardNetworkSystemClockAccuracySufficient
201 [6.0.0+] GetStandardUserSystemClockAutomaticCorrectionUpdatedTime
300 [4.0.0+] CalculateMonotonicSystemClockBaseTimePoint
400 [4.0.0+] GetClockSnapshot
401 [4.0.0+] GetClockSnapshotFromSystemClockContext
500 [4.0.0+] CalculateStandardUserSystemClockDifferenceByUser
501 [4.0.0+] CalculateSpanBetween

GetStandardUserSystemClock

No input. Returns an #ISystemClock.

GetStandardNetworkSystemClock

No input. Returns an #ISystemClock.

GetStandardSteadyClock

No input. Returns an #ISteadyClock.

GetTimeZoneService

No input. Returns an #ITimeZoneService.

GetStandardLocalSystemClock

No input. Returns an #ISystemClock.

GetEphemeralNetworkSystemClock

No input. Returns an #ISystemClock.

ISteadyClock

This is "nn::timesrv::detail::service::ISteadyClock".

Cmd Name
0 #GetCurrentTimePoint
2 #GetTestOffset
3 #SetTestOffset
100 [2.0.0+] #GetRtcValue
101 [2.0.0+] #IsRtcResetDetected
102 [2.0.0+] #GetSetupResultValue
200 [3.0.0+] #GetInternalOffset
201 [3.0.0-3.0.2] #SetInternalOffset

GetCurrentTimePoint

No input. Returns an output #SteadyClockTimePoint.

GetTestOffset

No input. Returns an output #TimeSpanType.

SetTestOffset

Takes an input #TimeSpanType. No output.

GetRtcValue

No input. Returns an output s64.

IsRtcResetDetected

No input. Returns an output u8 bool.

GetSetupResultValue

No input. Returns an output u32.

GetInternalOffset

No input. Returns an output #TimeSpanType.

SetInternalOffset

Takes an input #TimeSpanType. No output.

ISystemClock

This is "nn::timesrv::detail::service::ISystemClock".

Cmd Name
0 #GetCurrentTime
1 #SetCurrentTime
2 #GetSystemClockContext
3 #SetSystemClockContext
4 [9.0.0+] GetOperationEventReadableHandle

GetCurrentTime

No input. Returns an output #PosixTime.

SetCurrentTime

Takes an input #PosixTime. No output.

GetSystemClockContext

No input. Returns an output #SystemClockContext.

SetSystemClockContext

Takes an input #SystemClockContext. No output.

ITimeZoneService

This is "nn::timesrv::detail::service::ITimeZoneService".

Cmd Name
0 #GetDeviceLocationName
1 #SetDeviceLocationName
2 #GetTotalLocationNameCount
3 #LoadLocationNameList
4 #LoadTimeZoneRule
5 [2.0.0+] #GetTimeZoneRuleVersion
6 [5.0.0+] GetDeviceLocationNameAndUpdatedTime
100 #ToCalendarTime
101 #ToCalendarTimeWithMyRule
201 #ToPosixTime
202 #ToPosixTimeWithMyRule

GetDeviceLocationName

No input. Returns an output #LocationName.

SetDeviceLocationName

Takes an input #LocationName. No output.

GetTotalLocationNameCount

No input. Returns an output s32.

LoadLocationNameList

Takes an input s32 LocationName_index and a type-0x6 output buffer for #LocationName. Returns an output s32 for total output entries.

LoadTimeZoneRule

Takes an input #LocationName and a type-0x16 output buffer for #TimeZoneRule. No output.

GetTimeZoneRuleVersion

No input. Returns an output #TimeZoneRuleVersion.

ToCalendarTime

Takes an input #PosixTime and a type-0x15 input buffer for #TimeZoneRule. Returns an output #CalendarTime and #CalendarAdditionalInfo.

ToCalendarTimeWithMyRule

Takes an input #PosixTime. Returns an output #CalendarTime and #CalendarAdditionalInfo.

ToPosixTime

Takes an input #CalendarTime, a type-0x15 input buffer for #TimeZoneRule, an type-0xA output buffer for #PosixTime array.R eturns an output s32.

ToPosixTimeWithMyRule

Takes an input #CalendarTime, an type-0xA output buffer for #PosixTime array. Returns an output s32.

BoardPowerControlEventTarget

This is "nn::bpc::BoardPowerControlEventTarget".

SleepButtonState

This is "nn::bpc::SleepButtonState".

EventTarget

This is "nn::bpc::EventTarget".

Module

This is "nn::pcv::Module".

Value Name DeviceCode Rail
0 Cpu 0x40000001 VddCpu
1 Gpu 0x40000002 VddGpu
2 I2s1 0x40000003 VddSoc
3 I2s2 0x40000004 VddSoc
4 I2s3 0x40000005 VddSoc
5 Pwm 0x40000006 VddSoc
6 I2c1 0x02000001 VddSoc
7 I2c2 0x02000002 VddSoc
8 I2c3 0x02000003 VddSoc
9 I2c4 0x02000004 VddSoc
10 I2c5 0x02000005 VddSoc
11 I2c6 0x02000006 VddSoc
12 Spi1 0x07000000 VddSoc
13 Spi2 0x07000001 VddSoc
14 Spi3 0x07000002 VddSoc
15 Spi4 0x07000003 VddSoc
16 Disp1 0x40000011 VddSoc
17 Disp2 0x40000012 VddSoc
18 Isp 0x40000013 None
19 Vi 0x40000014 None
20 Sdmmc1 0x40000015 VddSoc
21 Sdmmc2 0x40000016 VddSoc
22 Sdmmc3 0x40000017 VddSoc
23 Sdmmc4 0x40000018 VddSoc
24 Owr 0x40000019 None
25 Csite 0x4000001A VddSoc
26 Tsec 0x4000001B VddSoc
27 Mselect 0x4000001C VddSoc
28 Hda2codec2x 0x4000001D VddSoc
29 Actmon 0x4000001E VddSoc
30 I2cSlow 0x4000001F VddSoc
31 Sor1 0x40000020 VddSoc
32 Sata 0x40000021 None
33 Hda 0x40000022 VddSoc
34 XusbCoreHostSrc 0x40000023 VddSoc
35 XusbFalconSrc 0x40000024 VddSoc
36 XusbFsSrc 0x40000025 VddSoc
37 XusbCoreDevSrc 0x40000026 VddSoc
38 XusbSsSrc 0x40000027 VddSoc
39 UartA 0x03000001 VddSoc
40 UartB 0x35000405 VddSoc
41 UartC 0x3500040F VddSoc
42 UartD 0x37000001 VddSoc
43 Host1x 0x4000002C VddSoc
44 Entropy 0x4000002D VddSoc
45 SocTherm 0x4000002E VddSoc
46 Vic 0x4000002F VddSoc
47 Nvenc 0x40000030 VddSoc
48 Nvjpg 0x40000031 VddSoc
49 Nvdec 0x40000032 VddSoc
50 Qspi 0x40000033 VddSoc
51 ViI2c 0x40000034 None
52 Tsecb 0x40000035 VddSoc
53 Ape 0x40000036 VddSoc
54 AudioDsp 0x40000037 VddSoc
55 AudioUart 0x40000038 VddSoc
56 Emc 0x40000039 VddSoc
57 Plle 0x4000003A VddSoc
58 PlleHwSeq 0x4000003B VddSoc
59 Dsi 0x4000003C VddSoc
60 Maud 0x4000003D VddSoc
61 Dpaux1 0x4000003E VddSoc
62 MipiCal 0x4000003F VddSoc
63 UartFstMipiCal 0x40000040 VddSoc
64 Osc 0x40000041 VddSoc
65 SysBus 0x40000042 VddSoc
66 SorSafe 0x40000043 VddSoc
67 XusbSs 0x40000044 VddSoc
68 XusbHost 0x40000045 VddSoc
69 XusbDevice 0x40000046 VddSoc
70 Extperiph1 0x40000047 VddSoc
71 Ahub 0x40000048 VddSoc
72 Hda2hdmicodec 0x40000049 VddSoc
73 Gpuaux 0x4000004A VddSoc
74 UsbD 0x4000004B VddSoc
75 Usb2 0x4000004C VddSoc
76 Pcie 0x4000004D VddSoc
77 Afi 0x4000004E VddSoc
78 PciExClk 0x4000004F VddSoc
79 PExUsbPhy 0x40000050 VddSoc
80 XUsbPadCtl 0x40000051 VddSoc
81 Apbdma 0x40000052 VddSoc
82 Usb2TrkClk 0x40000053 VddSoc
83 XUsbIoPll 0x40000054 VddSoc
84 XUsbIoPllHwSeq 0x40000055 VddSoc
85 Cec 0x40000056 VddSoc
[6.0.0+] 86 Extperiph2 0x40000057 VddSoc
[8.0.0+] - OscClk 0x40000080 None

PowerDomain

This is "nn::pcv::PowerDomain".

Value Name DeviceCode Description
0 Max77620_Sd0 0x3A000080 SoC (1.125v)
1 Max77620_Sd1 0x3A000081 Dram (1.1v)
2 Max77620_Sd2 0x3A000082 Ldo0, Ldo1, Ldo7, Ldo8 (1.325v)
3 Max77620_Sd3 0x3A000083 Reserved (1.8v)
4 Max77620_Ldo0 0x3A0000A0 Panel (1.2v)
5 Max77620_Ldo1 0x3A0000A1 Xusb, PCIe (1.05v)
6 Max77620_Ldo2 0x3A0000A2 SdCard (1.8v, 3.3v)
7 Max77620_Ldo3 0x3A0000A3 GcCard (3.1v)
8 Max77620_Ldo4 0x3A0000A4 Rtc (0.85v)
9 Max77620_Ldo5 0x3A0000A5 GcCard (1.8v)
10 Max77620_Ldo6 0x3A0000A6 TouchPanel, ALS (2.9v)
11 Max77620_Ldo7 0x3A0000A7 Xusb (1.05v)
12 Max77620_Ldo8 0x3A0000A8 DisplayPort, HDMI, SioMcu (1.05v)
13 Max77621_Cpu 0x3A000003
14 Max77621_Gpu 0x3A000004
[6.0.0+] 15 Max77812_Cpu 0x3A000003
[6.0.0+] 16 Max77812_Gpu 0x3A000004
[6.0.0+] 17 Max77812_Dram 0x3A000005

PowerControlTarget

This is "nn::pcv::PowerControlTarget".

Value Name DeviceCode Description
0 0x3C000004 SdCard (Ldo2)
[6.0.0+] 1 0x34000007 DisplayPort, HDMI (Ldo8)
[6.0.0+] 2 Debug (Ldo7, Hoag only)
[6.0.0+] 3 0x3500041A SioMcu (Ldo8, Hoag only)
[14.0.0+] - 0x3C000404 GcCard (Ldo3)
[14.0.0+] - 0x3C000405 GcCard (Ldo5)

ModuleState

This is "nn::pcv::ModuleState". This is a 0xC-byte struct.

Offset Size Description
0x0 0x4 ClockFrequency
0x4 0x1 ClockEnabled
0x5 0x1 PowerEnabled
0x6 0x1 ResetAsserted
0x7 0x1 Reserved
0x8 0x4 MinVClockRate

PowerDomainState

This is "nn::pcv::PowerDomainState". This is a 0x8-byte struct.

Offset Size Description
0x0 0x1 Enabled
0x1 0x3 Reserved
0x4 0x4 Voltage

[8.0.0+] This is a 0xC-byte struct.

Offset Size Description
0x0 0x4 DeviceCode
0x4 0x1 Enabled
0x5 0x3 Reserved
0x8 0x4 Voltage

TemperatureThreshold

This is "nn::pcv::TemperatureThreshold". This is a 0x8-byte struct.

Offset Size Description
0x0 0x4 MinMilliC
0x4 0x4 MaxMilliC

ClockRatesListType

This is "nn::pcv::ClockRatesListType".

Value Description
0 Invalid
1 Discrete
2 Range

SteadyClockTimePoint

This is a 0x18-byte struct.

Offset Size Description
0x0 0x8 A u64 representing a point in time.
0x8 0x10 An ID representing the clock source.

TimeSpanType

This is an u64.

PosixTime

This is an s64 for UTC POSIX time.

SystemClockContext

This is an 0x20-byte struct.

Offset Size Description
0x0 0x8 a #PosixTime representing the system clock epoch.
0x8 0x18 a #SteadyClockTimePoint

LocationName

This contains a TimeZone location string with a max size of 0x24 bytes.

TimeZoneRule

This is an 0x4000-byte struct. Official sw uses fixed-size 0x4000 for the buffer size with the above commands.

This is loaded from the TimeZoneBinary title with the specified LocationName under the zoneinfo/ directory, the content is then converted into this TimeZoneRule structure.

The files contained under zoneinfo/ directory are Tzif2 files without Tzif1 header and data at the begining of them (see RFC8536 for more information).

The conversion of a Tzif2 file to a TimeZoneRule structure is based on tz database code with some custom modifications (Leap seconds aren't handled, no usage of "posixrules" and Tzif1 support stripped out).

Offset Size Description
0x0 0x4 timecnt
0x4 0x4 typecnt
0x8 0x4 charcnt
0xC 0x1 goback
0xD 0x1 goahead
0xE 0x2 Padding
0x10 0x8 * 1000 ats
0x1f50 0x1 * 1000 types
0x2338 0x10 * 128 ttis (time type information), struct ttinfo[1000]
0x2b38 0x1 * 512 chars
0x2d38 0x4 defaulttype
0x2d3c 0x12c4 Reserved / Unused

ttinfo

This is an 0x10-byte struct. Represents a Time Type Information used in #TimeZoneRule.

Offset Size Description
0x0 0x4 tt_gmtoff
0x4 0x1 tt_isdst
0x5 0x3 Padding
0x8 0x4 tt_abbrind
0xC 0x1 tt_ttisstd
0xD 0x1 tt_ttisgmt
0xE 0x2 Padding

TimeZoneRuleVersion

This is an u128.

CalendarTime

This is an 0x8-byte struct.

Offset Size Description
0x0 0x2 Year
0x2 0x1 Month
0x3 0x1 Day
0x4 0x1 Hour
0x5 0x1 Minute
0x6 0x1 Second
0x7 0x1 Padding / unknown?

CalendarAdditionalInfo

This is an 0x18-byte struct. This stores timezone info.

Offset Size Description
0x0 0x4 0-based day-of-week.
0x4 0x4 0-based day-of-year.
0x8 0x8 Timezone name string.
0x10 0x4 0 = no DST, 1 = DST.
0x14 0x4 s32 seconds relative to UTC for this timezone.