Services

Services

AC Services

AC service “ac:u” #

These commands are common to both ac:u and ac:i

Command HeaderDescription
0x00010000CreateDefaultConfig
0x00015004ExclusiveAsync
0x00020042DebugSetApType
0x00030042DebugSetNetworkArea
0x00040006ConnectAsync
0x00050002GetConnectResult
0x000600C6DebugSetNetworkSetting1
0x00070002CancelConnectAsync
0x00080004CloseAsync
0x00090002GetCloseResult
0x000A0000GetLastErrorCode
0x000B0000GetLastDetailErrorCode
0x000C0000GetStatus
0x000D0000GetWifiStatus
0x000E0042GetCurrentAPInfo
0x000F0000GetConnectingInfraPriority
0x00100042GetCurrentNZoneInfo
0x00110042GetNZoneApNumService
0x00120042GetConnectingHotspot
0x00130042GetConnectingHotspotSubset
0x00140002GetConnectingLocation
0x00160002GetExclusiveResult
0x00170004UnExclusiveAsync
0x00180002GetUnExcusiveResult
0x00190004CloseAllASync
0x001A0002GetCloseAllResult
0x001B0004LogoutHotspotAsync
0x001C0002GetLogoutHotspotResult
0x001D0042ScanAPs System Settings uses this via ac:i, this is presumably accessible via ac:u too.
0x001E0042ScanNintendoZone
0x001F0042ScanNintendoZoneSubset
0x00200005BeginScanUsbAccessPoint
0x00210002EndScanUsbAccessPoint
0x00220042SetAllowApType
0x00230042AddAllowApType
0x00240042AddDenyApType
0x00250042SetNetworkArea
0x00260042SetInfraPriority
0x00270002GetInfraPriority
0x00280042SetPowerSaveMode
0x00290002GetPowerSaveMode
0x002A0004SetBssidFilter
0x002B0004SetApNumFilter
0x002C0042SetFromApplication
0x002D0082SetRequestEulaVersion
0x002E00C4ConvertPassphraseToPsk
0x002F0004GetNZoneBeaconNotFoundEvent
0x00300004RegisterDisconnectEvent
0x00310002GetStatusChangeEvent
0x00320042SetAuthServerType
0x00330000GetConnectingSecurityMode
0x00340000GetConnectingSsid
0x00350000GetConnectingSsidLength
0x00360000GetConnectingProxyEnable
0x00370000GetConnectingProxyAuthType
0x00380000GetConnectingProxyPort
0x00390000GetConnectingProxyHost
0x003A0000GetConnectingProxyUserName
0x003B0000GetConnectingProxyPassword
0x003C0042GetAPSSIDList
0x003D0042SetZoneMacFilter
0x003E0042IsConnected
0x003F0040GetNotAwakeMacFilter
0x00400042SetClientVersion
0x004100C6SetTemporaryNetworkSettings

AC service “ac:i” #

These commands are exclusive to ac:i

ACT Services

The ACT module handles NNID accounts. This module behaves very similarly to the 🔗 Wii U implementation (nn::act)

ACT User Service “act:u” #

These commands are used generally by most titles, and are also present in act:a.

Command HeaderDescription
0x00010084Initialize
0x00020040GetErrorCode
0x00030000GetLastResponseResult
0x00040000Cancel
0x00050082GetCommonInfo
0x000600C2GetAccountDataBlock/GetAccountInfo
0x00070082GetAsyncResult
0x000800C2GetMiiImage
0x00090180SetNfsPassword
0x000A0000SetIsApplicationUpdateRequired
0x000B0042AcquireEulaList
0x000C0082AcquireTimeZoneList
0x000D0040GenerateUuid
0x000E0080GetUuid
0x000F0140FindSlotNoByUuid
0x00100000Save
0x00110080GetTransferableId
0x00120102AcquireNexServiceToken
0x00130002GetNexServiceToken
0x00140382AcquireIndependentServiceToken
0x00150002GetIndependentServiceToken
0x00160082AcquireAccountInfo
0x00170084AcquireAccountIdByPrincipalId
0x00180044AcquirePrincipalIdByAccountId
0x00190044AcquireMii
0x001A0042AcquireAccountInfoRaw
0x001B0084AcquireOtherTypePrincipalID (stubbed)
0x001C0342GetCachedIndependentServiceToken
0x001D0004InquireMailAddressAvailability
0x001E0082AcquireEula
0x001F0082AcquireEulaLanguageList
0x00200382AcquireIndependentServiceTokenV2
0x00210002GetIndepdendentServiceTokenV2
0x00220342GetCachedIndependentServiceTokenV2

ACT Admin Service “act:a” #

This service is used mainly by the Nintendo Network ID Settings application accessible in System Settings.

Application Manager Services

Application Manager services “am:sys”, “am:u”, “am:net” #

Command HeaderDescription
0x00010040GetNumPrograms
0x00020082GetProgramList
0x00030084GetProgramInfos
0x000400C0DeleteUserProgram
0x000500C0GetProductCode
0x000600C0GetStorageId
0x00070080DeleteTicket
0x00080000GetNumTickets
0x00090082GetTicketList
0x000A0000GetDeviceId
0x000B0040GetNumImportTitleContexts
0x000C0082GetImportTitleContextList
0x000D0084GetImportTitleContexts
0x000E00C0DeleteImportTitleContext
0x000F00C0GetNumImportContentContexts
0x00100102GetImportContentContextList
0x00110104GetImportContentContexts
0x00120102DeleteImportContentContexts
0x00130040NeedsCleanup
0x00140040DoCleanup
0x00150040DeleteAllImportContexts
0x00160000DeleteAllTemporaryPrograms
0x00170044ImportTwlBackupLegacy
0x00180080InitializeTitleDatabase
0x00190040QueryAvailableTitleDatabase
0x001A00C0CalcTwlBackupSize
0x001B0144ExportTwlBackup
0x001C0084ImportTwlBackup
0x001D0000DeleteAllTwlUserPrograms
0x001E00C8ReadTwlBackupInfo
0x001F0040DeleteAllExpiredUserPrograms
0x00200000GetTwlArchiveResourceInfo
0x00210042GetPersonalizedTicketInfoList
0x00220080DeleteAllImportContextsFiltered
0x00230080GetNumImportTitleContextsFiltered
0x002400C2GetImportTitleContextListFiltered
0x002500C0CheckContentRights
0x00260044GetTicketLimitInfos
0x00270044GetDemoLaunchInfos
0x00280108ReadTwlBackupInfoEx
0x00290082DeleteUserProgramsAtomically
0x002A00C0GetNumExistingContentInfos
0x002B0142ListExistingContentInfos
0x002C0084GetProgramInfosIgnorePlatform
0x002D00C0CheckContentRightsIgnorePlatform

Application Manager services “am:u” and “am:net” #

Command HeaderDescription
0x04010080UpdateFirmwareTo
0x04020040BeginImportProgram
0x04030000BeginImportProgramTemporarily
0x04040002CancelImportProgram
0x04050002EndImportProgram
0x04060002EndImportProgramWithoutCommit
0x040700C2CommitImportPrograms
0x04080042GetProgramInfoFromCia
0x04090004GetSystemMenuDataFromCia
0x040A0002GetDependencyListFromCia
0x040B0002GetTransferSizeFromCia
0x040C0002GetCoreVersionFromCia
0x040D0042GetRequiredSizeFromCia
0x040E00C2CommitImportProgramsAndUpdateFirmwareAuto
0x040F0000UpdateFirmwareAuto
0x041000C0DeleteProgram
0x04110044GetTwlProgramListForReboot
0x04120000GetSystemUpdaterMutex
0x04130002GetMetaSizeFromCia
0x04140044GetMetaDataFromCia
0x04150080CheckDemoLaunchRights
0x041600C0GetInternalTitleLocationInfo
0x041700C0PerpetuateAgbSaveData
0x04180040BeginImportProgramForOverWrite
0x04190000BeginImportSystemProgram

Application Manager service “am:app” #

Command HeaderDescription
0x100100C0GetDLCContentInfoCount
0x10020104FindDLCContentInfos
0x10030142ListDLCContentInfos
0x10040102DeleteDLCContents
0x10050084GetDLCTitleInfos
0x10060080GetDLCOrLicenseNumTickets
0x10070102ListDLCOrLicenseTicketInfos
0x100801C2GetDLCOrLicenseItemRights
0x100900C0IsDLCTitleInUse
0x100A0000ReloadSDTitleDatabase
0x100B00C0GetNumDLCExistingContentInfos
0x100C0142ListDLCExistingContentInfos
0x100D0084GetPatchTitleInfos

The only commands accessible with this service are listed under this section.

BOSS Services

BOSS User Service “boss:U” #

