PCV services

Revision as of 17:09, 31 October 2020 by Hexkyz (talk | contribs) (→‎Module)

bpc

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

Cmd Name
0 ShutdownSystem
1 RebootSystem
2 GetWakeupReason
3 GetShutdownReason
4 GetAcOk
5 GetBoardPowerControlEvent
6 [2.0.0+] GetSleepButtonState
7 [2.0.0+] GetPowerEvent
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+]
15 [10.0.0+]

EnableWakeupTimerOnDevice

No input, returns a total of 0x10-bytes of output. [3.0.0+] Now returns a total of 0xC-bytes of output.

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

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 GetBoardPowerControlEvent

bpc:b

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

[2.0.0+] This service was merged into bpc.

Cmd Name
0 GetSleepButtonState
1 GetPowerEvent

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

[7.0.0+] The type-0xA output buffers were replaced with type-0x22 output buffers, for the following: GetDvfsTable, GetModuleStateTable, and GetPowerDomainStateTable.

IsPoweredOn

Takes a PowerDomain and returns a bool indicating the status of the requested voltage block.

GetVoltage

Takes a PowerDomain and returns an u32 voltage value for the requested voltage block.

pcv:arb

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

This service no longer exists in [8.0.0+].

Cmd Name
0 ReleaseControl

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 SetTemperature
3 GetPossibleClockRates
4 GetClockInfoEvent
5 GetClockModuleNumLimit

OpenSession

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

GetClockModuleNumLimit

Returns 0x1A.

IClkrstSession

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

Cmd Name
0 SetClockEnabled
1 SetClockDisabled
2 SetResetAsserted
3 SetResetDeasserted
4 SetPowerEnabled
5 SetPowerDisabled
6 GetState
7 SetClockRate
8 GetClockRate
9 SetMinVClockRate
10 GetPossibleClockRates
11 GetDvfsTable

clkrst:a

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

This was added with [8.0.0+].

Cmd Name
0 #ReleaseControl

ReleaseControl

Takes a Module. No output.

rgltr

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

This was added with [8.0.0+].

Cmd Name
0 #OpenSession
1 GetPowerDomainStateTable
2 GetPowerInfoEvent
3 GetPowerModuleNumLimit

OpenSession

Takes a DeviceCode and returns an #IRegulatorSession.

GetPowerModuleNumLimit

Returns 0x3.

IRegulatorSession

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

Cmd Name
0 #SetVoltageEnabled
1
2 #GetVoltageEnabled
3 GetVoltageRange
4 GetVoltageValue
5 #SetVoltageValue
6 ChangeVoltage

SetVoltageEnabled

Takes a bool. Enables/disables the LDO this session was opened for.

GetVoltageEnabled

Returns a bool. True if voltage is enabled, false if not.

SetVoltageValue

Takes in a voltage in microvolts and sets the LDO to this voltage.

rtc

This was added with [8.0.0+].

Cmd Name
0 #GetRtcTime
1 #SetRtcTime
2 #SetUpRtcResetOnShutdown
3 #GetRtcResetDetected
4 #ClearRtcResetDetected

GetRtcTime

Same as GetRtcTime from bpc:r, but takes an extra DeviceCode, which bpc:r hardcodes to 0x3B000001 (max77620_rtc0) instead.

SetRtcTime

Same as SetRtcTime from bpc:r, but takes an extra DeviceCode, which bpc:r hardcodes to 0x3B000001 (max77620_rtc0) instead.

SetUpRtcResetOnShutdown

Takes an u8 DoReset and a DeviceCode. Similar to SetUpRtcResetOnShutdown from bpc:r, 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".

GetRtcResetDetected

Same as GetRtcResetDetected from bpc:r, but takes an extra DeviceCode, which bpc:r hardcodes to 0x3B000001 (max77620_rtc0) instead.

ClearRtcResetDetected

Same as ClearRtcResetDetected from bpc:r, but takes an extra DeviceCode, which bpc:r hardcodes to 0x3B000001 (max77620_rtc0) instead.

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 Notes
0 GetStandardUserSystemClock Returns an #ISystemClock.
1 GetStandardNetworkSystemClock Returns an #ISystemClock.
2 GetStandardSteadyClock Returns an #ISteadyClock.
3 GetTimeZoneService Returns an #ITimeZoneService.
4 GetStandardLocalSystemClock Returns an #ISystemClock.
5 [4.0.0+] GetEphemeralNetworkSystemClock Returns an #ISystemClock.
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