Command HeaderDescription
0x00010082InitializeSession
0x00020100SetStorageInfo
0x00030000UnregisterStorage
0x00040000GetStorageInfo
0x00050042RegisterPrivateRootCa
0x00060084RegisterPrivateClientCert (u32 Size0, u32 Size1, ((Size0<<4) | 10), Buf0, ((Size1<<4) | 10), Buf1) This writes the content of the input buffers into files “bossdb:/%s_CL” and “bossdb:/%s_CLK”, where “%s” is generated from the programID.
0x00070000GetNewArrivalFlag
0x00080002RegisterNewArrivalEvent: Used for sending a handle. This is used with a table of programIDs etc with a maximum of 5 entries.
0x00090040SetOptoutFlag
0x000A0000GetOptoutFlag
0x000B00C2RegisterTask
0x000C0082UnregisterTask
0x000D0082ReconfigureTask
0x000E0000GetTaskIdList
0x000F0042GetStepIdList
0x00100102GetNsDataIdList
0x00110102GetNsDataIdList1
0x00120102GetNsDataIdList2
0x00130102GetNsDataIdList3
0x00140082SendProperty
0x00150042SendPropertyHandle
0x00160082ReceiveProperty
0x00170082UpdateTaskInterval
0x00180082UpdateTaskCount
0x00190042GetTaskInterval
0x001A0042GetTaskCount
0x001B0042GetTaskServiceStatus
0x001C0042StartTask
0x001D0042StartTaskImmediate
0x001E0042CancelTask
0x001F0000GetTaskFinishHandle
0x00200082GetTaskState
0x00210042GetTaskResult
0x00220042GetTaskCommErrorCode
0x002300C2GetTaskStatus
0x00240082GetTaskError
0x00250082GetTaskInfo
0x00260040DeleteNsData
0x002700C2GetNsDataHeaderInfo
0x00280102ReadNsData
0x00290080SetNsDataAdditionalInfo
0x002A0040GetNsDataAdditionalInfo. Writes an output u32 to cmdreply[2].
0x002B0080SetNsDataNewFlag
0x002C0040GetNsDataNewFlag
0x002D0040GetNsDataLastUpdate (u32 NsDataId) Writes an output u64 to cmdreply[2-3], from the content file in extdata.
0x002E0040GetErrorCode
0x002F0140RegisterStorageEntry
0x00300000GetStorageEntryInfo
0x00310100SetStorageOption
0x00320000GetStorageOption
0x00330042StartBgImmediate
0x00340042GetTaskPriority
0x003500C2RegisterImmediateTask
0x00360084SetTaskQuery (u32 TaskID_Size, u32 BufSize, ((TaskID_Size<<4) | 10), TaskID_buf, ((BufSize<<4) | 10), Buf) BufSize must match 0x60.
0x00370084GetTaskQuery (u32 TaskID_Size, u32 BufSize, ((TaskID_Size<<4) | 10), TaskID_buf, ((BufSize<<4) | 10), Buf) BufSize must match 0x60.

BOSS Privileged Service “boss:P” #

Command HeaderDescription
0x04010082InitializeSessionPrivileged
0x04020000?
0x04030000?
0x04040080GetAppNewFlag
0x040500C0SetAppNewFlag
0x040600C0SetOptoutFlagPrivileged
0x04070080GetOptoutFlagPrivileged
0x04080040(u8 optout) Sets the optout flag to all apps?
0x04090102UnregisterTaskPrivileged
0x040A0000GetAppIdList
0x040B0080GetTaskIdListPrivileged
0x040C00C2GetStepIdListPrivileged
0x040D0182GetNsDataIdListPrivileged
0x040E0182GetNsDataIdListPrivileged1
0x040F0102GetTaskInfoPrivileged
0x04100102GetTaskStatusPrivileged1 Same as GetTaskStatusPrivileged, but the input bool is set to false
0x04110102GetTaskErrorPrivileged
0x04120000Related to the sysmodule savedata?
0x04130082SendPropertyPrivileged
0x04140082ReceivePropertyPrivileged
0x041500C0DeleteNsDataPrivileged
0x04160142GetNsDataHeaderInfoPrivileged
0x04170182ReadNsDataPrivileged
0x04180100SetNsDataAdditionalInfoPrivileged
0x041900C0GetNsDataAdditionalInfoPrivileged
0x041A0100SetNsDataNewFlagPrivileged
0x041B00C0GetNsDataNewFlagPrivileged
0x041C00C0GetNsDataLastUpdatePrivileged
0x041D0040(bool unk_flag1)
0x041E0000Returns: bool unk_flag1
0x041F0040SetTestModeAvailability (bool test_mode_flag)
0x04200000GetTestModeAvailability. Returns: bool test_mode_flag
0x04210000?Stubbed
0x04220000?
0x04230000?Stubbed
0x04240000?
0x04250042SetPolicyListEnvId. Sets the policylist env ID (default env ID is “p01”): strncpy(“p01”, in, 8)
0x04260042GetPolicyListEnvId. Gets the policylist env ID (default env ID is “p01”): strcpy(out, “p01”)
0x04270042SetPolicyListUrl. Sets a custom policylist URL. Max of 0x200 chars
0x04280042GetPolicyListUrl. Gets the custom policylist URL
0x04290002(Handle unk)
0x042A0000Closes the previous handle
0x042B0000Returns: u8 unk
0x042C0042(u32 Size, ((Size<<4)|0xC), Buf)
0x042D0000Returns: u32 unk
0x042E00C2StartTaskPrivileged
0x042F00C2StartTaskImmediatePrivileged
0x043000C2CancelTaskPrivileged
0x04310040(u32 unk_4) The input is stored in a variable whose default value is 0x70
0x04320040Returns: u32 unk_4
0x04330080GetStorageOptionPrivileged
0x043400C2StartBgImmediatePrivileged
0x04350042(u32 Size, ((Size<<4)|0xA), Buf). Stubbed
0x04360042(u32 Size, ((Size<<4)|0xC), Buf). Stubbed
0x043700C2GetTaskPriorityPrivileged
0x04380000?
0x04390104GetTaskQueryPrivileged
0x043A0042(u32 Size, ((Size<<4)|0xA), Buf). Stubbed
0x043B0042(u32 Size, ((Size<<4)|0xC), Buf). Stubbed
0x043C0080(u64 title_id)
0x043D0080(u64 title_id)
0x043E0042SetSprelayUrl (u32 Size, ((Size<<4)|0xA), Buf). Sets the sprelay URL
0x043F0042GetSprelayUrl (u32 Size, ((Size<<4)|0xC), Buf). Gets the sprelay URL
0x04400080SetSprelayInterval (u32 interval, u32 unk). Sets the sprelay interval, and other things
0x04410000GetSprelayInterval Returns: u32 interval, u32 unk. Gets the sprelay interval, and other things
0x04420000?
0x04430042(u32 Size, ((Size<<4)|0xC), Buf). Size must be at least 0x208
0x04440042(u32 Size, ((Size<<4)|0xC), Buf). Size must be at least 0x130
0x04450040(u8 unk_5)
0x04460000Returns: u8 unk_5
0x04470002RegisterNewArrivalEventPrivileged
0x04480000?Stubbed
0x04490142RegisterTaskPrivileged
0x044A0180SetStorageInfoPrivileged
0x044B01C0RegisterStorageEntryPrivileged
0x044C0080UnregisterStoragePrivileged
0x044D0080GetStorageInfoPrivileged
0x044E0080GetStorageEntryInfoPrivileged
0x044F0102UpdateTaskIntervalPrivileged
0x04500102UpdateTaskCountPrivileged
0x045100C2GetTaskIntervalPrivileged
0x045200C2GetTaskCountPrivileged
0x045300C2GetTaskServiceStatusPrivileged
0x04540102GetTaskStatePrivileged
0x045500C2GetTaskResultPrivileged
0x045600C2GetTaskCommErrorCodePrivileged
0x04570142GetTaskStatusPrivileged
0x04580104SetTaskQueryPrivileged

boss:P also contains all of the commands from boss:U.

Camera Services

cam:c (PORT_REG) #

Same as cam:u

cam:s (PORT_CAL) #

Same as cam:u

cam:q (PORT_QTM) #

This was added with New3DS.

Command HeaderDescription
0x00010040StartCapture
0x00020040StopCapture
0x0003004?IsBusy
0x00040040ClearBuffer
0x0005004?GetVsyncInterruptEvent
0x0006004?GetBufferErrorInterruptEvent
0x0007????StartRecieving
0x00080040IsFinishedRecieving
0x00090100SetTransferLines
0x000A008?GetMaxLines
0x000B0100SetTransferBytes
0x000C004?GetTransferBytes
0x000D008?GetMaxBytes
0x000E0080SetTrimming
0x000F004?IsTrimming
0x00100140SetTrimmingParams
0x0011????GetTrimmingParams
0x00120140SetTrimmingParamsCenter
0x00130040Activate
0x00140080SwitchContext
0x00150080SetExposure
0x00160080SetWhiteBalance
0x00170080SetSharpness
0x00180080SetAutoExposure
0x0019004?IsAutoExposure
0x001A0080SetAutoWhiteBalance
0x001B004?IsAutoWhiteBalance
0x001C00C0FlipImage
0x001D020?SetDetailSize
0x001E00C0SetSize
0x001F0080SetFrameRate
0x00200080SetPhotoMode
0x002100C0SetEffect
0x00220080SetContrast
0x00230080SetLensCorrection
0x002400C0SetOutputFormat
0x0025014?SetAutoExposureWindow
0x0026014?SetAutoWhiteBalanceWindow
0x00270080SetNoiseFilter
0x00280080SyncronizeVsyncTiming
0x0029????GetLatestVsyncTiming
0x002A????GetStereoCallibrationData
0x002B????SetPackageParameterWithoutContext
0x002C0080SetPackageParameterWithContext
0x002D????SetPackageParameterWithContextDetail
0x002E???GetSuitableY2RStandardCoeffecient
0x002FPlayShutterSoundWithWave
0x0030????GetShutterSound
0x0031000?DriverInitialize
0x0032000?DriverFinalize
0x0033000?GetActivatedCamera
0x0034000?GetSleepCamera
0x00350040SetSleepCamera
0x00360040SetBrightnessSyncronization
0x0037004????
0x0038000????
0x0039004????
0x003A0080???
0x003B004????
0x003C0080???
0x003D000????
0x003E0000???

Most commands are same as cam:u, although, with different command headers since some commands which are available in cam:u do not exist in cam:q

CECD Services

Streetpass stuff.

CECD Service “cecd:u” #

Command HeaderDescription
0x000100C2Open/ OpenRawFile
0x00020042Read/ ReadRawFile
0x00030104ReadMessage
0x00040106ReadMessageWithHMAC
0x00050042Write/ WriteRawFile
0x00060104WriteMessage
0x00070106WriteMessageWithHMAC
0x00080102Delete
0x000900C2SetData (16*length+10 of CecMessageId buffer in cmdbuff[4] (always 16*8+10), CecMessageId* in cmdbuf[5])
0x000A00C4ReadData/ GetSystemInfo
0x000B0040Start
0x000C0040Stop
0x000D0082GetCecInfoBuffer
0x000E0000GetCecdState (returns CecStateAbbreviated in cmdbuf[2])
0x000F0000GetCecInfoEventHandle (returns event handle in cmdbuf[3])
0x00100000GetChangeStateEventHandle (returns event handle in cmdbuf[3])
0x00110104OpenAndWrite
0x00120104OpenAndRead
0x001E0082GetEventLog
0x001F0000GetEventLogStart
0x00200000GetEventLogEntryCount
0x0021….?

CecDataPathType #

NameValueNotes
CEC_PATH_MBOX_LIST1data:/CEC/MBoxList____
CEC_PATH_MBOX_INFO2data:/CEC//MBoxInfo____
CEC_PATH_INBOX_INFO3data:/CEC//InBox___/BoxInfo_____
CEC_PATH_OUTBOX_INFO4data:/CEC//OutBox__/BoxInfo_____
CEC_PATH_OUTBOX_INDEX5data:/CEC//OutBox__/OBIndex_____
CEC_PATH_INBOX_MSG6data:/CEC//InBox___/_<message_id>
CEC_PATH_OUTBOX_MSG7data:/CEC//OutBox__/_<message_id>
CEC_PATH_ROOT_DIR10data:/CEC
CEC_PATH_MBOX_DIR11data:/CEC/
CEC_PATH_INBOX_DIR12data:/CEC//InBox___
CEC_PATH_OUTBOX_DIR13data:/CEC//OutBox__
101 thru 199 (inclusive)data:/CEC//MBoxData.0
CECMESSAGE_BOX_ICON101data:/CEC//MBoxData.001
CECMESSAGE_BOX_TITLE110data:/CEC//MBoxData.010

CecCommand #

NameValueNotes
CEC_COMMAND_NONE0
CEC_COMMAND_START1
CEC_COMMAND_RESET_START2
CEC_COMMAND_READYSCAN3
CEC_COMMAND_READYSCANWAIT4
CEC_COMMAND_STARTSCAN5
CEC_COMMAND_RESCAN6
CEC_COMMAND_NDM_RESUME7
CEC_COMMAND_NDM_SUSPEND8
CEC_COMMAND_NDM_SUSPEND_IMMEDIATE9
CEC_COMMAND_STOPWAIT0xA
CEC_COMMAND_STOP0xB
CEC_COMMAND_STOP_FORCE0xC
CEC_COMMAND_STOP_FORCE_WAIT0xD
CEC_COMMAND_RESET_FILTER0xE
CEC_COMMAND_DAEMON_STOP0xF
CEC_COMMAND_DAEMON_START0x10
CEC_COMMAND_EXIT0x11
CEC_COMMAND_OVER_BOSS0x12
CEC_COMMAND_OVER_BOSS_FORCE0x13
CEC_COMMAND_OVER_BOSS_FORCE_WAIT0x14
CEC_COMMAND_END0x15

CecStateAbbreviated #

NameValueNotes
CEC_STATE_ABBREV_IDLE1Corresponds to CEC_STATE_IDLE
CEC_STATE_ABBREV_INACTIVE2Corresponds to CEC_STATEs *FINISH*, *POST, and OVER_BOSS
CEC_STATE_ABBREV_SCANNING3Corresponds to CEC_STATE_SCANNING
CEC_STATE_ABBREV_WLREADY?4Corresponds to CEC_STATE_WIRELESS_READY when some unknown bool is true
CEC_STATE_ABBREV_OTHER5Corresponds to CEC_STATEs besides *FINISH*, *POST, and OVER_BOSS and those listed here

CecMessageId #

TypeField
char[8]data

CECD Service “cecd:s” #

This contains a similar (probably the same) command handler from 0x0001…. to 0x0021…. as them in cecd:u. In addition, it also contains

Config Services

Config service “cfg:u” #

Command HeaderAvailable since system versionDescription
0x00010082GetConfigInfoBlk2/GetConfig
0x00020000SecureInfoGetRegion/GetRegion
0x00030040GenHashConsoleUnique/GetTransferableId
0x000400003.0.0-5GetRegionCanadaUSA/IsCoppacsSupported
0x000500005.0.0-11GetSystemModel
0x000600006.0.0-11GetModelNintendo2DS
0x000700407.0.0-13(u8 val) This writes the input u8 to the first byte in the config-block for blkID 0x00160000.
0x000800807.0.0-13TranslateCountryInfo
0x000900407.0.0-13GetCountryCodeString
0x000A00407.0.0-13GetCountryCodeID
0x000B00009.3.0-XIsFangateSupported

Config service “cfg:s” #

cfg:s contains all the commands in cfg:u, in addition to the following:

CSND Services

The CSND service talks to the DSP using the DSP FIFO to negotiate what CSND channels are allocated to the DSP, and this seems to be channels 0-7 (usually). The rest are dedicated to CSND services.

CSND service “csnd:SND” #

Command HeaderDescription
0x00010140Initialize
0x00020000Shutdown
0x00030040ExecuteCommands
0x00040080PlaySoundDirectly
0x00050000AcquireSoundChannels
0x00060000ReleaseSoundChannels
0x00070000AcquireCapUnit
0x00080040ReleaseCapUnit
0x00090082FlushDataCache
0x000A0082StoreDataCache
0x000B0082InvalidateDataCache
0x000C0000Reset

A maximum of 4 service sessions can be opened at the same time for this service.

DSP Services

DSP service “dsp::DSP” #

Command HeaderDescription
0x00010040RecvData
0x00020040RecvDataIsReady
0x00030080SendData
0x00040040SendDataIsEmpty
0x000500C2SendFifoEx(unsigned short, unsigned short const*, unsigned int, unsigned int)
0x000600C0RecvFifoEx(unsigned short *, unsigned short, unsigned int, unsigned int)
0x00070040SetSemaphore
0x00080000GetSemaphore
0x00090040ClearSemaphore
0x000A0040MaskSemaphore
0x000B0000CheckSemaphoreRequest
0x000C0040ConvertProcessAddressFromDspDram
0x000D0082WriteProcessPipe
0x000E00C0ReadPipe
0x000F0080GetPipeReadableSize
0x001000C0ReadPipeIfPossible
0x001100C2LoadComponent
0x00120000UnloadComponent
0x00130082FlushDataCache
0x00140082InvalidateDCache
0x00150082RegisterInterruptEvents
0x00160000GetSemaphoreEventHandle
0x00170040SetSemaphoreMask
0x00180040GetPhysicalAddress
0x00190040GetVirtualAddress
0x001A0042SetIirFilterI2S1. Wrapper for cdc:DSP cmd 1
0x001B0042SetIirFilterI2S2. Wrapper for cdc:DSP cmd 2
0x001C0082SetIirFilterEQ. Wrapper for cdc:DSP cmd 3
0x001D00C0ReadMultiEx_SPI2(unsigned char, unsigned char, unsigned char *, unsigned char) (Wrapper for cdc:DSP cmd 4)
0x001E00C2WriteMultiEx_SPI2(unsigned char, unsigned char, unsigned char const*, unsigned char) (Wrapper for cdc:DSP cmd 5)
0x001F0000GetHeadphoneStatus
0x00200040ForceHeadphoneOut
0x00210000GetIsDspOccupied

This is the main service for playing audio. The CSND service can be used for playing audio as well, however most processes use this DSP service for playing audio. The DSP and CSND hardware can play audio simultaneously.

ErrDisp

This system process handles displaying the error screens, such as “an error has occurred, the system needs shutdown”. This can also display a register dump for exceptions, and info for fatal errors. (Normally the black-screen errors are displayed on retail, while the latter is displayed on development units.)

The register dump/fatal error info can also be written to nandrw/sys/native.log. On retail consoles, the system does not notify ErrDisp that any user-land exceptions occurred, ErrDisp is only notified for this on dev/debug units. Therefore, on retail consoles native.log only contains info from fatal errors. Starting with 5.0.0-11 ErrDisp no longer writes logs to native.log, except when the error-type is value 5 and when other checks with the errorinfo structure are successful (normally processes using this port never use error-type 5).

Filesystem Services

Services #

Filesystem service “fs:USER” #

You can at most have 32 FS archive handles.