ISteadyClock

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

Cmd Name Notes
0 GetCurrentTimePoint No input, returns an output #SteadyClockTimePoint.
2 GetTestOffset No input, returns an output #TimeSpanType.
3 SetTestOffset Takes an input #TimeSpanType, no output.
100 [2.0.0+] GetRtcValue No input, returns an output s64.
101 [2.0.0+] IsRtcResetDetected No input, returns an output u8 bool.
102 [2.0.0+] GetSetupResultValue No input, returns an output u32.
200 [3.0.0+] GetInternalOffset No input, returns an output #TimeSpanType.
201 [3.0.0-3.0.2] SetInternalOffset Takes an input #TimeSpanType, no output.

SteadyClockTimePoint

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

This is a 0x18-byte struct.

TimeSpanType

This is an u64.

ISystemClock

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

Cmd Name Notes
0 GetCurrentTime Returns an output #PosixTime.
1 SetCurrentTime Takes an input #PosixTime.
2 GetSystemClockContext Returns an output #SystemClockContext.
3 SetSystemClockContext Takes an input #SystemClockContext.
4 [9.0.0+] GetOperationEventReadableHandle

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

ITimeZoneService

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

Cmd Name Notes
0 GetDeviceLocationName No input, returns an output #LocationName.
1 SetDeviceLocationName Takes an input #LocationName, no output.
2 GetTotalLocationNameCount No input, returns an output s32.
3 LoadLocationNameList
4 LoadTimeZoneRule Takes an input #LocationName and a type-0x16 output buffer for #TimeZoneRule, no output.
5 [2.0.0+] GetTimeZoneRuleVersion No input, returns an output #TimeZoneRuleVersion.
6 [5.0.0+] GetDeviceLocationNameAndUpdatedTime
100 ToCalendarTime Takes an input #PosixTime and a type-0x15 input buffer for #TimeZoneRule, returns an output #CalendarTime and #CalendarAdditionalInfo.
101 ToCalendarTimeWithMyRule Takes an input #PosixTime, returns an output #CalendarTime and #CalendarAdditionalInfo.
201 ToPosixTime Takes an input #CalendarTime, a type-0x15 input buffer for #TimeZoneRule, an type-0xA output buffer for #PosixTime array, and returns an output s32.
202 ToPosixTimeWithMyRule Takes an input #CalendarTime, an type-0xA output buffer for #PosixTime array, and 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.

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. Represent 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

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?

This is an 0x8-byte struct.

CalendarAdditionalInfo

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.

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

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

PowerDomain

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

Name DeviceCode Block Notes
0 0x3A000080 max77620_sd0
1 0x3A000081 max77620_sd1
2 0x3A000082 max77620_sd2
3 0x3A000083 max77620_sd3
4 0x3A0000A0 max77620_ldo0 1.2v
5 0x3A0000A1 max77620_ldo1
6 0x3A0000A2 max77620_ldo2 SDcard power, 1.8v - 3.3v
7 0x3A0000A3 max77620_ldo3 GC ASIC 3.1v
8 0x3A0000A4 max77620_ldo4 RTC power, 0.85v
9 0x3A0000A5 max77620_ldo5 GC ASIC 1.8v
10 0x3A0000A6 max77620_ldo6 AVDD touchscreen, 2.9v
11 0x3A0000A7 max77620_ldo7
12 0x3A0000A8 max77620_ldo8 DisplayPort, 1.05v
13 0x3A000003 max77621_cpu
14 0x3A000004 max77621_gpu
[6.0.0+] 15 0x3A000003 max77812_cpu
[6.0.0+] 16 0x3A000004 max77812_gpu
[6.0.0+] 17 0x3A000005 max77812_dram
[8.0.0+] - 0x3C000004 SDCard
[8.0.0+] - 0x34000007 HDMI
[8.0.0+] - 0x3500041A MCU