Command HeaderAvailable since system versionDescriptionRequired exheader access info bitmask
0x000100C6?Dummy1None
0x040100C4?ControlNone
0x08010002?InitializeNone
0x080201C2?OpenFileNone
0x08030204?OpenFileDirectlyNone
0x08040142?DeleteFileNone
0x08050244?RenameFileNone
0x08060142?DeleteDirectoryNone
0x08070142?DeleteDirectoryRecursivelyNone
0x08080202?CreateFileNone
0x08090182?CreateDirectoryNone
0x080A0244?RenameDirectoryNone
0x080B0102?OpenDirectoryNone
0x080C00C2?OpenArchiveEach archive ID code has separate access info bitmasks, if it has any
0x080D0144?ControlArchiveNone
0x080E0080?CloseArchiveNone
0x080F0180?Obsoleted_2_0_FormatThisUserSaveDataNone
0x08100200?Obsoleted_3_0_CreateSystemSaveData0x4, for when the input saveID doesn’t match the exheader saveID
0x08110040?Obsoleted_3_0_DeleteSystemSaveData0x1004, for when the input saveID doesn’t match the exheader saveID
0x08120080?GetFreeBytesNone
0x08130000?GetCardType0x1017
0x08140000?GetSdmcArchiveResourceNone
0x08150000?GetNandArchiveResource0x1007
0x08160000?GetSdmcFatfsError0x2
0x08170000?IsSdmcDetectedNone
0x08180000?IsSdmcWritableNone
0x08190042?GetSdmcCid0x2
0x081A0042?GetNandCid0x2
0x081B0000?GetSdmcSpeedInfo0x2
0x081C0000?GetNandSpeedInfo0x2
0x081D0042?GetSdmcLog0x2
0x081E0042?GetNandLog0x2
0x081F0000?ClearSdmcLog0x2
0x08200000?ClearNandLog0x2
0x08210000?CardSlotIsInserted0x1017
0x08220000?CardSlotPowerOn0x2
0x08230000?CardSlotPowerOff0x2
0x08240000?CardSlotGetCardIFPowerStatus0x2
0x08250040?CardNorDirectCommand0x2
0x08260080?CardNorDirectCommandWithAddress0x2
0x08270082?CardNorDirectRead0x2
0x082800C2?CardNorDirectReadWithAddress0x2
0x08290082?CardNorDirectWrite0x2
0x082A00C2?CardNorDirectWriteWithAddress0x2
0x082B00C2?CardNorDirectRead_4xIO0x2
0x082C0082?CardNorDirectCpuWriteWithoutVerify0x2
0x082D0040?CardNorDirectSectorEraseWithoutVerify0x2
0x082E0040?GetProductInfo0x1005
0x082F0040?GetProgramLaunchInfo0x1005
0x08300182?Obsoleted_3_0_CreateExtSaveData0xC, for when the input extdataID doesn’t match the exheader extdataID
0x08310180?Obsoleted_3_0_CreateSharedExtSaveData0x1005
0x08320102?Obsoleted_3_0_ReadExtSaveDataIcon0x100D, for when the input extdataID doesn’t match the exheader extdataID
0x08330082?Obsoleted_3_0_EnumerateExtSaveData0x1005
0x08340082?Obsoleted_3_0_EnumerateSharedExtSaveData0x1005
0x08350080?Obsoleted_3_0_DeleteExtSaveData0x100D, for when the input extdataID doesn’t match the exheader extdataID
0x08360080?Obsoleted_3_0_DeleteSharedExtSaveData0x1005
0x08370040?SetCardSpiBaudRate0x2
0x08380040?SetCardSpiBusMode0x2
0x08390000?SendInitializeInfoTo9None
0x083A0100?GetSpecialContentIndex0x1005
0x083B00C2?GetLegacyRomHeader0x1015
0x083C00C2?GetLegacyBannerData0x1015
0x083D0100?CheckAuthorityToAccessExtSaveData0x44
0x083E00C2?QueryTotalQuotaSizeNone
0x083F00C0?Obsoleted_3_0_GetExtDataBlockSizeNone
0x08400040?AbnegateAccessRight?
0x08410000?DeleteSdmcRoot0x1005
0x08420040?DeleteAllExtSaveDataOnNand0x1005
0x08430000?InitializeCtrFileSystemNone
0x08440000?CreateSeed0x2
0x084500C2?GetFormatInfo?
0x08460102?GetLegacyRomHeader20x1015
0x08470180?Obsoleted_2_0_FormatCtrCardUserSaveData0x6
0x08480042?GetSdmcCtrRootPath0x100D
0x08490040?GetArchiveResource?
0x084A0002?ExportIntegrityVerificationSeed0x4000
0x084B0002?ImportIntegrityVerificationSeed0x4000
0x084C0242?FormatSaveData0x6, in some cases this write isn’t needed however
0x084D0102?GetLegacySubBannerData0x1015
0x084E0342?UpdateSha256Context0x5
0x084F0102?ReadSpecialFileNone
0x08500040?GetSpecialFileSizeNone
0x085102423.0.0-5CreateExtSaveDataShared extdata: 0x101005. Regular extdata in certain cases: 0xC
0x085201003.0.0-5DeleteExtSaveDataShared extdata: 0x101005. Regular extdata in certain cases: 0x10100D
0x085301423.0.0-5ReadExtSaveDataIcon0x10100D (this doesn’t apply in certain cases, however)
0x085400C03.0.0-5GetExtDataBlockSize0x10100D (this doesn’t apply in certain cases, however)
0x085501023.0.0-5EnumerateExtSaveData0x101005
0x085602403.0.0-5CreateSystemSaveData0x4 (this doesn’t apply in certain cases, however)
0x085700803.0.0-5DeleteSystemSaveData0x1004 (this doesn’t apply in certain cases, however)
0x085800003.0.0-5StartDeviceMoveAsSource0x2004
0x085902003.0.0-5StartDeviceMoveAsDestination0x2004
0x085A00C03.0.0-5SetArchivePriorityNone
0x085B00803.0.0-5GetArchivePriorityNone
0x085C00C03.0.0-5SetCtrCardLatencyParameter0xE
0x085D01C03.0.0-5SetFsCompatibilityInfo0x100001
0x085E00403.0.0-5ResetCardCompatibilityParameter0xE
0x085F00403.0.0-5SwitchCleanupInvalidSaveData0x12004
0x086000423.0.0-5EnumerateSystemSaveData0x2004
0x086100423.0.0-5InitializeWithSdkVersionNone
0x086200403.0.0-5SetPriorityNone
0x086300003.0.0-5GetPriorityNone
0x086400003.0.0-5Obsoleted_4_0_GetNandInfoStubbed, this returns an error
0x086501404.0.0-7SetSaveDataSecureValue0x121004 (in certain cases this doesn’t apply, however)
0x086600C04.0.0-7GetSaveDataSecureValue0x121004 (in certain cases this doesn’t apply, however)
0x086700C44.0.0-7ControlSecureSave0x121004
0x086800004.0.0-7GetMediaTypeNone
0x086900004.0.0-7Obsoleted_4_0_GetNandEraseCountStubbed, this returns an error.
0x086A00824.0.0-7ReadNandReportNone
0x086B00C2?SetOtherSaveDataSecureValue0x121004
0x086C00C2?GetOtherSaveDataSecureValue0x121004
0x086D0080?BeginSaveDataMove0x20004
0x086E00C0?SetThisSaveDataSecureValueNone
0x086F0040?GetThisSaveDataSecureValueNone
0x087000C2?CheckArchiveNone
0x08710140?TransferSaveDataCMAC0x20004
0x08720200?RegisterTitleContentOverlay0x80004
0x08730100?UnregisterTitleContentOverlay0x80004
0x08740000?UnregisterAllTitleContentOverlays0x80004
0x08750140?SetSaveArchiveSecureValueNone
0x087600C0?GetSaveArchiveSecureValueNone
0x08770140?RegisterSpecialTitleContent0x80004
0x08780100?UnregisterSpecialTitleContent0x80004
0x087900C2?Same as GetLegacyBannerData, except for the last parameter this internally passes u8 value 0x1 instead of 0x0, for the FSPXI command.0x101015
0x087A01809.6.0-XAddSeed0x200000
0x087B00809.6.0-XGetSeed0x200000
0x087C00809.6.0-XDeleteSeed0x200000
0x087D00009.6.0-XGetNumSeeds0x200000
0x087E00429.6.0-XListSeeds0x200000
0x087F01009.6.0-XTitleContentHasSeed0x200000
0x088008809.6.0-XAddTitleTag0x200000
0x088100809.6.0-XGetTitleTag0x200000
0x088200809.6.0-XDeleteTitleTag0x200000
0x088300009.6.0-XGetNumTitleTags0x200000
0x088400429.6.0-XListTitleTags0x200000
0x088500C09.6.0-XCheckTitleSeed0x200000
0x088600C011.1.0-XCheckUpdatedDat0x80000

Note: The question marks from Dummy1 to GetSpecialFileSize on the “available since system version” field are mainly there because I think that most of these are necessary for the main system to function, so theoretically that would mean that since the creation of the 3DS these were available, or since launch if that makes more sense. But because of the peculiar nature of some of the functions, they will remain question marks until they can be confirmed 100%.

Friend Services

Friend User Service “frd:u” #

Command HeaderDescription
0x00010000HasLoggedIn
0x00020000IsOnline
0x00030002Login
0x00040000Logout
0x00050000GetMyFriendKey
0x00060000GetMyPreference
0x00070000GetMyProfile
0x00080000GetMyPresence
0x00090000GetMyScreenName
0x000A0000GetMyMii
0x000B0000GetMyLocalAccountId
0x000C0000GetMyPlayingGame
0x000D0000GetMyFavoriteGame
0x000E0000GetMyNcPrincipalId
0x000F0000GetMyComment
0x00100040GetMyPassword
0x00110080GetFriendKeyList
0x00120042GetFriendPresence
0x00130142GetFriendScreenName
0x00140044GetFriendMii
0x00150042GetFriendProfile
0x00160042GetFriendRelationship
0x00170042GetFriendAttributeFlags
0x00180044GetFriendPlayingGame
0x00190042GetFriendFavoriteGame
0x001A00C4GetFriendInfo
0x001B0080IsIncludedInFriendList
0x001C0042UnscrambleLocalFriendCode
0x001D0002UpdateGameModeDescription
0x001E02C2UpdateMyPresence
0x001F0042SendInvitation
0x00200002AttachToEventNotification
0x00210040SetNotificationMask
0x00220040GetEventNotification
0x00230000GetLastResponseResult
0x00240040PrincipalIdToFriendCode
0x00250080FriendCodeToPrincipalId
0x00260080IsValidFriendCode
0x00270040ResultToErrorCode
0x00280244RequestGameAuthentication
0x00290000GetGameAuthenticationData
0x002A0204RequestServiceLocator
0x002B0000GetServiceLocatorData
0x002C0002DetectNatProperties
0x002D0000GetNatProperties
0x002E0000GetServerTimeDifference
0x002F0040AllowHalfAwake
0x00300000GetServerTypes
0x00310082GetFriendComment
0x00320042SetClientSdkVersion
0x00330000GetMyApproachContext
0x00340046AddFriendWithApproach
0x00350082DecryptApproachContext
0x00360000GetExtendedNatProperties

Friend Network Daemon Service “frd:n” #

Command HeaderDescription
0x00010000GetHandleOfNdmStatusChangedEvent
0x00020000Resume
0x00030040SuspendAsync
0x00040000QueryStatus

Friend Admin Service “frd:a” #

Includes all the commands in frd:u, and, in addition:

GPIO Services

GPIO Service Names #

Service namePermitted GPIO bitmasks
gpio:CDC0x48
gpio:MCU0x48020
gpio:HID0x4301
gpio:NWM0x40020
gpio:IR0xEC0
gpio:NFC0x13000
gpio:QTM0x20000

For the mapping between GPIO bitmasks and IRQs see: GPIO:BindInterrupt#Supported_values.

The commands for these services are identical.

The input bitmask for each command is masked with the above permission bitmask, if the result is non-zero an error is occurred.

GPIO Services #

Command HeaderDescriptionUses GPIO Regs
0x00010040u32 GetRegPart1(u32 mask)0x10147010, 0x10147020
0x00020080void SetRegPart1(u32 value, u32 mask)0x10147010, 0x10147020
0x00030040u32 GetRegPart2(u32 mask)0x10147010, 0x10147024
0x00040080u32 SetRegPart2(u32 value, u32 mask)0x10147010, 0x10147024
0x00050040u32 GetInterruptMask(u32 mask)0x10147010, 0x10147024
0x00060080void SetInterruptMask(u32 value, u32 mask)0x10147010, 0x10147024
0x00070040GetGPIOData0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028
0x00080080SetGPIOData0x10147010, 0x10147014, 0x10147020, 0x10147028
0x00090082BindInterruptNone
0x000A0042UnbindInterruptNone

GPIO Bitmask #

The bitmask used by the service commands determines which bits in the GPIO registers to access. The output value from GetGPIOData uses the same format as the bitmask: the values of bits in the output field are set to the value of GPIO data when those bits are set in the input bitmask.

GSP Services

__TOC__

GSP service “gsp::Gpu” #

Command HeaderAvailable since system versionGSP rights requiredDescription
0x00010082YesWriteHWRegs
0x00020084YesWriteHWRegsWithMask
0x00030082YesWriteHWRegRepeat
0x00040080YesReadHWRegs
0x00050200YesSetBufferSwap
0x00060082NoSetCommandList (Stubbed)
0x000700C2NoRequestDma (Stubbed)
0x00080082NoFlushDataCache
0x00090082NoInvalidateDataCache
0x000A0044NoRegisterInterruptEvents (Stubbed)
0x000B0040Usually not (see below)SetLcdForceBlack
0x000C0000NoTriggerCmdReqQueue
0x000D0140NoSetDisplayTransfer
0x000E0180NoSetTextureCopy
0x000F0200NoSetMemoryFill
0x00100040NoSetAxiConfigQoSMode
0x00110040NoSetPerfLogMode
0x00120000NoGetPerfLog
0x00130042NoRegisterInterruptRelayQueue
0x00140000NoUnregisterInterruptRelayQueue
0x00150002NoTryAcquireRight
0x00160042NoAcquireRight
0x00170000NoReleaseRight
0x00180000NoImportDisplayCaptureInfo
0x00190000See belowSaveVramSysArea
0x001A0000See belowRestoreVramSysArea
0x001B0000YesResetGpuCore
0x001C0040NoSetLedForceOff
0x001D0040NoSetTestCommand (Stubbed)
0x001E0080NoSetInternalPriorities
0x001F00828.0.0-18NoStoreDataCache

The GSP module starts a thread for handling commands for each service session, a maximum of 4 processes can use this service at once. Official applications have an optional code-path which writes to registers during initialization, this is normally not used however.

HID Services

The maximum number of sessions that can open with all of these services combined is 6.

HID service “hid:USER” #

Command HeaderOnly available with hid:SPVRDescription
0x00010200YesCallibrateTouchScreen
0x00020000YesHIDSPVR:UpdateTouchConfig
0x0003….Yes?
0x000400C0Yes?
0x00050000Yes?
0x00060000Yes?
0x00070140Yes?
0x00080000Yes?
0x00090000Yes?
0x000A0000NoGetIPCHandles
0x000B0000YesStartAnalogStickCalibration
0x000C0040YesStopAnalogStickCalibration?
0x000D01C0YesSetAnalogStickCalibrateParam?
0x000E0000YesGetAnalogStickCalibrateParam
0x000F….Yes?
0x0010….Yes?
0x00110000NoEnableAccelerometer
0x00120000NoDisableAccelerometer
0x00130000NoEnableGyroscopeLow
0x00140000NoDisableGyroscopeLow
0x00150000NoGetGyroscopeLowRawToDpsCoefficient
0x00160000NoGetGyroscopeLowCalibrateParam
0x00170000NoGetSoundVolume

HID service “hid:SPVR” #

This is used by Home Menu and other system titles. The command-handler for this is the same as the other HID services, see above.

HTTP Services

HTTP service “http:C” #

Command HeaderAvailable since system-versionAvailable from service-sessionsDescription
0x000100441.0.0-0Initialize
0x000200821.0.0-0Main-onlyCreateContext
0x000300401.0.0-0AllCloseContext
0x000400401.0.0-0CancelConnection
0x000500401.0.0-0GetRequestState
0x000600401.0.0-0GetDownloadSizeState
0x000700401.0.0-0GetRequestError
0x000800421.0.0-0InitializeConnectionSession
0x000900401.0.0-0BeginRequest
0x000A00401.0.0-0BeginRequestAsync
0x000B00821.0.0-0ReceiveData
0x000C01021.0.0-0ReceiveDataTimeout
0x000D01461.0.0-0SetProxy
0x000E00401.0.0-0SetProxyDefault
0x000F00C41.0.0-0SetBasicAuthorization
0x001000801.0.0-0Context-onlySetSocketBufferSize
0x001100C41.0.0-0AddRequestHeader
0x001200C41.0.0-0AddPostDataAscii
0x001300C41.0.0-0AddPostDataBinary
0x001400821.0.0-0AddPostDataRaw
0x001500801.0.0-0SetPostDataType(u8 enum)
0x001600C41.0.0-0SendPostDataAscii
0x001701441.0.0-0SendPostDataAsciiTimeout
0x001800C41.0.0-0SendPostDataBinary
0x001901441.0.0-0SendPostDataBinaryTimeout
0x001A00821.0.0-0SendPostDataRaw
0x001B01021.0.0-0SendPOSTDataRawTimeout
0x001C00801.0.0-0SetPostDataEncoding
0x001D00401.0.0-0NotifyFinishSendPostData
0x001E00C41.0.0-0GetResponseHeader
0x001F01441.0.0-0GetResponseHeaderTimeout
0x002000821.0.0-0GetResponseData
0x002101021.0.0-0GetResponseDataTimeout
0x002200401.0.0-0GetResponseStatusCode
0x002300C01.0.0-0GetResponseStatusCodeTimeout
0x002400821.0.0-0AddTrustedRootCA
0x002500801.0.0-0AddDefaultCert
0x002600801.0.0-0SelectRootCertChain
0x002700C41.0.0-0SetClientCert
0x002800801.0.0-0Context-onlySetClientCertDefault
0x002900801.0.0-0Context-onlySetClientCertContext
0x002A00401.0.0-0All(u32 contexthandle) GetSSLError? This loads a value from state, this doesn’t seem to use any sslc command.
0x002B00801.0.0-0Context-onlySetSSLOpt
0x002C00801.0.0-0Context-onlySetSSLClearOpt
0x002D00001.0.0-0Main-onlyCreateRootCertChain
0x002E00401.0.0-0Main-onlyDestroyRootCertChain
0x002F00821.0.0-0Main-onlyRootCertChainAddCert
0x003000801.0.0-0Main-onlyRootCertChainAddDefaultCert
0x003100801.0.0-0Main-onlyRootCertChainRemoveCert
0x003200841.0.0-0Main-onlyOpenClientCertContext
0x003300401.0.0-0Main-onlyOpenDefaultClientCertContext
0x003400401.0.0-0Main-onlyCloseClientCertContext
0x003501861.0.0-0Main-onlySetDefaultProxy
0x003600001.0.0-0ClearDNSCache
0x003700802.0.0-XSetKeepAlive (bool)
0x003800C03.0.0-X.SetPostDataTypeSize (u8 enum, u32 size) (similar to SetPostDataType)
0x003900003.0.0-X.Finalize
0x003A00808.0.0-XSetKeepAlive?
0x003B00829.0.0-XSetCrl
0x003C00809.0.0-XSetInternalCrl
0x003D00809.0.0-XSetCrlStore
0x003E00009.0.0-XCreateCrlStore
0x003F00409.0.0-XDestroyCrlStore
0x004000829.0.0-XAddCrlToCrlStore
0x004100809.0.0-XAddInternalCrl
0x004200409.0.0-XRemoveCrlFromCrlStore

TLS Root CAs #

Initially a HTTP context will not trust any root-CAs at all. Which root-CAs to trust must be explicitly specified via the add-root-CA service command(s).

I2C Services

I2C Service Names #

Service namesNotesAccessible deviceIDsService used by sysmodule
“i2c::MCU”0, 3MCU
“i2c::CAM”1, 2, 4Camera
“i2c::LCD”5, 6GSP
“i2c::DEB”7, 8Unknown
“i2c::HID”9, 10, 11, 12HID
“i2c::IR”13, and additionally for New3DS i2c module: 17IR
“i2c::EEP”14Cfg
“i2c::NFC”Only available via the New3DS i2c sysmodule.15New3DS NFC
“i2c::QTM”Only available via the New3DS i2c sysmodule.16New3DS QTM

Each I2C service can only access certain I2C device(s). When the specified deviceid isn’t accessible, error 0xE0A02FEA is returned.

IR Services

IR Service “ir:u” #

Command HeaderAvailable since system versionDescription
0x000100001.0.0-0Initialize
0x000200001.0.0-0Shutdown
0x000300421.0.0-0StartSendTransfer
0x000400001.0.0-0WaitSendTransfer
0x000500C21.0.0-0StartRecvTransfer
0x000600001.0.0-0WaitRecvTransfer
0x000700001.0.0-0GetRecvTransferCount
0x000800001.0.0-0GetSendState
0x000900401.0.0-0SetBitRate
0x000A00001.0.0-0GetBitRate
0x000B00401.0.0-0SetIRLEDState
0x000C00001.0.0-0GetIRLEDRecvState
0x000D00001.0.0-0GetSendFinishedEvent
0x000E00001.0.0-0GetRecvFinishedEvent
0x000F00001.0.0-0GetTransferState
0x001000001.0.0-0GetErrorStatus
0x001100401.0.0-0SetSleepModeActive
0x001200401.0.0-0SetSleepModeState

IR Service “ir:USER” #

Command HeaderAvailable since system versionDescription
0x000101822.0.0-2InitializeIrnop
0x000200002.0.0-2FinalizeIrnop
0x000300002.0.0-2ClearReceiveBuffer
0x000400002.0.0-2ClearSendBuffer
0x000500C02.0.0-2WaitConnection
0x000600402.0.0-2RequireConnection (u8 input)
0x000702C02.0.0-2AutoConnection
0x000800002.0.0-2AnyConnection
0x000900002.0.0-2Disconnect
0x000A00002.0.0-2GetReceiveEvent (writes event handle to cmdreply[3])
0x000B00002.0.0-2GetSendEvent (writes event handle to cmdreply[3])
0x000C00002.0.0-2GetConnectionStatusEvent (writes event handle to cmdreply[3])
0x000D00422.0.0-2SendIrnop (u32 size, ((Size<<14) | 2), inbufptr)
0x000E00422.0.0-2SendIrnopLarge (u32 size, ((Size<<8) | 10), inbufptr)
0x000F00402.0.0-2ReceiveIrnop
0x001000422.0.0-2ReceiveIrnopLarge
0x0011….2.0.0-2GetLatestReceiveErrorResult
0x0012….2.0.0-2GetLatestSendErrorResult
0x0013….2.0.0-2GetConnectionStatus
0x0014….2.0.0-2GetTryingToConnectStatus
0x0015….2.0.0-2GetReceiveSizeFreeAndUsed
0x0016….2.0.0-2GetSendSizeFreeAndUsed
0x0017….2.2.0-XGetConnectionRole
0x001801822.2.0-XInitializeIrnopShared
0x001900402.2.0-XReleaseReceivedData (32bit_value input)
0x001A00402.2.0-XSetOwnMachineId (u8 input)

This service was added with 2.0.0-2.

MIC Services

Microphone service “mic:u” #

Command HeaderDescription
0x00010042MapSharedMem
0x00020000UnmapSharedMem
0x00030140StartSampling
0x00040040AdjustSampling
0x00050000StopSampling
0x00060000IsSampling
0x00070000GetEventHandle
0x00080040SetGain
0x00090000GetGain
0x000A0040SetPower
0x000B0000GetPower
0x000C0042SetIirFilterMic
0x000D0040SetClamp
0x000E0000GetClamp
0x000F0040SetAllowShellClosed
0x00100040When the input value is 0, value 1 is written to an u8 MIC module state field. Otherwise, value 0 is written there. Normally the input value is non-zero.

This is an interface for using the MIC hardware via the “cdc:MIC” service and the MIC IO registers.

MP Services

This is used for 3DS<>DS(i) local-WLAN communications, via the DS<>DS wifi protocol.

See also here.

MP service “mp:u” #

Command HeaderAvailable since system-versionDescription
0x00010040GetHandle
0x00020000Initialize
0x00030000Shutdown
0x000400C0Bind
0x00050042SetBeaconData
0x00060000Used prior to MP:Shutdown.
0x00070042SetAppData
0x00080040(s8 unk) Writes the input value into state as an u16, etc.
0x00090040(u16 unk) ?
0x000A0000Unknown. Writes the output u16 to cmdreply[2].
0x000B0000Unknown. Writes the output u32 to cmdreply[2].
0x000C0000Unknown. Writes the output u32 to cmdreply[2].
0x000D00C2?
0x000E0084?
0x000F00C2?
0x00100000?
0x00110080RecvDataFrame
0x00120082?
0x00130040(u32 unk) ?
0x001400C2SendDataFrame

nodeID #

This is an u32 value where the intended range is <16. It’s unknown whether this is for nodes or some sessionID.

NDM Services

NDM service “ndm:u” #

Command HeaderDescription
0x00010042EnterExclusiveState
0x00020002LeaveExclusiveState
0x00030000QueryExclusiveMode
0x00040002LockState
0x00050002UnlockState
0x00060040SuspendDaemons
0x00070040ResumeDaemons
0x00080040SuspendScheduler
0x00090000ResumeScheduler
0x000A0000GetCurrentState
0x000B0000GetTargetState
0x000C0000Stubbed. (Not implemented)
0x000D0040QueryStatus
0x000E0040GetDaemonDisableCount
0x000F0000GetSchedulerDisableCount
0x00100040SetScanInterval
0x00110000GetScanInterval
0x00120040SetRetryInterval
0x00130000GetRetryInterval
0x00140040OverrideDefaultDaemons
0x00150000ResetDefaultDaemons
0x00160000GetDefaultDaemons
0x00170000ClearHalfAwakeMacFilter

Types #

Daemon #

EnumValue
DAEMON_CEC0
DAEMON_BOSS1
DAEMON_NIM2
DAEMON_FRIENDS3

DaemonMask #

EnumValue
DAEMON_MASK_CEC1 << DAEMON_CEC
DAEMON_MASK_BOSS1 << DAEMON_BOSS
DAEMON_MASK_NIM1 << DAEMON_NIM
DAEMON_MASK_FRIENDS1 << DAEMON_FRIENDS

DaemonStatus #

Represents the status of a single daemon.

News Services

This system module handles the system notifications.

The maximum number of notifications that can be stored/handled is 100, hence the intended range for notificationIDs is 0-99.

News service “news:u” #

Command HeaderDescription
0x000100C8AddNotification

This service only has one command.

News service “news:s” #

Command HeaderDescription
0x000100C6AddNotification
0x0002….Stubbed, only returns 0.
0x0003….Stubbed, only returns 0.
0x00040000ResetNotifications
0x00050000GetTotalNotifications
0x00060042SetNewsDBHeader
0x00070082SetNotificationHeader
0x00080082SetNotificationMessage
0x00090082SetNotificationImage
0x000A0042GetNewsDBHeader
0x000B0082GetNotificationHeader
0x000C0082GetNotificationMessage
0x000D0082GetNotificationImage
0x000E0040SetInfoLEDPattern
0x000F0000SyncArrivedNotifications
0x00100040SyncOneArrivedNotification
0x00110040SetAutomaticSyncFlag
0x00120082SetNotificationHeaderOther
0x00130000WriteNewsDBSavedata
0x00140000GetTotalArrivedNotifications

News module NAND savedata #

  • “news.db”: This is the main save-file, the filesize is fixed to 0x2BD0-bytes.
  • “newsXXX.txt” This is the message data for this notification, where XXX is the decimal notification-index in the below headers-array. The filesize should be <= <size listed here>, since that’s the max size read by the notifications applet.
  • “newsXXX.mpo” This is the MPO data for this notification if any, where XXX is the decimal notification-index in the below headers-array. The filesize should be <= <size listed here>, since that’s the max size read by the notifications applet.

news.db #

OffsetSizeDescription
0x00x10Header, see below.
0x100x2BC0 (100 * 0x70)Array of headers for each notification.
OffsetSizeDescription
0x00x1Must be 0x1 “is valid”.
0x10x1Flags
0x20xENormally zero?

Flags #

BitDescription
0Set by news module when handling BOSS notifications and the AddNotification commands. This indicates that there’s “unread” notifications, the notifications applet clears this once all notifications have been “read”.
1Set by news module when handling CECD notifications.

News module startup #

The actual main function called by main() does the following:

NIM Services

NIM updater service “nim:u” #

Command HeaderDescription
0x00010000StartNetworkUpdate
0x00020000GetProgress
0x00030000Cancel
0x00040000CommitSystemTitles
0x00050000GetBackgroundEventForMenu
0x00060000GetBackgroundEventForNews
0x00070000FormatSaveData
0x00080000GetCustomerSupportCode
0x00090000IsCommittableAllSystemTitles
0x000A0000GetBackgroundProgress
0x000B0000GetSavedHash
0x000C0082UnregisterTask
0x000D0080IsRegistered
0x000E0080FindTaskInfo
0x000F0042GetTaskInfos
0x00100000DeleteUnmanagedContexts
0x00110000UpdateAutoTitleDownloadTasksAsync
0x00120000StartPendingAutoTitleDownloadTasksAsync
0x00130000GetAsyncResult
0x00140000CancelAsyncCall
0x00150000IsPendingAutoTitleDownloadTasks
0x00160000GetNumAutoTitleDownloadTasks
0x00170042GetAutoTitleDownloadTaskInfos
0x00180080CancelAutoTitleDownloadTask
0x00190002SetAutoDbgDat
0x001A0002GetAutoDbgDat
0x001B0042SetDbgTasks
0x001C0042GetDbgTasks
0x001D0000DeleteDbgData
0x001E0042SetTslXml
0x001F0000GetTslXmlSize
0x00200042GetTslXml
0x00210000DeleteTslXml
0x00220042SetDtlXml
0x00230000GetDtlXmlSize
0x00240042GetDtlXml
0x00250000UpdateAccountStatus
0x00260180StartTitleDownload
0x00270000StopTitleDownload
0x00280000GetTitleDownloadProgress
0x00290246RegisterTask
0x002A0000IsSystemUpdateAvailable
0x002B0000? (Response: 0 = 0x002B0040, 1 = Result Code)
0x002C0000UpdateTickets
0x002D00C0DownloadTitleSeedAsync
0x002E0000DownloadMissingTitleSeedsAsync

NIM shop service “nim:s” #

Command HeaderDescription
0x00010200StartDownloadSimple
0x00020000CancelDownload
0x00030000GetProgress
0x00050082UnregisterTask
0x00060080IsTaskRegistered
0x00070080GetTaskInfoFromTitleId
0x00080042GetTaskList
0x0009xxxxReturns 0xE0C0D3F4, not implemented.
0x000A0000CheckSysupdateAvailableSOAP
0x000B0084SetAttribute
0x000C0082SetAttributeInt32
0x000D0082Connect
0x000E0000UnregisterSOAP, aka soap account delete
0x000F0042SetCountrySOAP, change effective country registry
0x00100080Returns 0xE0C0D3F4, not implemented, reads for an int64 in IPC.
0x001100C4Returns 0xE0C0D3F4, not implemented, reads for IPC parameters.
0x00120084SetExternalAccountSOAP
0x00130042DeleteExternalAccountSOAP
0x00140000DeleteSavedCardSOAP
0x00150082ListCashReplenishAmountsSOAP
0x0016020AListTitles
0x0017020AListContentSetsExSOAP
0x0018020AListItemsSOAP
0x0019028CListContentSetGroupsSOAP
0x001E0104GetTaxesSOAP
0x001F0106GetTaxLocationSOAP
0x00220080AccountDeleteTitleETicketsSOAP. The SOAP request is sent only after the ticket for the specified titleID has been successfully deleted.
0x00290000AccountCheckBalanceSOAP
0x002D0042DownloadTickets
0x0036xxxxReturns 0xE0C0D3F4, not implemented.
0x003C0002RegisterSelf
0x003F0000GetInitializeResult. Checks whether nim is properly initialized or not. If it is not, the result code returned is non-zero.
0x00420240StartDownload
0x00550246RegisterTask
0x00570082ConnectNoTicketDownload
0x005B0000DeleteInitAccSavedData
0x005C0000DeleteAccountSavedData
0x005F00C0DownloadTitleSeed

NIM server service “nim:aoc” #

Command HeaderDescription
0x00030042SetApplicationId
0x00040042SetTin
0x000902D0ListContentSetsEx
0x00180000GetBalance
0x001D0000GetCustomerSupportCode
0x00210000Initialize
0x00240282CalculateContentsRequiredSize
0x00250000RefreshServerTime

NIM service “nim:ndm” #

Command HeaderDescription
0x00010000GetDaemonEventHandle
0x00020000Does nothing, always returns 0
0x00030000SetDaemonToWorkingState
0x00040040SetDaemonToSuspendedState
0x00050000GetDaemonState

kagiya server #

The nim system module communicates with a server called kagiya (kagiya-ctr.cdn.nintendo.net or kagiya-dev-ctr.cdn.nintendo.net for development units). It provides the 9.6 crypto seed in binary form for any given title ID under (HTTPS) kagiya-ctr.cdn.nintendo.net/title/0x%16llx/ext_key?country=%s, where %16llx is the title ID and %s is a country code as used in the eShop.

NS and APT Services

The NS (Nintendo User Interface Shell) system module is the first module launched from a CTR-NAND title after the FIRM processes are loaded (also see Bootloader). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches ErrDisp, then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from config. On dev-units if the menu TID block doesn’t exist in config, NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to ACTIVEMENUTID. NS uses pm:app to launch titles.

NWM Services

These NWM services are used for local-WLAN communications, NWM module handles regular wifi APs as well. These services are used for creating/connecting to networks, and for sending/receiving data over the network etc. NWM module uses the wifi SDIO hardware via the IO registers for this.

NWM local-WLAN service “nwm::UDS” #

Command HeaderAvailable since system versionDescription
0x000102C2Initialize Deprecated. Appears to be handled about the same way as NWMUDS:InitializeWithVersion, except this uses version=0x100 internally instead of loading it from the command request.
0x00020000Scrap Not used by sub-wars. This sets a state value to 0x2 then signals an event. This is probably some sort of shutdown command since this state write will result in all UDS commands returning an error if used afterwards.
0x00030000Finalize
0x00040402CreateNetwork Deprecated. Only used by very old titles.
0x00050040EjectClient
0x00060000EjectSpectator
0x00070080UpdateNetworkAttribute
0x00080000DestroyNetwork
0x00090442ConnectNetwork Deprecated. Only used by very old titles.
0x000A0000DisconnectNetwork
0x000B0000GetConnectionStatus
0x000C0000This writes two output u8 values to cmdreply[2] +0/+1. Not used by sub-wars.
0x000D0040GetNodeInformation
0x000E0006Identical to GetNodeInformationList. Deprecated, only used by old titles.
0x000F0404StartScan
0x00100042SetApplicationData
0x00110040GetApplicationData
0x00120100Bind
0x00130040Unbind
0x001400C0PullPacket
0x00150080SetMaxSendDelay(u64 unk) Not used by sub-wars.
0x00160040(u8 inputval) Unknown. Not used by sub-wars.
0x00170182SendTo
0x00180040(u16 inputval) Unknown. Not used by sub-wars.
0x00190040(u32 inputval) Unknown. Not used by sub-wars.
0x001A0000GetChannel
0x001B0302InitializeWithVersion
0x001C0040(u8 inputval) Unknown. Not used by sub-wars.
0x001D0044Unknown, >2.0.0-2CreateNetwork2 This is a replacement for the original network-creation command.
0x001E0084Unknown, >2.0.0-2ConnectNetwork2 This is a replacement for the original network-connection command.
0x001F0006Unknown, >2.0.0-2GetNodeInformationList
0x00200040Unknown, >2.0.0-2Flush (u8 data_frame_index) Unknown. Not used by sub-wars.
0x00210080Unknown, >2.0.0-2SetProbeResponseParam
0x00220402Unknown, >2.0.0-2ScanOnConnection
0x00230000Unknown, >2.0.0-2This writes an output u16 value to cmdreply[2]. Unknown. Not used by sub-wars.

PullPacket is used for receiving data over the network and SendTo is for sending data over the network.

PDN Services

PDN PTM Service “pdn:s” #

Command HeaderDescription
0x00010000GetWakeStatus. This loads PDN_WAKE_ENABLE and PDN_WAKE_REASON, then writes them to cmdreplyword[2] and cmdreplyword[3].
0x00020080ConfigureWakeEvents. PDN_WAKE_REASON = cmdword[2] & cmdword[1]. This then writes cmdword[1] to PDN_WAKE_ENABLE. PDN_WAKE_REASON = cmdword[2] & ~cmdword[1].
0x00030040Acknowledge. Writes cmdword[1] to PDN_WAKE_REASON.

PDN DSP Service “pdn:d” #

Command HeaderDescription
0x000100C0(bool enable, bool reset, bool deassertResetAfterReset) Enables and/or resets the DSP and/or holds it in reset

PDN I2S Service “pdn:i” #

Command HeaderDescription
0x00010040This sets bit0 in PDN_I2S1_CNT to u8 cmd+4.
0x00020040This sets bit1 in PDN_I2S2_CNT to u8 cmd+4.

Used by Codec Services.

Process Manager Services

Process Manager app service “pm:app” #

Command HeaderDescription
0x00010140LaunchTitle
0x00020082LaunchFIRM
0x00030080TerminateApplication
0x00040100TerminateTitle
0x000500C0TerminateProcess
0x00060082PrepareForReboot
0x00070042GetFIRMLaunchParams
0x00080100GetTitleExheaderFlags
0x00090042SetFIRMLaunchParams
0x000A0140SetAppResourceLimit
0x000B0140GetAppResourceLimit
0x000C0080UnregisterProcess
0x000D0240LaunchTitleUpdate

Process Manager debug service “pm:dbg” #

Command HeaderDescription
0x00010140LaunchAppDebug
0x00020140LaunchApp
0x00030000RunQueuedProcess

A maximum of three sessions can be open with both of these services combined, therefore only three processes can use either of these services at once.

Process Services

PS service “ps:ps” #

Command HeaderAvailable since system versionDescription
0x000102441.0.0-0SignRsaSha256
0x000202441.0.0-0VerifyRsaSha256
Not implementedSetAesKey (just returns error 0xD8C107F4)
0x000402041.0.0-0EncryptDecryptAes
0x000502841.0.0-0EncryptSignDecryptVerifyAesCcm
0x000600401.0.0-0GetRomId (u32 processID)
0x000700401.0.0-0GetRomId2 (u32 processID)
0x000800401.0.0-0GetRomMakerCode (u32 processID)
0x000900001.0.0-0GetCTRCardAutoStartupBit
0x000A00001.0.0-0GetLocalFriendCodeSeed
0x000B00001.0.0-0GetDeviceId
0x000C00001.0.0-0SeedRNG
0x000D00421.0.0-0GenerateRandomBytes
0x000E00828.1.0-0_New3DS]], Old3DS = 9.0.0-20Interface for Process_Services_PXI New3DS command 0x04010084.
0x000F00828.1.0-0_New3DS]], Old3DS = 9.0.0-20Interface for Process_Services_PXI New3DS command 0x04020082.
0x001000428.1.0-0_New3DS]], Old3DS = 9.0.0-20Interface for Process_Services_PXI New3DS command 0x04030044.
0x001100428.1.0-0_New3DS]], Old3DS = 9.0.0-20Interface for Process_Services_PXI New3DS command 0x04040044.

These commands are an interface for Process_Services_PXI.

PTM Services

A total of 24 sessions can be open for each of these services combined. The commands for each service are handled by the PTM module main() thread.

User PTM Service “ptm:u” / PTM services #

Command HeaderDescription
0x00010002RegisterAlarmClient
0x00020080SetRtcAlarm
0x00030000GetRtcAlarm
0x00040000CancelRtcAlarm
0x00050000GetAdapterState
0x00060000GetShellState
0x00070000GetBatteryLevel
0x00080000GetBatteryChargeState
0x00090000GetPedometerState
0x000A0042GetStepHistoryEntry
0x000B00C2GetStepHistory
0x000C0000GetTotalStepCount
0x000D0040SetPedometerRecordingMode
0x000E0000GetPedometerRecordingMode
0x000F0084GetStepHistoryAll

The above commands are available for all PTM services, except the SetSystemTime service.

PXI Services

PXI Services #

The ‘pxi’ sysmodule contains the following services:

Each of these services has up to 4 static IPC buffers of size 0x1000. When any of these service ports are sync:d, the IPC cmdbuf (TLS+0x80+) is sent over PXI to the ARM9.

Each PXI service can only have one session open for it at a time.

Protocol #

The communication protocol for normal PXI commands is documented below. The size of cmd_buf is calculated from the cmd_hdr. With newer FIRM the total size for command header + buffer must be at most 0x40 words, otherwise Process9 will panic.

QTM Services

QTM is the New_3DS system module in charge of handling head tracking. A maximum of three (only two until 9.3.0-21) sessions for *all* QTM services combined.

Head tracking is not usable when any other process is using any of the cameras, QTM returns error 0xC8A18008 for this.

QTM only tracks the position of the user’s two eyes, but does not track the area they are focusing at. Hence, “eye-tracking” is sometimes used to refer to this feature on 3DS, even though it means something else outside the 3DS hacking scene.

RO Services

RO service “ldr:ro” #

Command HeaderAvailable since system versionDescription
0x000100C22.0.0-2Initialize
0x000200822.0.0-2LoadCRR
0x000300422.0.0-2UnloadCRR
0x000402C22.0.0-2LoadCRO
0x000500C22.0.0-2UnloadCRO
0x000600422.0.0-2LinkCRO
0x000700422.0.0-2UnlinkCRO
0x000800422.0.0-2Shutdown
0x000902C27.2.0-17LoadCRO_New

The mapadress used in these services is calculated by the user-process like so: when inputaddr is <0x08000000, the address used is the same one from inputaddr. Otherwise, the address is: mapvaddr = inputaddr - (0x08000000 - <main-process .text address + .text, .rodata, .data, and .bss size aligned to pagesize>). This service API is used for CTR “DLLs”/shared libraries: CRO.

Services

Services are an abstraction of ports and are the commonly used way of inter-process communication outside of the kernel. While handles of regular ports are retrieved from svcConnectToPort, service handles are retrieved through the port srv: (“service manager”).

When a service is registered, svcCreatePort is used without a port-name. This means that the port is inaccessible via the port SVCs outside of sm-module. See below for getting a session handle for sending commands to services.

Socket Services

The socket sysmodule has a maximum limit of 64 sockets in total.

Socket user service “soc:U” #

There can be up to 18 sessions of this service.

Command HeaderAvailable since system-versionDescription
0x00010044InitializeSockets
0x000200C2socket
0x00030082listen
0x00040082accept
0x00050084bind
0x00060084connect
0x00070104recvfrom_other
0x00080102recvfrom
0x00090106sendto_other
0x000A0106sendto
0x000B0042close
0x000C0082shutdown
0x000D0082gethostbyname
0x000E00C2gethostbyaddr
0x000F0106getaddrinfo
0x00100102getnameinfo
0x00110102getsockopt
0x00120104setsockopt
0x001300C2fcntl
0x00140084poll
0x00150042sockatmark
0x00160000gethostid
0x00170082getsockname
0x00180082getpeername
0x00190000ShutdownSockets
0x001A00C0GetNetworkOpt
0x001B0040ICMPSocket
0x001C0104ICMPPing
0x001D0040ICMPCancel
0x001E0040ICMPClose
0x001F0040GetResolverInfo
0x00200146SendToMultiple
0x00210002CloseSockets
0x00220040(int sockfd) Might be the inverse of command 0x00230040?
0x00230040AddGlobalSocket
0x100100C0??
0x10030142??
0x10050084??
0x10070102??

Socket privileged service “soc:P” #

There can be up to 3 sessions of this service.

SPI Services

SPI Services #

  • “SPI::NOR” (used by cfg:NOR)
  • “SPI::CD2” (used by Codec Services)
  • “SPI::CS2”
  • “SPI::CS3”
  • “SPI::DEF”

There can only be 5 sessions open total, with 1 per service. When there’s already a session open for the target service(with session_count<5), SPI-module will wait for the original thread to terminate(triggered by the session closing), then start a new thread.

SPI Service Commands #

Command HeaderDescription
0x0001….SetDeviceState(u8 deviceid, u8 state)
0x0002….Stubbed, only returns zero.
0x00030100ReadWriteDevice(u8 deviceid, …)
0x00040500ReadWriteDevice2(u8 deviceid, …)
0x0005….WriteDevice(u8 deviceid, …)
0x00060102ReadWriteDeviceArray(u8 deviceid, …)
0x00070102ReadWriteDevice2Array(u8 deviceid, …)
0x000800C0EnableSpiBus(u8 deviceid, bool onoff, u8 state)
0x00090040EnableTwlSpiBus?(bool onoff)
0,1,2: 0x1EC60800
3,4,5: 0x1EC42800
    6: 0x1EC43800

Category:Services

SSL Services

SSL service “ssl:C” #

Command HeaderAvailable since system-versionAvailable from service-sessionsDescription
0x000100021.0.0-0Basically main-onlyInitialize
0x000200C21.0.0-0CreateContext
0x000300001.0.0-0CreateRootCertChain
0x000400401.0.0-0DestroyRootCertChain
0x000500821.0.0-0Main-onlyAddTrustedRootCA
0x000600801.0.0-0Main-onlyRootCertChainAddDefaultCert
0x000700801.0.0-0Main-onlyRootCertChainRemoveCert
0x000800001.0.0-0CreateCrlStore. This writes an output u32 to cmdreply[2](created context handle).
0x000900401.0.0-0DestroyCrlStore(u32 contexthandle)
0x000A00821.0.0-0Main-onlyAddCrlToCrlStore(u32 contexthandle, u32 size, ((Size<<4) | 10), inbufptr)
0x000B00801.0.0-0Main-onlyAddInternalCrlToCrlStore(u32 contexthandle, u8 inval2)
0x000C00801.0.0-0Main-onlyRemoveCrlFromCrlStore(u32 contexthandle, u32 certcontexthandle) This removes the specified cert from the context.
0x000D00841.0.0-0Main-onlyOpenClientCertContext
0x000E00401.0.0-0Main-onlyOpenDefaultClientCertContext
0x000F00401.0.0-0Main-onlyCloseClientCertContext
0x001000001.0.0-0AllSeedRNG
0x001100421.0.0-0AllGenerateRandomData
0x001200421.0.0-0InitializeConnectionSession
0x001300401.0.0-0Context-onlyStartConnection
0x001400401.0.0-0Context-onlyStartConnectionGetOut
0x001500821.0.0-0Context-onlyRead
0x001600821.0.0-0Context-onlyReadPeek
0x001700821.0.0-0Write
0x001800801.0.0-0ContextSetRootCertChain
0x001900801.0.0-0Context-onlyContextSetClientCert
0x001A00801.0.0-0Context-onlySetCrlStore(u32 contexthandle, u32 handle) This writes a context handle created by command 0x00080000 into the session context.
0x001B00801.0.0-0Context-onlyContextClearOpt
0x001C00C41.0.0-0Context-onlyContextGetProtocolCipher
0x001D00401.0.0-0Context-onlyGetCertVerificationErrors(u32 contexthandle) Writes an output u32 from the context state to cmdreply[2].
0x001E00401.0.0-0AllDestroyContext
0x001F00821.0.0-0Context-onlyContextInitSharedmem
0x002000821.0.0-0Context-onlyAddEVPolicyID( contexthandle, u32 size, ((Size<<4) | 10), inbufptr) The input buffer is handled as a string.

Going by strings in the SSL sysmodule it appears the sysmodule uses RSA BSAFE(like certain other 3DS software), this is also likely where the “ssl:C” name comes from(RSA BSAFE “SSL-C”).