Changes

Jump to navigation Jump to search
no edit summary
Line 14: Line 14:     
== OpenCodeFileSystem ==
 
== OpenCodeFileSystem ==
Takes an [[NCM_services#ProgramId|ProgramId]] and a [[#ContentPath]]. Returns an [[#IFileSystem]].
+
Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].
    
[10.0.0+] This now takes an additional type-0x1A output buffer.
 
[10.0.0+] This now takes an additional type-0x1A output buffer.
 +
 +
[16.0.0+] This now takes an additional input [[#ContentAttributes]].
 +
 +
[17.0.0+] This now takes a type-0x6 output buffer instead of a type-0x1A output buffer.
    
== IsArchivedProgram ==
 
== IsArchivedProgram ==
Takes an u64 ProcessId. Returns a bool (1 if the process id's [[#ContentPath]] ends in ".nca").
+
Takes an input u64 ProcessId. Returns a bool (1 if the process id's [[#FspPath]] ends in ".nca").
    
== SetCurrentProcess ==
 
== SetCurrentProcess ==
Takes a ProcessId descriptor.
+
Takes an input u64 ProcessId. No output.
    
= fsp-pr =
 
= fsp-pr =
Line 70: Line 74:  
| 7 || [2.0.0+] [[#OpenFileSystemWithPatch]]
 
| 7 || [2.0.0+] [[#OpenFileSystemWithPatch]]
 
|-
 
|-
| 8 || [16.0.0+] OpenFileSystemWithIdObsolete ([2.0.0-15.0.1] [[#OpenFileSystemWithId]])
+
| 8 || [16.0.0+] [[#OpenFileSystemWithIdObsolete]] ([2.0.0-15.0.1] OpenFileSystemWithId)
 
|-
 
|-
 
| 9 || [3.0.0+] OpenDataFileSystemByProgramId
 
| 9 || [3.0.0+] OpenDataFileSystemByProgramId
 
|-
 
|-
| 10 || [16.0.0+] OpenFileSystemWithId
+
| 10 || [16.0.0+] [[#OpenFileSystemWithId]]
 
|-
 
|-
 
| 11 || [[#OpenBisFileSystem]]
 
| 11 || [[#OpenBisFileSystem]]
Line 308: Line 312:  
| 1019 || [13.0.0+] UnsetDebugOption
 
| 1019 || [13.0.0+] UnsetDebugOption
 
|-
 
|-
| 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey
+
| 1020 || [18.0.0+] OpenMemoryStressor
 +
|-
 +
| 1100 || [4.0.0-17.0.1] OverrideSaveDataTransferTokenSignVerificationKey
 +
|-
 +
| 1101 || [18.0.0+] OverrideSaveDataTransferKeyForTest
 
|-
 
|-
 
| 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset
 
| 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset
Line 352: Line 360:  
|-
 
|-
 
| 0x8 || CanMountImageAndVideoStorage ||0x8000000000001000 || RW || [[#OpenImageDirectoryFileSystem]]
 
| 0x8 || CanMountImageAndVideoStorage ||0x8000000000001000 || RW || [[#OpenImageDirectoryFileSystem]]
|-
  −
| ([1.0.0-5.1.0] 0x9) || || 0x8000000000000084 || ||
  −
|-
  −
| ([6.0.0-9.2.0] 0x9) || CanMountCloudBackupWorkStorage || 0x8000000200000000 || RW || OpenCloudBackupWorkStorageFileSystem
   
|-
 
|-
 
| 0x9 || CanMountCustomStorage0 || 0x8000000000000000 || RW || OpenCustomStorageFileSystem
 
| 0x9 || CanMountCustomStorage0 || 0x8000000000000000 || RW || OpenCustomStorageFileSystem
 
|-
 
|-
| ([1.0.0-5.1.0] 0xA) || || 0x8000000000000080 || ||
+
| 0xA || CanMountBisCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisFileSystem]]
 
|-
 
|-
| ([6.0.0-6.2.0] 0xA) || || 0x8000000000000084 || ||
+
| 0xB || CanMountBisSafeMode || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
 
|-
 
|-
| ([7.0.0-7.0.1] 0xA) || || 0x4000000000000000 || ||
+
| 0xC || CanMountBisUser || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]
 
|-
 
|-
| ([8.0.0-9.2.0] 0xA) || || 0x8000000000000000 || ||
+
| 0xD || CanMountBisSystem || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]
 
|-
 
|-
| 0xA || CanMountBisCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisFileSystem]]
+
| 0xE || CanMountBisSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
 
|-
 
|-
| ([1.0.0-5.1.0] 0xB) || || 0x8000000000008080 || ||
+
| 0xF || CanMountBisSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
 
|-
 
|-
| ([6.0.0-6.2.0] 0xB) || || 0x8000000000000080 || ||
+
| 0x10 || CanMountSdCard || 0xC000000000200000 || RW || [[#OpenSdCardFileSystem]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0xB) || || 0x8000000000000084 || ||
+
| 0x11 || CanMountGameCard || 0x8000000000000010 || R- || [[#OpenGameCardFileSystem]]
 
|-
 
|-
| 0xB || CanMountBisSafeMode || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
+
| 0x12 || CanMountDeviceSaveData || 0x8000000000040020 || RW || [[#OpenSaveDataFileSystem]]
 
|-
 
|-
| ([1.0.0-6.2.0] 0xC) || || 0x8000000000008080 || ||
+
| 0x13 || CanMountSystemSaveData || 0x8000000000000028 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0xC) || || 0x8000000000000080 || ||
+
| 0x14 || CanMountOthersSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystem]]
 
|-
 
|-
| 0xC || CanMountBisUser || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]
+
| 0x15 || CanMountOthersSystemSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
 
|-
 
|-
| ([1.0.0-5.1.0] 0xD) || || 0x8000000000000080 || ||
+
| 0x16 || CanOpenBisPartitionBootPartition1Root || 0x8000000000010082 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([6.0.0-9.2.0] 0xD) || || 0x8000000000008080 || ||
+
| 0x17 || CanOpenBisPartitionBootPartition2Root || 0x8000000000010080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| 0xD || CanMountBisSystem || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]
+
| 0x18 || CanOpenBisPartitionUserDataRoot || 0x8000000000000080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0xE) || || 0xC000000000200000 || ||
+
| 0x19 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([3.0.0-6.2.0] 0xE) || || 0x8000000000000080 || ||
+
| 0x1A || CanOpenBisPartitionBootConfigAndPackage2Part2 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0xE) || || 0x8000000000008080 || ||
+
| 0x1B || CanOpenBisPartitionBootConfigAndPackage2Part3 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| 0xE || CanMountBisSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
+
| 0x1C || CanOpenBisPartitionBootConfigAndPackage2Part4 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0xF) || || 0x8000000000000010 || ||
+
| 0x1D || CanOpenBisPartitionBootConfigAndPackage2Part5 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([3.0.0-5.1.0] 0xF) || || 0xC000000000200000 || ||
+
| 0x1E || CanOpenBisPartitionBootConfigAndPackage2Part6 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([6.0.0-9.2.0] 0xF) || || 0x8000000000000080 || ||
+
| 0x1F || CanOpenBisPartitionCalibrationBinary || 0x8000000000000084 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| 0xF || CanMountBisSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
+
| 0x20 || CanOpenBisPartitionCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0x10) || || 0x8000000000040020 || ||
+
| 0x21 || CanOpenBisPartitionSafeMode || 0x8000000000000080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([3.0.0-5.1.0] 0x10) || || 0x8000000000000010 || ||
+
| 0x22 || CanOpenBisPartitionUser || 0x8000000000000080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([6.0.0-6.2.0] 0x10) || || 0xC000000000200000 || ||
+
| 0x23 || CanOpenBisPartitionSystem || 0x8000000000000080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0x10) || || 0x8000000000000080 || ||
+
| 0x24 || CanOpenBisPartitionSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| 0x10 || CanMountSdCard || 0xC000000000200000 || RW || [[#OpenSdCardFileSystem]]
+
| 0x25 || CanOpenBisPartitionSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0x11) || || 0x8000000000000028 || ||
+
| 0x26 || CanOpenBisPartitionDeviceTreeBlob || 0x8000002000000080 || RW || [[#OpenBisStorage]]
 
|-
 
|-
| ([3.0.0-5.1.0] 0x11) || || 0x8000000000040020 || ||
+
| [3.0.0+] 0x27 || CanOpenSdCardStorage || 0xC000000000200000 || RW ||  
 
|-
 
|-
| ([6.0.0-6.2.0] 0x11) || || 0x8000000000000010 || ||
+
| [3.0.0+] 0x28 || CanOpenGameCardStorage || 0x8000000000000100 || RW || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1)
 
|-
 
|-
| ([7.0.0-9.2.0] 0x11) || || 0xC000000000200000 || ||
+
| [4.0.0+] 0x29 || CanMountSystemDataPrivate || 0x8000000000100008 || R- || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]]
 
|-
 
|-
| 0x11 || CanMountGameCard || 0x8000000000000010 || R- || [[#OpenGameCardFileSystem]]
+
| [5.0.0+] 0x2A || CanMountHost || 0xC000000000400000 || RW || [[#OpenHostFileSystem]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0x12) || || 0x8000000000000020 || ||
+
| [6.0.0+] 0x2B || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]]
 
|-
 
|-
| ([3.0.0-5.1.0] 0x12) || || 0x8000000000000028 || ||
+
| [7.0.0+] 0x2C || CanOpenSaveDataInternalStorage || 0x8000000000000000 || RW || [[#OpenSaveDataInternalStorageFileSystem]]
 
|-
 
|-
| ([6.0.0-6.2.0] 0x12) || || 0x8000000000040020 || ||
+
| [7.0.0+] 0x2D || CanMountTemporaryDirectory || 0xC000000000000000 || RW ||  
 
|-
 
|-
| ([7.0.0-9.2.0] 0x12) || || 0x8000000000000010 || ||
+
| [11.0.0+] 0x2E || CanMountAllBaseFilesystem || 0x8000000000000000 || RW || OpenBaseFileSystem
 
|-
 
|-
| 0x12 || CanMountDeviceSaveData || 0x8000000000040020 || RW || [[#OpenSaveDataFileSystem]]
+
| [15.0.0+] 0x2F || CanNotMount || 0x0000000000000000 || -- || OpenCustomStorageFileSystem
 +
|}
 +
 
 +
=== Call ===
 +
{| class="wikitable" border="1"
 
|-
 
|-
| ([1.0.0-5.1.0] 0x13) || || 0x8000000000000020 || ||
+
! OperationType || Name || Mask || Used by
 
|-
 
|-
| ([6.0.0-6.2.0] 0x13) || || 0x8000000000000028 || ||
+
| 0x0 || CanInvalidateBisCache || 0x8000000000000080 || [[#InvalidateBisCache]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0x13) || || 0x8000000000040020 || ||
+
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc
 
|-
 
|-
| 0x13 || CanMountSystemSaveData || 0x8000000000000028 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
+
| 0x2 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate
 
|-
 
|-
| ([1.0.0-2.3.0] 0x14) || || 0x8000000000010082 || ||
+
| 0x3 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet
 
|-
 
|-
| ([3.0.0-6.2.0] 0x14) || || 0x8000000000000020 || ||
+
| 0x4 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver
 
|-
 
|-
| ([7.0.0-9.2.0] 0x14) || || 0x8000000000000028 || ||
+
| 0x5 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo
 
|-
 
|-
| 0x14 || CanMountOthersSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystem]]
+
| 0x6 || CanGetGameCardAsicCertificate || 0x8000000000000200 || GetGameCardAsicCertificate
 
|-
 
|-
| ([1.0.0-2.3.0] 0x15) || || 0x8000000000010080 || ||
+
| 0x7 || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]]
 
|-
 
|-
| ([3.0.0-5.1.0] 0x15) || || 0x8000000000010082 || ||
+
| 0x8 || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
 
|-
 
|-
| ([6.0.0-9.2.0] 0x15) || || 0x8000000000000020 || ||
+
| 0x9 || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId
 
|-
 
|-
| 0x15 || CanMountOthersSystemSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
+
| 0xA || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId
 
|-
 
|-
| ([1.0.0-5.1.0] 0x16) || || 0x8000000000010080 || ||
+
| 0xB || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
 
|-
 
|-
| ([6.0.0-6.2.0] 0x16) || || 0x8000000000010082 || ||
+
| 0xC || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0x16) || || 0x8000000000000020 || ||
+
| 0xD || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
 
|-
 
|-
| 0x16 || CanOpenBisPartitionBootPartition1Root || 0x8000000000010082 || RW || [[#OpenBisStorage]]
+
| 0xE || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0x17) || || 0x8000000000010080 || ||
+
| 0xF || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile
 
|-
 
|-
| ([3.0.0-5.1.0] 0x17) || || 0x8000000000000080 || ||
+
| 0x10 || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference
 
|-
 
|-
| ([6.0.0-6.2.0] 0x17) || || 0x8000000000010080 || ||
+
| 0x11 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0x17) || || 0x8000000000010082 || ||
+
| 0x12 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]]
 
|-
 
|-
| 0x17 || CanOpenBisPartitionBootPartition2Root || 0x8000000000010080 || RW || [[#OpenBisStorage]]
+
| 0x13 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode
 
|-
 
|-
| ([1.0.0-5.1.0] 0x18) || || 0x8000000000010080 || ||
+
| 0x14 || CanDebug || 0xC000000000000000 ||  
 
|-
 
|-
| ([6.0.0-6.2.0] 0x18) || || 0x8000000000000080 || ||
+
| 0x15 || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles
 
|-
 
|-
| ([7.0.0-9.2.0] 0x18) || || 0x8000000000010080 || ||
+
| [2.0.0+] 0x16 || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
 
|-
 
|-
| 0x18 || CanOpenBisPartitionUserDataRoot || 0x8000000000000080 || RW || [[#OpenBisStorage]]
+
| [2.0.0+] 0x17 || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
 
|-
 
|-
| ([6.0.0-6.2.0] 0x19) || || 0x8000000000010080 || ||
+
| [2.0.0+] 0x18 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId
 
|-
 
|-
| ([7.0.0-9.2.0] 0x19) || || 0x8000000000000080 || ||
+
| [2.0.0+] 0x19 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]]
 
|-
 
|-
| 0x19 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
+
| [2.0.0+] 0x1A || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem
 
|-
 
|-
| ([1.0.0-9.2.0] 0x1A) || || 0x8000000000010080 || ||
+
| [3.0.0+] 0x1B || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath
 
|-
 
|-
| 0x1A || CanOpenBisPartitionBootConfigAndPackage2Part2 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
+
| [3.0.0+] 0x1C || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey
 
|-
 
|-
| ([1.0.0-9.2.0] 0x1B) || || 0x8000000000010080 || ||
+
| [4.0.0+] 0x1D || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]]
 
|-
 
|-
| 0x1B || CanOpenBisPartitionBootConfigAndPackage2Part3 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
+
| [4.0.0+] 0x1E || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
 
|-
 
|-
| ([1.0.0-9.2.0] 0x1C) || || 0x8000000000010080 || ||  
+
| [4.0.0+] 0x1F || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
 
|-
 
|-
| 0x1C || CanOpenBisPartitionBootConfigAndPackage2Part4 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
+
| [4.0.0+] 0x20 || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
  −
| ([1.0.0-2.3.0] 0x1D) || || 0x8000000000000084 || ||
   
|-
 
|-
| ([3.0.0-9.2.0] 0x1D) || || 0x8000000000010080 || ||
+
| [5.0.0+] 0x21 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
 
|-
 
|-
| 0x1D || CanOpenBisPartitionBootConfigAndPackage2Part5 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
+
| [5.0.0+] 0x22 || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem
 
|-
 
|-
| ([1.0.0-5.1.0] 0x1E) || || 0x8000000000000084 || ||
+
| [5.0.0+] 0x23 || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem
 
|-
 
|-
| ([6.0.0-9.2.0] 0x1E) || || 0x8000000000010080 || ||
+
| [5.0.0+] 0x24 || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem
 
|-
 
|-
| 0x1E || CanOpenBisPartitionBootConfigAndPackage2Part6 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
+
| [5.0.0+] 0x25 || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition
 
|-
 
|-
| ([1.0.0-5.1.0] 0x1F) || || 0x8000000000000080 || ||
+
| [5.0.0+] 0x26 || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]]
|-
  −
| ([6.0.0-6.2.0] 0x1F) || || 0x8000000000000084 || ||
  −
|-
  −
| ([7.0.0-9.2.0] 0x1F) || || 0x8000000000010080 || ||
  −
|-
  −
| 0x1F || CanOpenBisPartitionCalibrationBinary || 0x8000000000000084 || RW || [[#OpenBisStorage]]
  −
|-
  −
| ([1.0.0-5.1.0] 0x20) || || 0x8000000000000080 || ||
  −
|-
  −
| ([6.0.0-9.2.0] 0x20) || || 0x8000000000000084 || ||
  −
|-
  −
| 0x20 || CanOpenBisPartitionCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisStorage]]
   
|-
 
|-
| ([6.0.0-6.2.0] 0x21) || || 0x8000000000000080 || ||
+
| [5.0.0+] 0x27 || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0x21) || || 0x8000000000000084 || ||
+
| [5.0.0+] 0x28 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair
 
|-
 
|-
| 0x21 || CanOpenBisPartitionSafeMode || 0x8000000000000080 || RW || [[#OpenBisStorage]]
+
| [5.0.0+] 0x29 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair
 
|-
 
|-
| ([1.0.0-9.2.0] 0x22) || || 0x8000000000000080 || ||
+
| [5.0.0+] 0x2A || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]]
 
|-
 
|-
| 0x22 || CanOpenBisPartitionUser || 0x8000000000000080 || RW || [[#OpenBisStorage]]
+
| [5.0.0+] 0x2B || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0x23) || || 0xC000000000200000 || ||
+
| [5.0.0+] 0x2C || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]]
 
|-
 
|-
| ([3.0.0-9.2.0] 0x23) || || 0x8000000000000080 || ||
+
| [5.0.0+] 0x2D || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]]
 
|-
 
|-
| 0x23 || CanOpenBisPartitionSystem || 0x8000000000000080 || RW || [[#OpenBisStorage]]
+
| [5.0.0+] 0x2E || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol
 
|-
 
|-
| ([1.0.0-2.3.0] 0x24) || || 0x8000000000000100 || ||
+
| [5.0.0+] 0x2F || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey
 
|-
 
|-
| ([3.0.0-9.2.0] 0x24) || || 0x8000000000000080 || ||
+
| [5.1.0+] 0x30 || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]]
 
|-
 
|-
| 0x24 || CanOpenBisPartitionSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisStorage]]
+
| [6.0.0+] 0x31 || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]]
 
|-
 
|-
| ([1.0.0-2.3.0] 0x25) || || 0x8000000000100008 || ||
+
| [6.0.0+] 0x32 || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier
 
|-
 
|-
| ([3.0.0-5.1.0] 0x25) || || 0xC000000000200000 || ||
+
| [6.0.0+] 0x33 || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent
 
|-
 
|-
| ([6.0.0-9.2.0] 0x25) || || 0x8000000000000080 || ||
+
| [6.0.0+] 0x34 || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]]
 
|-
 
|-
| 0x25 || CanOpenBisPartitionSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisStorage]]
+
| [6.0.0+] 0x35 || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent
 
|-
 
|-
| ([1.0.0-2.3.0] 0x26) || || 0xC000000000400000 || ||
+
| [6.0.0+] 0x36 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected
 
|-
 
|-
| ([3.0.0-5.1.0] 0x26) || || 0x8000000000000100 || ||
+
| [6.0.0+] 0x37 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure
 
|-
 
|-
| ([6.0.0-6.2.0] 0x26) || || 0xC000000000200000 || ||
+
| [6.0.0+] 0x38 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure
 
|-
 
|-
| ([7.0.0-9.2.0] 0x26) || || 0x8000000000000080 || ||
+
| [8.0.0+] 0x39 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize
 
|-
 
|-
| ([10.0.0-14.1.2] 0x26) || || 0xC000000000200000 || ||
+
| [9.0.0+] 0x3A || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]]
 
|-
 
|-
| 0x26 || CanOpenBisPartitionDeviceTreeBlob || 0x8000002000000080 || RW || [[#OpenBisStorage]]
+
| [9.0.0+] 0x3B || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility
 
|-
 
|-
| ([3.0.0-5.1.0] 0x27) || || 0x8000000000100008 || ||
+
| [9.0.0+] 0x3C || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent
 
|-
 
|-
| ([6.0.0-6.2.0] 0x27) || || 0x8000000000000100 || ||
+
| [9.0.0+] 0x3D || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0x27) || || 0xC000000000200000 || ||  
+
| [9.0.0+] 0x3E || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo
 
|-
 
|-
| ([10.0.0-14.1.2] 0x27) || || 0x8000000000000100 || ||  
+
| [9.0.0+] 0x3F || CanChallengeCardExistence || 0x8000000000000010 || ChallengeCardExistence
 
|-
 
|-
| [3.0.0+] 0x27 || CanOpenSdCardStorage || 0xC000000000200000 || RW ||  
+
| [9.0.0+] 0x40 || CanCreateOwnSaveData || 0x8000000800000000 || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt
 
|-
 
|-
| ([3.0.0-5.1.0] 0x28) || || 0xC000000000400000 || ||
+
| [9.0.0+] 0x41 || CanDeleteOwnSaveData || 0x8000000800000000 || [[#DeleteSaveDataFileSystem]]
 
|-
 
|-
| ([6.0.0-6.2.0] 0x28) || || 0x8000000000100008 || ||
+
| [10.0.0+] 0x42 || CanReadOwnSaveDataFileSystemExtraData || 0x8000000800000000 || [[#ReadSaveDataFileSystemExtraData]]
 
|-
 
|-
| ([7.0.0-9.2.0] 0x28) || || 0x8000000000000100 || ||
+
| [10.0.0+] 0x43 || CanExtendOwnSaveData || 0x8000000800000000 || ExtendSaveDataFileSystem
 
|-
 
|-
| ([10.0.0-14.1.2] 0x28) || || 0x8000000000100008 || ||  
+
| [10.2.0+] 0x44 || CanOpenOwnSaveDataTransferProhibiter || 0x8000000800000000 || [[#OpenSaveDataTransferProhibiter]]
 
|-
 
|-
| [3.0.0+] 0x28 || CanOpenGameCardStorage || 0x8000000000000100 || RW || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1)
+
| [11.0.0+] 0x45 || CanFindOwnSaveDataWithFilter || 0x8000000800000000 || [[#FindSaveDataWithFilter]]
 
|-
 
|-
| ([4.0.0-5.1.0] 0x29) || || 0x8000000000010000 || ||
+
| [13.0.0+] 0x46 || CanOpenSaveDataTransferManagerForRepair || 0x8000000000000020 || [[#OpenSaveDataTransferManagerForRepair]]
 
|-
 
|-
| ([6.0.0-6.2.0] 0x29) || || 0xC000000000400000 || ||
+
| [13.0.0+] 0x47 || CanSetDebugConfiguration || 0x8000000000000000 || SetDebugOption, UnsetDebugOption
 
|-
 
|-
| ([7.0.0-9.2.0] 0x29) || || 0x8000000000100008 || ||
+
| [15.0.0+] 0x48 || CanOpenDataStorageByPath || 0x8000000000000000 || OpenDataStorageByPath
 
|-
 
|-
| ([10.0.0-14.1.2] 0x29) || || 0xC000000000400000 || ||
+
| [17.0.0+] 0x49 || CanNotifyErrorContextServiceReady || 0x8000004000000000 || NotifyErrorContextServiceReady
 
|-
 
|-
| [4.0.0+] 0x29 || CanMountSystemDataPrivate || 0x8000000000100008 || R- || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]]
+
| [17.0.0+] 0x4A || CanGetProgramId || 0x8000000008000000 || GetProgramId
|-
+
|}
| ([5.0.0-5.1.0] 0x2A) || || 0x8000000000000000 || ||
+
 
|-
+
== OpenFileSystem ==
| ([6.0.0-6.2.0] 0x2A) || || 0x8000000000010000 || ||
+
Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[#FileSystemProxyType]]. Returns an [[#IFileSystem]].
|-
+
 
| ([7.0.0-9.2.0] 0x2A) || || 0xC000000000400000 || ||
+
[2.0.0+] This function was removed.
|-
+
 
| ([10.0.0-14.1.2] 0x2A) || || 0x8000000000010000 || ||
+
== SetCurrentProcess ==
|-
+
Takes an input u64 ProcessId. No output.
| [5.0.0+] 0x2A || CanMountHost || 0xC000000000400000 || RW || [[#OpenHostFileSystem]]
+
 
|-
+
== OpenFileSystemWithPatch ==
| ([6.0.0-6.2.0] 0x2B) || || 0x8000000000000000 || ||
+
Takes an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].
|-
+
 
| ([7.0.0-9.2.0] 0x2B) || || 0x8000000000010000 || ||
+
Web-applet loads the [[#FileSystemProxyType]] (which must be '''Manual''') from u32_table[inparam].
|-
+
 
| ([10.0.0-14.1.2] 0x2B) || || 0x8000000000000000 || ||
+
Note: web-applet strings refer to both this cmd and [[#OpenFileSystemWithId]] as "MountContent", but official nn_sf_sync symbols use "OpenXX" names.
|-
  −
| [6.0.0+] 0x2B || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]]
  −
|-
  −
| ([7.0.0-9.2.0] 0x2C) || || 0x8000000000000000 || ||
  −
|-
  −
| ([10.0.0-10.2.0] 0x2C) || || 0x0000000000000000 || ||
  −
|-
  −
| ([11.0.0-14.1.2] 0x2C) || || 0xC000000000000000 || ||
  −
|-
  −
| [7.0.0+] 0x2C || CanOpenSaveDataInternalStorage || 0x8000000000000000 || RW || [[#OpenSaveDataInternalStorageFileSystem]]
  −
|-
  −
| ([7.0.0-9.2.0] 0x2D) || || 0x0000000000000000 || ||
  −
|-
  −
| ([10.0.0-10.2.0] 0x2D) || || 0x8000000000000000 || ||
  −
|-
  −
| [7.0.0+] 0x2D || CanMountTemporaryDirectory || 0xC000000000000000 || RW ||
  −
|-
  −
| ([11.0.0-14.1.2] 0x2E) || || 0x0000000000000000 || ||
  −
|-
  −
| [11.0.0+] 0x2E || CanMountAllBaseFilesystem || 0x8000000000000000 || RW || OpenBaseFileSystem
  −
|-
  −
| [15.0.0+] 0x2F || CanNotMount || 0x0000000000000000 || -- || OpenCustomStorageFileSystem
  −
|}
     −
=== Call ===
+
== OpenFileSystemWithIdObsolete ==
{| class="wikitable" border="1"
+
Takes a type-0x19 input buffer containing a [[#FspPath]], an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].
|-
+
 
! OperationType || Name || Mask || Used by
+
The [[#IFileSystem]] must be '''Meta''' if the NCA type is 0.
|-
+
 
| 0x0 || CanInvalidateBisCache || 0x8000000000000080 || [[#InvalidateBisCache]]
+
The input buffer is the output string path from [[NS_Services#GetApplicationContentPath|GetApplicationContentPath]].
|-
+
 
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc
+
May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn't inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles.
|-
+
 
| 0x2 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate
+
The official "MountApplicationPackage" func uses this with in64=0 and [[#FileSystemProxyType]] '''Package'''.
|-
+
 
| 0x3 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet
+
After the [[#FileSystemProxyType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0.
|-
+
 
| 0x4 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver
+
When [[#FileSystemProxyType]] is '''Meta''', it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA [[NCM_services#ProgramId|ProgramId]], then an error is thrown on mismatch.
|-
+
 
| 0x5 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo
+
== OpenFileSystemWithId ==
|-
+
Takes a type-0x19 input buffer containing a [[#FspPath]], an input [[#ContentAttributes]], an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].
| 0x6 || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]]
+
 
|-
+
== OpenBisFileSystem ==
| 0x7 || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
+
Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[#BisPartitionId]]. Returns an [[#IFileSystem]].
|-
+
 
| 0x8 || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId
+
Official user-process code sets instr[0] = 0 normally.
|-
+
 
| 0x9 || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId
+
Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as [[#OpenBisStorage]] except this mounts the partition filesystem instead of allowing direct access to the partition sectors.
|-
+
 
| 0xA || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
+
== OpenBisStorage ==
|-
+
Takes a u32 partition ID, returns 0x2EE202 for partitions which do not exist, 0x320002 for partitions which cannot be opened and a valid [[#IStorage]] handle otherwise.
| 0xB || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
+
 
|-
+
== InvalidateBisCache ==
| 0xC || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
+
Seems to invalidate the Bis cache for MBR/GPT after overwriting that data via the OpenBisStorage IStorage. Used by [[SystemInitializer]].
|-
+
 
| ([1.0.0-5.1.0] 0xD) || || 0x8000000000020000 ||
+
== DeleteSaveDataFileSystem ==
|-
+
Takes an input u64.
| 0xD || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]]
+
 
|-
+
== CreateSaveDataFileSystem ==
| ([1.0.0-5.1.0] 0xE) || || 0x8000000000000400 ||
+
Takes a 0x40-byte [[#SaveDataAttribute]], a 0x40-byte [[#SaveDataCreationInfo]], and a 0x10-byte input struct which governs creation of a saveMeta file.
|-
+
 
| 0xE || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile
+
Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060 meta file size, +4 u8 = 1 meta index which dictates meta file name.
|-
+
 
| ([1.0.0-5.1.0] 0xF) || || 0x8000000000004060 ||
+
Creates non-system savedata.
|-
+
 
| 0xF || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference
+
== CreateSaveDataFileSystemBySystemSaveDataId ==
|-
+
Takes a 0x40-byte [[#SaveDataAttribute]] and a 0x40-byte [[#SaveDataCreationInfo]].
| ([1.0.0-5.1.0] 0x10) || || 0x8000000000080000 ||
+
 
|-
+
Creates savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.
| 0x10 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]]
+
 
|-
+
== OpenGameCardStorage ==
| 0x11 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]]
+
Takes two input u32s (gamecard handle, partition ID), and returns an [[#IStorage]] for the [[Gamecard_Format|partition]].
|-
+
 
| ([1.0.0-5.1.0] 0x12) || CanDebug || 0xC000000000000000 ||
+
== OpenGameCardFileSystem ==
|-
+
Takes two input u32s, with the second u32 located at +4 in rawdata after the first u32. Returns an [[#IFileSystem]].
| 0x12 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode
+
 
|-
+
Mounts a [[Gamecard_Partition|gamecard partition]].
| ([1.0.0-5.1.0] 0x13) || || 0xC000000000800000 ||
+
 
|-
+
== CreateSaveDataFileSystemWithHashSalt ==
| 0x13 || CanDebug || 0xC000000000000000 ||
+
Takes a total of 0xB0-bytes of input, no output.
|-
+
 
| ([1.0.0-5.1.0] 0x14) || || 0xC000000001000000 ||
+
== OpenSaveDataFileSystem ==
|-
+
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Official user-process code is only known to use value 1 for the u8.
| 0x14 || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles
+
 
|-
+
Returns an [[#IFileSystem]].
| ([1.0.0-4.1.0] 0x15) || || 0xC000000002000000 ||
+
 
|-
+
Permissions aren't checked until the specified save is successfully found.
| ([5.0.0-5.1.0] 0x15) || || 0x8000000001000060 ||
+
 
|-
+
Only one process (specifically only one [[#IFileSystem]] session) can mount a given savedata at any given time (this includes SystemSaveData).
| 0x15 || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
+
 
|-
+
== OpenSaveDataFileSystemBySystemSaveDataId ==
| ([2.0.0-4.1.0] 0x16) || || 0x8000000004000000 ||
+
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Web-applet only uses value0 for the input u8.
|-
+
 
| ([5.0.0-5.1.0] 0x16) || || 0x8000000000000060 ||
+
Returns an [[#IFileSystem]].
|-
+
 
| [2.0.0+] 0x16 || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
+
Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.
|-
+
 
| ([2.0.0-4.1.0] 0x17) || || 0x8000000008000000 ||
+
== OpenReadOnlySaveDataFileSystem ==
|-
+
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]], and returns an [[#IFileSystem]].
| ([5.0.0-5.1.0] 0x17) || || 0xC000000002000000 ||
+
 
|-
+
Mounts SaveData as ReadOnly.
| [2.0.0+] 0x17 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId
+
 
|-
+
== ReadSaveDataFileSystemExtraDataBySaveDataSpaceId ==
| ([2.0.0-4.1.0] 0x18) || || 0x8000000010000000 ||
+
Takes an input u8 [[#SaveDataSpaceId]], an input u64 saveID, and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]].
|-
+
 
| ([5.0.0-5.1.0] 0x18) || || 0x8000000004000000 ||
+
== ReadSaveDataFileSystemExtraData ==
|-
+
Takes an input u64 saveID and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]].
| [2.0.0+] 0x18 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]]
+
 
|-
+
== OpenSaveDataInfoReader ==
| ([2.0.0-4.1.0] 0x19) || || 0x8000000000000800 ||
+
No input, returns an output [[#ISaveDataInfoReader]].
|-
+
 
| ([5.0.0-5.1.0] 0x19) || || 0x8000000008000000 ||
+
== OpenSaveDataInfoReaderBySaveDataSpaceId ==
|-
+
Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]].
| [2.0.0+] 0x19 || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem
+
 
|-
+
== FindSaveDataWithFilter ==
| ([2.0.0-4.1.0] 0x1A) || || 0x8000000000004020 ||
+
Takes a total of 0x50-bytes of input, returns 8-bytes of output and a type-0x6 output buffer.
|-
+
 
| ([5.0.0-5.1.0] 0x1A) || || 0x8000000010000000 ||
+
== OpenSaveDataInfoReaderWithFilter ==
|-
+
Takes a total of 0x50-bytes of input, returns an [[#ISaveDataInfoReader]].
| [2.0.0+] 0x1A || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath
+
 
|-
+
== OpenSaveDataTransferManager ==
| ([3.0.0-4.1.0] 0x1B) || || 0x8000000000002020 ||
+
No input, returns an [[#ISaveDataTransferManager]].
|-
+
 
| ([5.0.0-5.1.0] 0x1B) || || 0x8000000000000800 ||
+
== OpenSaveDataTransferManagerVersion2 ==
|-
+
No input, returns an [[#ISaveDataTransferManagerWithDivision]].
| [3.0.0+] 0x1B || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey
+
 
|-
+
== OpenSaveDataTransferProhibiter ==
| ([3.0.0-4.1.0] 0x1C) || || 0x8000000000000028 ||
+
Takes an input u64, returns an [[#ISaveDataTransferProhibiter]].
|-
+
 
| ([5.0.0-5.1.0] 0x1C) || || 0x8000000000004020 ||
+
== ListAccessibleSaveDataOwnerId ==
|-
+
Takes a total of 0x10-bytes of input, returns 4-bytes of output and a type-0x6 output buffer.
| [3.0.0+] 0x1C || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]]
+
 
|-
+
== OpenSaveDataTransferManagerForSaveDataRepair ==
| ([4.0.0-4.1.0] 0x1D) || || 0x8000000020000000 ||
+
No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]].
|-
+
 
| ([5.0.0-5.1.0] 0x1D) || || 0x8000000000000000 ||
+
== OpenSaveDataMover ==
|-
+
Takes 2 input [[#SaveDataSpaceId]], an input u64 size and a TransferMemory handle. Returns an output [[#ISaveDataMover]].
| [4.0.0+] 0x1D || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
+
 
|-
+
== OpenSaveDataTransferManagerForRepair ==
| ([4.0.0-4.1.0] 0x1E) || || 0x8000000040000000 ||
+
No input, returns an output [[#ISaveDataTransferManagerForRepair]].
|-
+
 
| ([5.0.0-5.1.0] 0x1E) || || 0x8000000000002020 ||
+
== OpenContentStorageFileSystem ==
|-
+
Takes a [[#ContentStorageId]]. Invalid values return 0x2EE202.
| [4.0.0+] 0x1E || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
+
 
|-
+
Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]].
| ([4.0.0-4.1.0] 0x1F) || || 0x8000000000000000 ||
+
 
|-
+
== OpenCloudBackupWorkStorageFileSystem ==
| ([5.0.0-5.1.0] 0x1F) || || 0x8000000000000028 ||
+
Takes 4-bytes of input, returns an [[#IFileSystem]].
|-
+
 
| [4.0.0+] 0x1F || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
+
== OpenCustomStorageFileSystem ==
|-
+
Takes a [[#CustomStorageId]]. Invalid values return 0x2EE202.
| ([4.0.0-4.1.0] 0x20) || || 0x8000000000000000 ||
+
 
|-
+
Returns an [[#IFileSystem]] from either User:/CustomStorage0 or Sdcard:/Nintendo/CustomStorage0. If on the SD card, an AesXtsFileSystem is created using a key source specifically for custom storage.
| ([5.0.0-5.1.0] 0x20) || || 0x8000000020000000 ||
+
 
|-
+
== OpenDataStorageByDataId ==
| [4.0.0+] 0x20 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
+
Takes a [[NCM_services#StorageId|StorageID]] and a [[NCM_services#DataId|DataId]].
|-
+
 
| ([5.0.0-5.1.0] 0x21) || || 0x8000000040000000 ||
+
Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives.
|-
+
 
| [5.0.0+] 0x21 || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem
+
== OpenDataFileSystemWithProgramIndex ==
|-
+
Takes an input u8, returns an [[#IFileSystem]].
| ([5.0.0-5.1.0] 0x22) || || 0x0000000080000002 ||
+
 
|-
+
== OpenDataStorageWithProgramIndex ==
| [5.0.0+] 0x22 || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem
+
Takes an input u8, returns an [[#IStorage]].
|-
+
 
| ([5.0.0-5.1.0] 0x23) || || 0x8000000000000000 ||
+
== OpenDeviceOperator ==
|-
+
This command returns a session to a port implementing the [[#IDeviceOperator]] interface.
| ([6.0.0-9.2.0] 0x23) || || 0x8000000020000000 ||
+
 
|-
+
== OpenSdCardDetectionEventNotifier ==
| [5.0.0+] 0x23 || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem
+
This command returns a session to a port implementing the [[#IEventNotifier]] interface.
|-
+
 
| ([5.0.0-5.1.0] 0x24) || || 0x8000000000000000 ||
+
== OpenGameCardDetectionEventNotifier ==
|-
+
This command returns a session to a port implementing the [[#IEventNotifier]] interface.
| ([6.0.0-9.2.0] 0x24) || || 0x8000000040000000 ||
+
 
|-
+
== SimulateDeviceDetectionEvent ==
| [5.0.0+] 0x24 || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition
+
Takes a total of 0xC-bytes of input, no output.
|-
+
 
| ([5.0.0-5.1.0] 0x25) || || 0x8000000080200000 ||
+
== VerifySaveDataFileSystem ==
|-
+
Takes an unknown input u64 and a type-0x6 output buffer.
| ([6.0.0-9.2.0] 0x25) || || 0x8000000200000000 ||
+
 
|-
+
The input u64 high-byte must be non-zero, otherwise an [[Error_codes|error]] is returned(0xE02).
| [5.0.0+] 0x25 || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]]
+
 
|-
+
== GetSaveDataCommitId ==
| ([5.0.0-5.1.0] 0x26) || || 0x8000000080000110 ||
+
Takes an input u8 and u64, returns an output u64.
|-
  −
| ([6.0.0-8.1.0] 0x26) || || 0x8000000200002000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x26) || || 0x8000000200000000 ||
  −
|-
  −
| [5.0.0+] 0x26 || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]]
  −
|-
  −
| ([5.0.0-5.1.0] 0x27) || || 0x8000000000100008 ||
  −
|-
  −
| ([6.0.0-7.0.1] 0x27) || || 0x8000000200002000 ||
  −
|-
  −
| ([8.0.0-8.1.0] 0x27) || || 0x8000000240002000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x27) || || 0x8000000000000000 ||
  −
|-
  −
| [5.0.0+] 0x27 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair
  −
|-
  −
| ([5.0.0-5.1.0] 0x28) || || 0x8000000080010000 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x28) || || 0x8000000000000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x28) || || 0x8000000200002000 ||
  −
|-
  −
| [5.0.0+] 0x28 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair
  −
|-
  −
| ([5.0.0-5.1.0] 0x29) || || 0x0000000080000001 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x29) || || 0x8000000000000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x29) || || 0x8000000240002000 ||
  −
|-
  −
| [5.0.0+] 0x29 || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]]
  −
|-
  −
| ([5.0.0-5.1.0] 0x2A) || || 0x0000000080000001 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x2A) || || 0x8000000080200000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x2A) || || 0x8000000000000000 ||
  −
|-
  −
| [5.0.0+] 0x2A || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]]
  −
|-
  −
| ([5.0.0-5.1.0] 0x2B) || || 0x0000000080000001 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x2B) || || 0x8000000080000110 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x2B) || || 0x8000000000000000 ||
  −
|-
  −
| [5.0.0+] 0x2B || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]]
  −
|-
  −
| ([5.0.0-5.1.0] 0x2C) || || 0x0000000080000001 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x2C) || || 0x8000000000100008 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x2C) || || 0x8000000080200000 ||
  −
|-
  −
| [5.0.0+] 0x2C || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]]
  −
|-
  −
| ([5.0.0-5.1.0] 0x2D) || || 0x0000000080000001 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x2D) || || 0x8000000000010000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x2D) || || 0x8000000080000110 ||
  −
|-
  −
| [5.0.0+] 0x2D || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol
  −
|-
  −
| ([5.0.0-5.1.0] 0x2E) || || 0x8000000040000000 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x2E) || || 0x8000000100000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x2E) || || 0x8000000000100008 ||
  −
|-
  −
| [5.0.0+] 0x2E || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey
  −
|-
  −
| ([5.0.0-5.1.0] 0x2F) || || 0x8000000080200000 ||
  −
|-
  −
| ([6.0.0-8.1.0] 0x2F) || || 0x8000000100000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x2F) || || 0x8000000000010000 ||
  −
|-
  −
| [5.0.0+] 0x2F || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]]
  −
|-
  −
| ([5.1.0-6.0.0] 0x30) || || 0x8000000080080000 ||
  −
|-
  −
| ([6.0.1-9.2.0] 0x30) || || 0x8000000100000000 ||
  −
|-
  −
| [5.1.0+] 0x30 || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]]
  −
|-
  −
| ([6.0.0-9.2.0] 0x31) || || 0x8000000100000000 ||
  −
|-
  −
| [6.0.0+] 0x31 || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier
  −
|-
  −
| ([6.0.0-9.2.0] 0x32) || || 0x8000000100000000 ||
  −
|-
  −
| [6.0.0+] 0x32 || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent
  −
|-
  −
| ([6.0.0-8.1.0] 0x33) || || 0x8000000040000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x33) || || 0x8000000100000000 ||
  −
|-
  −
| [6.0.0+] 0x33 || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]]
  −
|-
  −
| ([6.0.0-8.1.0] 0x34) || || 0x8000000200000020 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x34) || || 0x8000000100000000 ||
  −
|-
  −
| [6.0.0+] 0x34 || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent
  −
|-
  −
| ([6.0.0-8.1.0] 0x35) || || 0x8000000000200000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x35) || || 0x8000000040000000 ||
  −
|-
  −
| [6.0.0+] 0x35 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected
  −
|-
  −
| ([6.0.0-8.1.0] 0x36) || || 0x4000000000000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x36) || || 0x8000000200000020 ||
  −
|-
  −
| [6.0.0+] 0x36 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure
  −
|-
  −
| ([6.0.0-6.2.0] 0x37) || || 0x8000000000080000 ||
  −
|-
  −
| ([7.0.0-8.1.0] 0x37) || || 0x8000000000000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x37) || || 0x8000000000200000 ||
  −
|-
  −
| [6.0.0+] 0x37 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure
  −
|-
  −
| ([6.0.0-6.2.0] 0x38) || || 0x8000000000000000 ||
  −
|-
  −
| ([7.0.0-8.1.0] 0x38) || || 0x8000000400000000 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x38) || || 0x4000000000000000 ||
  −
|-
  −
| [6.0.0+] 0x38 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize
  −
|-
  −
| ([8.0.0-8.1.0] 0x39) || || 0x8000000000000010 ||
  −
|-
  −
| ([9.0.0-9.2.0] 0x39) || || 0x8000000000000000 ||
  −
|-
  −
| [8.0.0+] 0x39 || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]]
  −
|-
  −
| ([9.0.0-9.2.0] 0x3A) || || 0x8000000400000000 ||
  −
|-
  −
| [9.0.0+] 0x3A || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility
  −
|-
  −
| ([9.0.0-9.2.0] 0x3B) || || 0x8000000000000010 ||
  −
|-
  −
| [9.0.0+] 0x3B || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent
  −
|-
  −
| ([9.0.0-9.2.0] 0x3C) || || 0x8000000800000000 ||
  −
|-
  −
| [9.0.0+] 0x3C || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]]
  −
|-
  −
| ([9.0.0-9.2.0] 0x3D) || || 0x8000000800000000 ||
  −
|-
  −
| [9.0.0+] 0x3D || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo
  −
|-
  −
| ([9.0.0-9.2.0] 0x3E) || || 0x8000000800000000 ||
  −
|-
  −
| [9.0.0+] 0x3E || CanChallengeCardExistence || 0x8000000000000010 || ChallengeCardExistence
  −
|-
  −
| ([9.0.0-9.2.0] 0x3F) || || 0x8000000800000000 ||
  −
|-
  −
| [9.0.0+] 0x3F || CanCreateOwnSaveData || 0x8000000800000000 || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt
  −
|-
  −
| ([9.0.0-9.2.0] 0x40) || || 0x8000000800000000 ||
  −
|-
  −
| ([10.0.0-10.1.1] 0x40) || || 0x8000000800000000 ||
  −
|-
  −
| [9.0.0+] 0x40 || CanDeleteOwnSaveData || 0x8000000800000000 || [[#DeleteSaveDataFileSystem]]
  −
|-
  −
| ([9.0.0-10.1.1] 0x41) || || 0x8000000800000000 ||
  −
|-
  −
| [9.0.0+] 0x41 || CanReadOwnSaveDataFileSystemExtraData || 0x8000000800000000 || [[#ReadSaveDataFileSystemExtraData]]
  −
|-
  −
| ([10.0.0-10.1.1] 0x42) || || 0x8000000800000000 ||
  −
|-
  −
| [10.0.0+] 0x42 || CanExtendOwnSaveData || 0x8000000800000000 || ExtendSaveDataFileSystem
  −
|-
  −
| ([10.0.0-10.1.1] 0x43) || || 0x8000000800000000 ||
  −
|-
  −
| [10.0.0+] 0x43 || CanOpenOwnSaveDataTransferProhibiter || 0x8000000800000000 || [[#OpenSaveDataTransferProhibiter]]
  −
|-
  −
| [10.2.0+] 0x44 || CanFindOwnSaveDataWithFilter || 0x8000000800000000 || [[#FindSaveDataWithFilter]]
  −
|-
  −
| [11.0.0+] 0x45 || CanOpenSaveDataTransferManagerForRepair || 0x8000000000000020 || [[#OpenSaveDataTransferManagerForRepair]]
  −
|-
  −
| [13.0.0+] 0x46 || CanSetDebugConfiguration || 0x8000000000000000 || SetDebugOption, UnsetDebugOption
  −
|-
  −
| [13.0.0+] 0x47 || CanOpenDataStorageByPath || 0x8000000000000000 || OpenDataStorageByPath
  −
|-
  −
| [15.0.0+] 0x48 || CanNotifyErrorContextServiceReady || 0x8000004000000000 || NotifyErrorContextServiceReady
  −
|}
     −
== OpenFileSystem ==
+
== SetSdCardEncryptionSeed ==
Takes a type-0x19 input [[#ContentPath]] and a [[#FileSystemProxyType]] as parameters. Returns an [[#IFileSystem]].
+
Takes in the 0x10 byte SD card encryption seed, and loads it into FS-module state.
   −
[2.0.0+] This function was removed.
+
[[NS_Services|NS]]-module reads the 0x10 bytes from SdCard:/Nintendo/Contents/private, and compares them to the first 0x10 bytes of the ns_appman:/private (in [[Flash_Filesystem#System_Savegames|system savedata]] 0x8000000000000043). If they match, NS calls this command using bytes 0x10-0x20 from ns_appman:/private. The rest of this file (0x1F0 bytes total) is all-zero except for the byte at offset 0x20. This byte is set to 1 by NS if the SD card has been mounted successfully and is subsequently passed to SetSdCardAccessibility.
   −
== SetCurrentProcess ==
+
== OpenAccessFailureDetectionEventNotifier ==
Takes a pid-descriptor.
+
Takes 8-bytes of input and returns an [[#IEventNotifier]].
   −
== OpenFileSystemWithPatch ==
+
[8.0.0+] Now takes an additional 8-bytes of input.
Takes an input [[#FileSystemProxyType]] and an u64 title-id. Returns an [[#IFileSystem]].
     −
Web-applet loads the [[#FileSystemProxyType]] (which must be '''Manual''') from u32_table[inparam].
+
== SetSaveDataSize ==
 +
Takes two input u64s "size" and "journal_size", and writes them to fsp-srv object member variables.
   −
Note: web-applet strings refer to both this cmd and [[#OpenFileSystemWithId]] as "MountContent", but official nn_sf_sync symbols use "OpenXX" names.
+
These variables are normally initialized with 32 MiB (0x2000000) and 16 MiB (0x1000000), respectively.
   −
== OpenFileSystemWithId ==
+
These variables don't seem to be actually used anywhere else (?)
Takes a type-0x19 input buffer, an [[#FileSystemProxyType]] and an u64 title-id. Returns an [[#IFileSystem]].
     −
The [[#IFileSystem]] must be '''Meta''' if the NCA type is 0.
+
== SetSaveDataRootPath ==
 +
Takes an input path, and does snprintf(<fsp-srv object>->m_save_data_root_path, FS_MAX_PATH-1, "/%s", input_path);
   −
The input buffer is the output string path from [[NS_Services#GetApplicationContentPath|GetApplicationContentPath]].
+
This path is normally all-zero. When this path is non-zero, the internal OpenSaveDataFileSystem function will create a DirectorySaveDataFileSystem if the target save is a user-save + a directory exists, instead of the normal savedata filesystem object.
   −
May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn't inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles.
+
== SetGlobalAccessLogMode ==
 +
Takes an input u32.
   −
The official "MountApplicationPackage" func uses this with in64=0 and [[#FileSystemProxyType]] '''Package'''.
+
== SetGlobalAccessLogMode ==
 +
Takes an input u32.
   −
After the [[#FileSystemProxyType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0.
+
== GetGlobalAccessLogMode ==
 +
Returns an output u32.
   −
When [[#FileSystemProxyType]] is '''Meta''', it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA [[NCM_services#ProgramId|ProgramId]], then an error is thrown on mismatch.
+
GlobalAccessLogMode is normally 0.
   −
== OpenBisFileSystem ==
+
== OutputAccessLogToSdCard ==
Takes a type-0x19 input buffer string and a [[#BisPartitionId]]. Official user-process code sets instr[0] = 0 normally. Returns an [[#IFileSystem]].
+
Takes a type-0x5 input buffer.
   −
Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as [[#OpenBisStorage]] except this mounts the partition filesystem instead of allowing direct access to the partition sectors.
+
The input buffer is the string to output to the log. User-processes normally include a newline at the end.
   −
== OpenBisStorage ==
+
User-processes only use this when the value previously loaded from [[#GetGlobalAccessLogMode]] has bit1 set.
Takes a u32 partition ID, returns 0x2EE202 for partitions which do not exist, 0x320002 for partitions which cannot be opened and a valid [[#IStorage]] handle otherwise.
     −
== InvalidateBisCache ==
+
When bit1 in GlobalAccessLogMode is clear, FS-module will just return 0 for OutputAccessLogToSdCard. However even with that set the log doesn't show up SD, unknown why.
Seems to invalidate the Bis cache for MBR/GPT after overwriting that data via the OpenBisStorage IStorage. Used by [[SystemInitializer]].
     −
== DeleteSaveDataFileSystem ==
+
The input buffer is written to the "$FsAccessLog:/FsAccessLog.txt" file, where "$FsAccessLog" is the SD-card mount-name. It's written to the current end of the file(appended).
Takes an input u64.
     −
== CreateSaveDataFileSystem ==
+
== GetProgramIndexForAccessLog ==
Takes a 0x40-byte [[#SaveDataAttribute]], a 0x40-byte [[#SaveDataCreationInfo]], and a 0x10-byte input struct which governs creation of a saveMeta file.
+
No input, returns two 32-bit values "version" and "program_index".
   −
Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060 meta file size, +4 u8 = 1 meta index which dictates meta file name.
+
== OpenMultiCommitManager ==
 +
No input, returns an output [[#IMultiCommitManager]].
   −
Creates non-system savedata.
+
== OpenBisWiper ==
 +
Takes an input u64 size and a TransferMemory handle. Returns an output [[#IWiper]].
   −
== CreateSaveDataFileSystemBySystemSaveDataId ==
+
= IStorage =
Takes a 0x40-byte [[#SaveDataAttribute]] and a 0x40-byte [[#SaveDataCreationInfo]].
+
This is "nn::fssrv::sf::IStorage".
   −
Creates savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.
+
This is the interface for a raw device, usually a block device.
   −
== OpenGameCardStorage ==
+
{| class="wikitable" border="1"
Takes two input u32s (gamecard handle, partition ID), and returns an [[#IStorage]] for the [[Gamecard_Format|partition]].
+
|-
 
+
! Cmd || Name
== OpenGameCardFileSystem ==
+
|-
Takes two input u32s, with the second u32 located at +4 in rawdata after the first u32. Returns an [[#IFileSystem]].
+
| 0 || [[#Read]]
 +
|-
 +
| 1 || [[#Write]]
 +
|-
 +
| 2 || [[#Flush]]
 +
|-
 +
| 3 || [[#SetSize]]
 +
|-
 +
| 4 || [[#GetSize]]
 +
|-
 +
| 5 || [4.0.0+] OperateRange
 +
|}
   −
Mounts a [[Gamecard_Partition|gamecard partition]].
+
== Read ==
 +
Takes a type-0x46 buffer, an offset and length.
   −
== CreateSaveDataFileSystemWithHashSalt ==
+
== Write ==
Takes a total of 0xB0-bytes of input, no output.
+
Takes a type-0x45 buffer, an offset and length.
   −
== OpenSaveDataFileSystem ==
+
== Flush ==
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Official user-process code is only known to use value 1 for the u8.
+
No input.
   −
Returns an [[#IFileSystem]].
+
== SetSize ==
 +
Takes a size.
   −
Permissions aren't checked until the specified save is successfully found.
+
== GetSize ==
 +
Returns a size.
   −
Only one process (specifically only one [[#IFileSystem]] session) can mount a given savedata at any given time (this includes SystemSaveData).
+
= IFileSystem =
 +
This is "nn::fssrv::sf::IFileSystem".
   −
== OpenSaveDataFileSystemBySystemSaveDataId ==
+
There are two main implementations of this interface:
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Web-applet only uses value0 for the input u8.
     −
Returns an [[#IFileSystem]].
+
* '''nn::fs::fsa::IFileSystem''': The main IFileSystem implementation. Filesystem classes implement this interface, and FS code usually operates on this interface.
 +
* '''nn::fssrv::sf::IFileSystem''': Used for sending an IFileSystem over IPC. Not used outside of IPC code.
   −
Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.
+
There are two adapter classes to convert between these interfaces:
   −
== OpenReadOnlySaveDataFileSystem ==
+
* '''nn::fssrv::detail::FileSystemInterfaceAdapter''': Allows access to an nn::fs::fsa::IFileSystem via the nn::fssrv::sf::IFileSystem interface.
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]], and returns an [[#IFileSystem]].
+
* '''nn::fs::detail::FileSystemServiceObjectAdapter''': Allows access to an nn::fssrv::sf::IFileSystem via the nn::fs::fsa::IFileSystem interface.
   −
Mounts SaveData as ReadOnly.
+
When the FS process returns a filesystem, it will wrap the filesystem object in a FileSystemInterfaceAdapter to return it over IPC.
 +
Then when FS application code receives that filesystem, it will wrap the nn::fssrv::sf::IFileSystem object in a FileSystemServiceObjectAdapter before using it.
   −
== ReadSaveDataFileSystemExtraDataBySaveDataSpaceId ==
+
{| class="wikitable" border="1"
Takes an input u8 [[#SaveDataSpaceId]], an input u64 saveID, and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]].
+
|-
 
+
! Cmd || Name
== ReadSaveDataFileSystemExtraData ==
+
|-
Takes an input u64 saveID and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]].
+
| 0 || CreateFile
 
+
|-
== OpenSaveDataInfoReader ==
+
| 1 || DeleteFile
No input, returns an output [[#ISaveDataInfoReader]].
+
|-
 
+
| 2 || CreateDirectory
== OpenSaveDataInfoReaderBySaveDataSpaceId ==
+
|-
Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]].
+
| 3 || DeleteDirectory
 +
|-
 +
| 4 || DeleteDirectoryRecursively
 +
|-
 +
| 5 || RenameFile
 +
|-
 +
| 6 || RenameDirectory
 +
|-
 +
| 7 || [[#GetEntryType]]
 +
|-
 +
| 8 || [[#OpenFile]]
 +
|-
 +
| 9 || [[#OpenDirectory]]
 +
|-
 +
| 10 || [[#Commit]]
 +
|-
 +
| 11 || [[#GetFreeSpaceSize]]
 +
|-
 +
| 12 || [[#GetTotalSpaceSize]]
 +
|-
 +
| 13 || [3.0.0+] [[#CleanDirectoryRecursively]]
 +
|-
 +
| 14 || [3.0.0+] [[#GetFileTimeStampRaw]]
 +
|-
 +
| 15 || [4.0.0+] QueryEntry
 +
|-
 +
| 16 || [15.0.0+] GetFileSystemAttribute
 +
|}
   −
== FindSaveDataWithFilter ==
+
== GetEntryType ==
Takes a total of 0x50-bytes of input, returns 8-bytes of output and a type-0x6 output buffer.
+
Takes a type-0x9 input buffer for the path and returns [[#DirectoryEntryType]] as an output u32.
   −
== OpenSaveDataInfoReaderWithFilter ==
+
== OpenFile ==
Takes a total of 0x50-bytes of input, returns an [[#ISaveDataInfoReader]].
+
Takes a type-0x19 input buffer for the path, and an u32 '''mode'''. '''mode''' controls how the file is opened, based on which bits are set:
   −
== OpenSaveDataTransferManager ==
+
* When bit 0 is set, the file is Readable: you can use the Read operation.
No input, returns an [[#ISaveDataTransferManager]].
+
* When bit 1 is set, the file is Writable: you can use the Write operation.
 +
* When bit 2 is set, the file is Appendable: unless this bit is set, you will not be able to write beyond the end of a file (such writes will result in an error 0x307202)
   −
== OpenSaveDataTransferManagerVersion2 ==
+
== OpenDirectory ==
No input, returns an [[#ISaveDataTransferManagerWithDivision]].
+
Takes a type-0x9 input buffer for the path and an u64 '''filter_flags'''. '''filter_flags''' controls what type of entries are read by the [[#IDirectory]]: bitmask 0x1 = directories, bitmask 0x2 = files.
   −
== OpenSaveDataTransferProhibiter ==
+
== Commit ==
Takes an input u64, returns an [[#ISaveDataTransferProhibiter]].
+
Like [https://3dbrew.org/wiki/FS:ControlArchive 3DS], this has to be used after writing to savedata for the changes to take affect.
   −
== ListAccessibleSaveDataOwnerId ==
+
== GetFreeSpaceSize ==
Takes a total of 0x10-bytes of input, returns 4-bytes of output and a type-0x6 output buffer.
+
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total free space with this FS.
   −
== OpenSaveDataTransferManagerForSaveDataRepair ==
+
== GetTotalSpaceSize ==
No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]].
+
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total space available with this FS(free+used).
   −
== OpenSaveDataMover ==
+
== CleanDirectoryRecursively ==
Takes 2 input [[#SaveDataSpaceId]], an input u64 size and a TransferMemory handle. Returns an output [[#ISaveDataMover]].
+
Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path.
   −
== OpenSaveDataTransferManagerForRepair ==
+
== GetFileTimeStampRaw ==
No input, returns an output [[#ISaveDataTransferManagerForRepair]].
+
Takes a type-0x19 input buffer for the path and returns a 0x20-byte struct. This contains 3 u64s and an u8.
   −
== OpenContentStorageFileSystem ==
+
= IDirectory =
Takes a [[#ContentStorageId]]. Invalid values return 0x2EE202.
+
This is "nn::fssrv::sf::IDirectory".
   −
Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]].
+
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#Read]]
 +
|-
 +
| 1 || [[#GetEntryCount]]
 +
|}
   −
== OpenCloudBackupWorkStorageFileSystem ==
+
== Read ==
Takes 4-bytes of input, returns an [[#IFileSystem]].
+
Takes a type-0x6 output buffer. Returns an output u64(?) for the total number of read entries, this is 0 when no more entries are available.
   −
== OpenCustomStorageFileSystem ==
+
The output buffer contains the read array of [[#DirectoryEntry]]. This doesn't include entries for "." and "..".
Takes a [[#CustomStorageId]]. Invalid values return 0x2EE202.
     −
Returns an [[#IFileSystem]] from either User:/CustomStorage0 or Sdcard:/Nintendo/CustomStorage0. If on the SD card, an AesXtsFileSystem is created using a key source specifically for custom storage.
+
== GetEntryCount ==
 +
Returns an u64 for the total number of readable entries.
   −
== OpenDataStorageByDataId ==
+
= DirectoryEntry =
Takes a [[NCM_services#StorageId|StorageID]] and a [[NCM_services#DataId|DataId]].
+
This is "nn::fs::DirectoryEntry".
   −
Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives.
+
{| class="wikitable" border="1"
 
+
|-
== OpenDataFileSystemWithProgramIndex ==
+
! Offset || Size || Description
Takes an input u8, returns an [[#IFileSystem]].
+
|-
 +
| 0x0 || 0x301 || Path
 +
|-
 +
| 0x301 || 0x1 || File attributes (bit 0 = is directory; bit 1 = archive bit)
 +
|-
 +
| 0x302 || 0x2 || Padding?
 +
|-
 +
| 0x304 || 0x1 || [[#DirectoryEntryType]]
 +
|-
 +
| 0x305 || 0x3 || Padding?
 +
|-
 +
| 0x308 || 0x8 || Filesize, 0 for directories.
 +
|}
   −
== OpenDataStorageWithProgramIndex ==
+
= DirectoryEntryType =
Takes an input u8, returns an [[#IStorage]].
+
This is "nn::fs::DirectoryEntryType".
   −
== OpenDeviceOperator ==
+
An s8 value indicating a directory entry type. The current values are:
This command returns a session to a port implementing the [[#IDeviceOperator]] interface.
     −
== OpenSdCardDetectionEventNotifier ==
+
{| class="wikitable" border="1"
This command returns a session to a port implementing the [[#IEventNotifier]] interface.
+
|-
 +
! Value || Description
 +
|-
 +
| 0 || Directory
 +
|-
 +
| 1 || File
 +
|}
   −
== OpenGameCardDetectionEventNotifier ==
+
= IFile =
This command returns a session to a port implementing the [[#IEventNotifier]] interface.
+
This is "nn::fssrv::sf::IFile".
   −
== SimulateDeviceDetectionEvent ==
+
{| class="wikitable" border="1"
Takes a total of 0xC-bytes of input, no output.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || Read
 +
|-
 +
| 1 || Write
 +
|-
 +
| 2 || Flush
 +
|-
 +
| 3 || SetSize
 +
|-
 +
| 4 || GetSize
 +
|-
 +
| 5 || [4.0.0+] OperateRange
 +
|-
 +
| 6 || [12.0.0+] OperateRangeWithBuffer
 +
|}
   −
== VerifySaveDataFileSystem ==
+
= ISaveDataInfoReader =
Takes an unknown input u64 and a type-0x6 output buffer.
+
This is "nn::fssrv::sf::ISaveDataInfoReader".
   −
The input u64 high-byte must be non-zero, otherwise an [[Error_codes|error]] is returned(0xE02).
+
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#ReadSaveDataInfo]]
 +
|}
   −
== GetSaveDataCommitId ==
+
== ReadSaveDataInfo ==
Takes an input u8 and u64, returns an output u64.
+
Takes a type-0x6 output buffer. Returns an output u64 for total output entries. This buffer contains an array of [[#SaveDataInfo]].
   −
== SetSdCardEncryptionSeed ==
+
This is used to get [[#SaveDataInfo]] for all savedata on the system (or all savedata for the current [[#SaveDataSpaceId]]). When used multiple times, it will resume reading where it left off, until no more entries are available (in that case the out u64 is value 0).
Takes in the 0x10 byte SD card encryption seed, and loads it into FS-module state.
     −
[[NS_Services|NS]]-module reads the 0x10 bytes from SdCard:/Nintendo/Contents/private, and compares them to the first 0x10 bytes of the ns_appman:/private (in [[Flash_Filesystem#System_Savegames|system savedata]] 0x8000000000000043). If they match, NS calls this command using bytes 0x10-0x20 from ns_appman:/private. The rest of this file (0x1F0 bytes total) is all-zero except for the byte at offset 0x20. This byte is set to 1 by NS if the SD card has been mounted successfully and is subsequently passed to SetSdCardAccessibility.
+
= IDeviceOperator =
 +
This is "nn::fssrv::sf::IDeviceOperator".
   −
== OpenAccessFailureDetectionEventNotifier ==
+
{| class="wikitable" border="1"
Takes 8-bytes of input and returns an [[#IEventNotifier]].
+
|-
 
+
! Cmd || Name
[8.0.0+] Now takes an additional 8-bytes of input.
+
|-
 
+
| 0 || [[#IsSdCardInserted]]
== SetSaveDataSize ==
+
|-
Takes two input u64s "size" and "journal_size", and writes them to fsp-srv object member variables.
+
| 1 || [[#GetSdCardSpeedMode]]
 
+
|-
These variables are normally initialized with 32 MiB (0x2000000) and 16 MiB (0x1000000), respectively.
+
| 2 || [2.0.0+] [[#GetSdCardCid]]
 
+
|-
These variables don't seem to be actually used anywhere else (?)
+
| 3 || [2.0.0+] [[#GetSdCardUserAreaSize]]
 
+
|-
== SetSaveDataRootPath ==
+
| 4 || [2.0.0+] [[#GetSdCardProtectedAreaSize]]
Takes an input path, and does snprintf(<fsp-srv object>->m_save_data_root_path, FS_MAX_PATH-1, "/%s", input_path);
+
|-
 
+
| 5 || [2.0.0+] [[#GetAndClearSdCardErrorInfo]]
This path is normally all-zero. When this path is non-zero, the internal OpenSaveDataFileSystem function will create a DirectorySaveDataFileSystem if the target save is a user-save + a directory exists, instead of the normal savedata filesystem object.
+
|-
 
+
| 6 || [17.0.0+] GetSdCardHostControllerStatus
== SetGlobalAccessLogMode ==
+
|-
Takes an input u32.
+
| 100 || [[#GetMmcCid]]
 
+
|-
== SetGlobalAccessLogMode ==
+
| 101 || [[#GetMmcSpeedMode]]
Takes an input u32.
+
|-
 
+
| 110 || [[#EraseMmc]]
== GetGlobalAccessLogMode ==
+
|-
Returns an output u32.
+
| 111 || [[#GetMmcPartitionSize]]
 
+
|-
GlobalAccessLogMode is normally 0.
+
| 112 || [2.0.0+] [[#GetMmcPatrolCount]]
 
+
|-
== OutputAccessLogToSdCard ==
+
| 113 || [2.0.0+] [[#GetAndClearMmcErrorInfo]]
Takes a type-0x5 input buffer.
+
|-
 
+
| 114 || [2.0.0+] [[#GetMmcExtendedCsd]]
The input buffer is the string to output to the log. User-processes normally include a newline at the end.
+
|-
 
+
| 115 || [4.0.0+] [[#SuspendMmcPatrol]]
User-processes only use this when the value previously loaded from [[#GetGlobalAccessLogMode]] has bit1 set.
  −
 
  −
When bit1 in GlobalAccessLogMode is clear, FS-module will just return 0 for OutputAccessLogToSdCard. However even with that set the log doesn't show up SD, unknown why.
  −
 
  −
The input buffer is written to the "$FsAccessLog:/FsAccessLog.txt" file, where "$FsAccessLog" is the SD-card mount-name. It's written to the current end of the file(appended).
  −
 
  −
== GetProgramIndexForAccessLog ==
  −
No input, returns two 32-bit values "version" and "program_index".
  −
 
  −
== OpenMultiCommitManager ==
  −
No input, returns an output [[#IMultiCommitManager]].
  −
 
  −
== OpenBisWiper ==
  −
Takes an input u64 size and a TransferMemory handle. Returns an output [[#IWiper]].
  −
 
  −
= IStorage =
  −
This is "nn::fssrv::sf::IStorage".
  −
 
  −
This is the interface for a raw device, usually a block device.
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 116 || [4.0.0+] [[#ResumeMmcPatrol]]
 
|-
 
|-
| 0 || [[#Read]]
+
| 117 || [17.0.0+] EraseMmcWithRange
 
|-
 
|-
| 1 || [[#Write]]
+
| 200 || [[#IsGameCardInserted]]
 
|-
 
|-
| 2 || [[#Flush]]
+
| 201 || [[#EraseGameCard]]
 
|-
 
|-
| 3 || [[#SetSize]]
+
| 202 || [[#GetGameCardHandle]]
 
|-
 
|-
| 4 || [[#GetSize]]
+
| 203 || [[#GetGameCardUpdatePartitionInfo]]
 +
|-
 +
| 204 || [[#FinalizeGameCardDriver]]
 +
|-
 +
| 205 || [[#GetGameCardAttribute]]
 +
|-
 +
| 206 || [[#GetGameCardDeviceCertificate]]
 +
|-
 +
| 207 || [[#GetGameCardAsicInfo]]
 +
|-
 +
| 208 || [[#GetGameCardIdSet]]
 +
|-
 +
| 209 || [[#WriteToGameCardDirectly]]
 +
|-
 +
| 210 || [[#SetVerifyWriteEnalbleFlag]]
 +
|-
 +
| 211 || [[#GetGameCardImageHash]]
 
|-
 
|-
| 5 || [4.0.0+] OperateRange
+
| 212 || [2.0.0+] [[#GetGameCardDeviceIdForProdCard]]
|}
  −
 
  −
== Read ==
  −
Takes a type-0x46 buffer, an offset and length.
  −
 
  −
== Write ==
  −
Takes a type-0x45 buffer, an offset and length.
  −
 
  −
== Flush ==
  −
No input.
  −
 
  −
== SetSize ==
  −
Takes a size.
  −
 
  −
== GetSize ==
  −
Returns a size.
  −
 
  −
= IFileSystem =
  −
This is "nn::fssrv::sf::IFileSystem".
  −
 
  −
There are two main implementations of this interface:
  −
 
  −
* '''nn::fs::fsa::IFileSystem''': The main IFileSystem implementation. Filesystem classes implement this interface, and FS code usually operates on this interface.
  −
* '''nn::fssrv::sf::IFileSystem''': Used for sending an IFileSystem over IPC. Not used outside of IPC code.
  −
 
  −
There are two adapter classes to convert between these interfaces:
  −
 
  −
* '''nn::fssrv::detail::FileSystemInterfaceAdapter''': Allows access to an nn::fs::fsa::IFileSystem via the nn::fssrv::sf::IFileSystem interface.
  −
* '''nn::fs::detail::FileSystemServiceObjectAdapter''': Allows access to an nn::fssrv::sf::IFileSystem via the nn::fs::fsa::IFileSystem interface.
  −
 
  −
When the FS process returns a filesystem, it will wrap the filesystem object in a FileSystemInterfaceAdapter to return it over IPC.
  −
Then when FS application code receives that filesystem, it will wrap the nn::fssrv::sf::IFileSystem object in a FileSystemServiceObjectAdapter before using it.
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 213 || [2.0.0+] [[#EraseAndWriteParamDirectly]]
 
|-
 
|-
| 0 || CreateFile
+
| 214 || [2.0.0+] [[#ReadParamDirectly]]
 
|-
 
|-
| 1 || DeleteFile
+
| 215 || [2.0.0+] [[#ForceEraseGameCard]]
 
|-
 
|-
| 2 || CreateDirectory
+
| 216 || [2.0.0+] [[#GetGameCardErrorInfo]]
 
|-
 
|-
| 3 || DeleteDirectory
+
| 217 || [2.1.0+] [[#GetGameCardErrorReportInfo]]
 
|-
 
|-
| 4 || DeleteDirectoryRecursively
+
| 218 || [3.0.0+] [[#GetGameCardDeviceId]]
 
|-
 
|-
| 5 || RenameFile
+
| 219 || [8.0.0+] [[#ChallengeCardExistence]]
 
|-
 
|-
| 6 || RenameDirectory
+
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]]
 
|-
 
|-
| 7 || [[#GetEntryType]]
+
| 221 || [17.0.0+] [[#GetGameCardAsicCertificate]]
 
|-
 
|-
| 8 || [[#OpenFile]]
+
| 222 || [18.0.0+] [[#GetGameCardCardHeader]]
 
|-
 
|-
| 9 || [[#OpenDirectory]]
+
| 300 || [[#SetSpeedEmulationMode]]
 
|-
 
|-
| 10 || [[#Commit]]
+
| 301 || [[#GetSpeedEmulationMode]]
 
|-
 
|-
| 11 || [[#GetFreeSpaceSize]]
+
| 302 || [18.0.0+] SetApplicationStorageSpeed
 
|-
 
|-
| 12 || [[#GetTotalSpaceSize]]
+
| 400 || [5.0.0+] [[#SuspendSdmmcControl]]
 
|-
 
|-
| 13 || [3.0.0+] [[#CleanDirectoryRecursively]]
+
| 401 || [5.0.0+] [[#ResumeSdmmcControl]]
 
|-
 
|-
| 14 || [3.0.0+] [[#GetFileTimeStampRaw]]
+
| 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]]
 
|-
 
|-
| 15 || [4.0.0+] QueryEntry
+
| 500 || [6.0.0+] [[#SetDeviceSimulationEvent]]
 
|-
 
|-
| 16 || [15.0.0+] GetFileSystemAttribute
+
| 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]]
 
|}
 
|}
   −
== GetEntryType ==
+
== IsSdCardInserted ==
Takes a type-0x9 input buffer for the path and returns [[#DirectoryEntryType]] as an output u32.
+
No input. Returns an output bool.
   −
== OpenFile ==
+
== GetSdCardSpeedMode ==
Takes a type-0x19 input buffer for the path, and an u32 '''mode'''. '''mode''' controls how the file is opened, based on which bits are set:
+
No input. Returns an output [[#SdCardSpeedMode]].
   −
* When bit 0 is set, the file is Readable: you can use the Read operation.
+
== GetSdCardCid ==
* When bit 1 is set, the file is Writable: you can use the Write operation.
+
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
* When bit 2 is set, the file is Appendable: unless this bit is set, you will not be able to write beyond the end of a file (such writes will result in an error 0x307202)
     −
== OpenDirectory ==
+
== GetSdCardUserAreaSize ==
Takes a type-0x9 input buffer for the path and an u64 '''filter_flags'''. '''filter_flags''' controls what type of entries are read by the [[#IDirectory]]: bitmask 0x1 = directories, bitmask 0x2 = files.
+
No input. Returns an output s64 '''SdCardUserAreaSize'''.
 +
 
 +
== GetSdCardProtectedAreaSize ==
 +
No input. Returns an output s64 '''SdCardProtectedAreaSize'''.
   −
== Commit ==
+
== GetAndClearSdCardErrorInfo ==
Like [https://3dbrew.org/wiki/FS:ControlArchive 3DS], this has to be used after writing to savedata for the changes to take affect.
+
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.
   −
== GetFreeSpaceSize ==
+
== GetMmcCid ==
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total free space with this FS.
+
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
   −
== GetTotalSpaceSize ==
+
== GetMmcSpeedMode ==
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total space available with this FS(free+used).
+
No input. Returns an output [[#MmcSpeedMode]].
   −
== CleanDirectoryRecursively ==
+
== EraseMmc ==
Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path.
+
Takes an input [[#MmcPartition]]. No output.
   −
== GetFileTimeStampRaw ==
+
== GetMmcPartitionSize ==
Takes a type-0x19 input buffer for the path and returns a 0x20-byte struct. This contains 3 u64s and an u8.
+
Takes an input [[#MmcPartition]]. Returns an output s64 '''MmcPartitionSize'''.
   −
= IDirectory =
+
== GetMmcPatrolCount ==
This is "nn::fssrv::sf::IDirectory".
+
No input. Returns an output u32 '''MmcPatrolCount'''.
   −
{| class="wikitable" border="1"
+
== GetAndClearMmcErrorInfo ==
|-
+
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.
! Cmd || Name
+
 
|-
+
== GetMmcExtendedCsd ==
| 0 || [[#Read]]
+
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
|-
+
 
| 1 || [[#GetEntryCount]]
+
== SuspendMmcPatrol ==
|}
+
No input/output.
   −
== Read ==
+
== ResumeMmcPatrol ==
Takes a type-0x6 output buffer. Returns an output u64(?) for the total number of read entries, this is 0 when no more entries are available.
+
No input/output.
   −
The output buffer contains the read array of [[#DirectoryEntry]]. This doesn't include entries for "." and "..".
+
== IsGameCardInserted ==
 +
No input. Returns an output bool.
   −
== GetEntryCount ==
+
== EraseGameCard ==
Returns an u64 for the total number of readable entries.
+
Takes an input [[#GameCardSize]] and an input u64 '''NormalAreaSize'''. No output.
   −
= DirectoryEntry =
+
== GetGameCardHandle ==
This is "nn::fs::DirectoryEntry".
+
No input. Returns an output [[#GameCardHandle]].
   −
{| class="wikitable" border="1"
+
== GetGameCardUpdatePartitionInfo ==
|-
+
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardUpdatePartitionInfo]].
! Offset || Size || Description
  −
|-
  −
| 0x0 || 0x301 || Path
  −
|-
  −
| 0x301 || 0x1 || File attributes (bit 0 = is directory; bit 1 = archive bit)
  −
|-
  −
| 0x302 || 0x2 || Padding?
  −
|-
  −
| 0x304 || 0x1 || [[#DirectoryEntryType]]
  −
|-
  −
| 0x305 || 0x3 || Padding?
  −
|-
  −
| 0x308 || 0x8 || Filesize, 0 for directories.
  −
|}
     −
= DirectoryEntryType =
+
== FinalizeGameCardDriver ==
This is "nn::fs::DirectoryEntryType".
+
No input/output.
   −
An s8 value indicating a directory entry type. The current values are:
+
== GetGameCardAttribute ==
 +
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardAttribute]].
   −
{| class="wikitable" border="1"
+
== GetGameCardDeviceCertificate ==
|-
+
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
! Value || Description
  −
|-
  −
| 0 || Directory
  −
|-
  −
| 1 || File
  −
|}
     −
= IFile =
+
== GetGameCardAsicInfo ==
This is "nn::fssrv::sf::IFile".
+
Takes a type-0x5 input buffer '''FwBuffer''', a type-0x6 output buffer containing [[#RmaInformation]] and two input s64s '''FwBufferSize''' and '''RmaInformationSize'''. No output.
   −
{| class="wikitable" border="1"
+
== GetGameCardIdSet ==
|-
+
Takes a type-0x6 output buffer containing a [[#GameCardIdSet]] and an input s64 '''BufferSize'''. No output.
! Cmd || Name
  −
|-
  −
| 0 || Read
  −
|-
  −
| 1 || Write
  −
|-
  −
| 2 || Flush
  −
|-
  −
| 3 || SetSize
  −
|-
  −
| 4 || GetSize
  −
|-
  −
| 5 || [4.0.0+] OperateRange
  −
|-
  −
| 6 || [12.0.0+] OperateRangeWithBuffer
  −
|}
     −
= ISaveDataInfoReader =
+
== WriteToGameCardDirectly ==
This is "nn::fssrv::sf::ISaveDataInfoReader".
+
Takes a type-0x6 output buffer and two input s64s '''Offset''' and '''BufferSize'''. No output.
   −
{| class="wikitable" border="1"
+
== SetVerifyWriteEnalbleFlag ==
|-
+
Takes an input bool. No output.
! Cmd || Name
  −
|-
  −
| 0 || [[#ReadSaveDataInfo]]
  −
|}
     −
== ReadSaveDataInfo ==
+
== GetGameCardImageHash ==
Takes a type-0x6 output buffer. Returns an output u64 for total output entries. This buffer contains an array of [[#SaveDataInfo]].
+
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
   −
This is used to get [[#SaveDataInfo]] for all savedata on the system (or all savedata for the current [[#SaveDataSpaceId]]). When used multiple times, it will resume reading where it left off, until no more entries are available (in that case the out u64 is value 0).
+
== GetGameCardDeviceIdForProdCard ==
 +
Takes a type-0x5 input buffer '''CardHeaderForDev''', a type-0x6 output buffer and two input s64s '''CardHeaderForDevSize''' and '''BufferSize'''. No output.
 +
 
 +
== EraseAndWriteParamDirectly ==
 +
Takes a type-0x5 input buffer and an input s64 '''BufferSize'''. No output.
 +
 
 +
== ReadParamDirectly ==
 +
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
 +
 
 +
== ForceEraseGameCard ==
 +
No input/output.
 +
 
 +
== GetGameCardErrorInfo ==
 +
No input. Returns an output [[#GameCardErrorInfo]].
   −
= IDeviceOperator =
+
== GetGameCardErrorReportInfo ==
This is "nn::fssrv::sf::IDeviceOperator".
+
No input. Returns an output [[#GameCardErrorReportInfo]].
   −
{| class="wikitable" border="1"
+
== GetGameCardDeviceId ==
|-
+
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
! Cmd || Name
+
 
|-
+
== ChallengeCardExistence ==
| 0 || [[#IsSdCardInserted]]
+
Takes a type-0x6 output buffer, two type-0x5 input buffers and an input [[#GameCardHandle]]. No output.
|-
+
 
| 1 || [[#GetSdCardSpeedMode]]
+
[9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]].
|-
+
 
| 2 || [2.0.0+] [[#GetSdCardCid]]
+
== GetGameCardCompatibilityType ==
|-
+
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardCompatibilityType]].
| 3 || [2.0.0+] [[#GetSdCardUserAreaSize]]
+
 
|-
+
== GetGameCardAsicCertificate ==
| 4 || [2.0.0+] [[#GetSdCardProtectedAreaSize]]
+
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
|-
+
 
| 5 || [2.0.0+] [[#GetAndClearSdCardErrorInfo]]
+
== GetGameCardCardHeader ==
|-
+
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
| 6 || [17.0.0+] GetSdCardHostControllerStatus
+
 
|-
+
== SetSpeedEmulationMode ==
| 100 || [[#GetMmcCid]]
+
Takes an input [[#SpeedEmulationMode]]. No output.
|-
+
 
| 101 || [[#GetMmcSpeedMode]]
+
== GetSpeedEmulationMode ==
|-
+
No input. Returns an output [[#SpeedEmulationMode]].
| 110 || [[#EraseMmc]]
+
 
|-
+
== SuspendSdmmcControl ==
| 111 || [[#GetMmcPartitionSize]]
+
No input/output.
|-
+
 
| 112 || [2.0.0+] [[#GetMmcPatrolCount]]
+
== ResumeSdmmcControl ==
|-
+
No input/output.
| 113 || [2.0.0+] [[#GetAndClearMmcErrorInfo]]
+
 
|-
+
== GetSdmmcConnectionStatus ==
| 114 || [2.0.0+] [[#GetMmcExtendedCsd]]
+
Takes a total of 4-bytes of input. Returns a total of 8-bytes of output.
 +
 
 +
== SetDeviceSimulationEvent ==
 +
Takes a total of 0x14-bytes of input. No output.
 +
 
 +
== ClearDeviceSimulationEvent ==
 +
Takes a total of 4-bytes of input. No output.
 +
 
 +
= IEventNotifier =
 +
This is "nn::fssrv::sf::IEventNotifier".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 115 || [4.0.0+] [[#SuspendMmcPatrol]]
+
! Cmd || Name
 
|-
 
|-
| 116 || [4.0.0+] [[#ResumeMmcPatrol]]
+
| 0 || [[#GetEventHandle]]
|-
+
|}
| 117 || [17.0.0+] EraseMmcWithRange
+
 
|-
+
== GetEventHandle ==
| 200 || [[#IsGameCardInserted]]
+
No input, returns an output Event handle. With official sw the EventClearMode is user-specified.
 +
 
 +
= ISaveDataTransferManager =
 +
This is "nn::fssrv::sf::ISaveDataTransferManager".
 +
 
 +
This was added with [[4.0.0]].
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 201 || [[#EraseGameCard]]
+
! Cmd || Name
 
|-
 
|-
| 202 || [[#GetGameCardHandle]]
+
| 0 || [[#GetChallenge]]
 
|-
 
|-
| 203 || [[#GetGameCardUpdatePartitionInfo]]
+
| 16 || [[#SetToken]]
 
|-
 
|-
| 204 || [[#FinalizeGameCardDriver]]
+
| 32 || [[#OpenSaveDataExporter]]
 
|-
 
|-
| 205 || [[#GetGameCardAttribute]]
+
| 64 || [[#OpenSaveDataImporter]]
|-
+
|}
| 206 || [[#GetGameCardDeviceCertificate]]
+
 
|-
+
== GetChallenge ==
| 207 || [[#GetGameCardAsicInfo]]
+
No input/output, takes a type-0x6 output buffer.
|-
+
 
| 208 || [[#GetGameCardIdSet]]
+
== SetToken ==
|-
+
No input/output, takes a type-0x5 input buffer.
| 209 || [[#WriteToGameCardDirectly]]
+
 
|-
+
== OpenSaveDataExporter ==
| 210 || [[#SetVerifyWriteEnalbleFlag]]
+
Takes an input u8 [[#SaveDataSpaceId]] and u64, returns an [[#ISaveDataExporter]].
 +
 
 +
== OpenSaveDataImporter ==
 +
Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]].
 +
 
 +
= ISaveDataTransferManagerForSaveDataRepair =
 +
This is "nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair".
 +
 
 +
This was added with [[9.0.0]].
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 211 || [[#GetGameCardImageHash]]
+
! Cmd || Name
 
|-
 
|-
| 212 || [2.0.0+] [[#GetGameCardDeviceIdForProdCard]]
+
| 0 || [[#GetChallenge]]
 
|-
 
|-
| 213 || [2.0.0+] [[#EraseAndWriteParamDirectly]]
+
| 16 || [[#SetKeyPackage]]
 
|-
 
|-
| 214 || [2.0.0+] [[#ReadParamDirectly]]
+
| 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]]
 
|-
 
|-
| 215 || [2.0.0+] [[#ForceEraseGameCard]]
+
| 81 || [[#PrepareOpenSaveDataImporter]]
 
|-
 
|-
| 216 || [2.0.0+] [[#GetGameCardErrorInfo]]
+
| 90 || [[#OpenSaveDataImporter]]
 
|-
 
|-
| 217 || [2.1.0+] [[#GetGameCardErrorReportInfo]]
+
| 91 || [[#OpenSaveDataImporter2]]
 
|-
 
|-
| 218 || [3.0.0+] [[#GetGameCardDeviceId]]
+
| 100 || [[#OpenSaveDataExporterWithKey]]
 
|-
 
|-
| 219 || [8.0.0+] [[#ChallengeCardExistence]]
+
| 110 || [[#OpenSaveDataImporterWithKey]]
|-
+
|}
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]]
+
 
|-
+
== SetKeyPackage ==
| 221 || [17.0.0+] GetGameCardAsicCertificate
+
No input/output, takes a type-0x5 input buffer.
|-
  −
| 300 || [[#SetSpeedEmulationMode]]
  −
|-
  −
| 301 || [[#GetSpeedEmulationMode]]
  −
|-
  −
| 400 || [5.0.0+] [[#SuspendSdmmcControl]]
  −
|-
  −
| 401 || [5.0.0+] [[#ResumeSdmmcControl]]
  −
|-
  −
| 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]]
  −
|-
  −
| 500 || [6.0.0+] [[#SetDeviceSimulationEvent]]
  −
|-
  −
| 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]]
  −
|}
     −
== IsSdCardInserted ==
+
== OpenSaveDataExporterAndGetEncryptedKey ==
No input. Returns an output bool.
+
Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]].
   −
== GetSdCardSpeedMode ==
+
== PrepareOpenSaveDataImporter ==
No input. Returns an output [[#SdCardSpeedMode]].
+
Takes a type-0x1A output buffer to receive a RsaEncryptedKey.
   −
== GetSdCardCid ==
+
== OpenSaveDataImporter ==
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
+
Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]].
   −
== GetSdCardUserAreaSize ==
+
== OpenSaveDataImporter2 ==
No input. Returns an output s64 '''SdCardUserAreaSize'''.
+
Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
   −
== GetSdCardProtectedAreaSize ==
+
== OpenSaveDataExporterWithKey ==
No input. Returns an output s64 '''SdCardProtectedAreaSize'''.
+
Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]].
   −
== GetAndClearSdCardErrorInfo ==
+
== OpenSaveDataImporterWithKey ==
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.
+
Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
   −
== GetMmcCid ==
+
[17.0.0+] Now only takes 0x18-bytes of input and an additional type-0x5 input buffer.
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
     −
== GetMmcSpeedMode ==
+
= ISaveDataMover =
No input. Returns an output [[#MmcSpeedMode]].
+
This is "nn::fssrv::sf::ISaveDataMover".
   −
== EraseMmc ==
+
This was added with [[10.0.0]].
Takes an input [[#MmcPartition]]. No output.
     −
== GetMmcPartitionSize ==
+
{| class="wikitable" border="1"
Takes an input [[#MmcPartition]]. Returns an output s64 '''MmcPartitionSize'''.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 8 || [[#Register]]
 +
|-
 +
| 16 || [[#Process]]
 +
|-
 +
| 18 || [[#Cancel]]
 +
|}
   −
== GetMmcPatrolCount ==
+
== Register ==
No input. Returns an output u32 '''MmcPatrolCount'''.
+
Takes an input u64, no output.
   −
== GetAndClearMmcErrorInfo ==
+
== Process ==
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.
+
Takes an input u64, returns an output u64.
   −
== GetMmcExtendedCsd ==
+
== Cancel ==
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
  −
 
  −
== SuspendMmcPatrol ==
   
No input/output.
 
No input/output.
   −
== ResumeMmcPatrol ==
+
= ISaveDataTransferManagerForRepair =
No input/output.
+
This is "nn::fssrv::sf::ISaveDataTransferManagerForRepair".
   −
== IsGameCardInserted ==
+
This was added with [[11.0.0]].
No input. Returns an output bool.
     −
== EraseGameCard ==
+
{| class="wikitable" border="1"
Takes an input [[#GameCardSize]] and an input u64 '''NormalAreaSize'''. No output.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 80 || [[#OpenSaveDataExporter]]
 +
|-
 +
| 90 || [[#OpenSaveDataImporter]]
 +
|}
   −
== GetGameCardHandle ==
+
== OpenSaveDataExporter ==
No input. Returns an output [[#GameCardHandle]].
+
Takes a total of 0x10-bytes of input, returns an [[#ISaveDataDivisionExporter]].
   −
== GetGameCardUpdatePartitionInfo ==
+
== OpenSaveDataImporter ==
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardUpdatePartitionInfo]].
+
Takes 1-byte of input, a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
   −
== FinalizeGameCardDriver ==
+
= ISaveDataExporter =
No input/output.
+
This is "nn::fssrv::sf::ISaveDataExporter".
   −
== GetGameCardAttribute ==
+
This was added with [[4.0.0]].
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardAttribute]].
     −
== GetGameCardDeviceCertificate ==
+
{| class="wikitable" border="1"
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#GetSaveDataInfo]]
 +
|-
 +
| 1 || [[#GetRestSize]]
 +
|-
 +
| 16 || [[#Pull]]
 +
|-
 +
| 17 || [[#PullInitialData]]
 +
|}
   −
== GetGameCardAsicInfo ==
+
== GetSaveDataInfo ==
Takes a type-0x5 input buffer '''FwBuffer''', a type-0x6 output buffer containing [[#RmaInformation]] and two input s64s '''FwBufferSize''' and '''RmaInformationSize'''. No output.
+
No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer.
   −
== GetGameCardIdSet ==
+
The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw.
Takes a type-0x6 output buffer containing a [[#GameCardIdSet]] and an input s64 '''BufferSize'''. No output.
     −
== WriteToGameCardDirectly ==
+
== GetRestSize ==
Takes a type-0x6 output buffer and two input s64s '''Offset''' and '''BufferSize'''. No output.
+
No input, returns an output u64.
   −
== SetVerifyWriteEnalbleFlag ==
+
== Pull ==
Takes an input bool. No output.
+
Takes a type-0x6 output buffer, returns an output u64.
   −
== GetGameCardImageHash ==
+
== PullInitialData ==
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
+
No input/output, takes a type-0x6 output buffer.
   −
== GetGameCardDeviceIdForProdCard ==
+
= ISaveDataImporter =
Takes a type-0x5 input buffer '''CardHeaderForDev''', a type-0x6 output buffer and two input s64s '''CardHeaderForDevSize''' and '''BufferSize'''. No output.
+
This is "nn::fssrv::sf::ISaveDataImporter".
   −
== EraseAndWriteParamDirectly ==
+
This was added with [[4.0.0]].
Takes a type-0x5 input buffer and an input s64 '''BufferSize'''. No output.
     −
== ReadParamDirectly ==
+
{| class="wikitable" border="1"
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#GetSaveDataInfo]]
 +
|-
 +
| 1 || [[#GetRestSize]]
 +
|-
 +
| 16 || [[#Push]]
 +
|-
 +
| 17 || [[#Finalize]]
 +
|}
   −
== ForceEraseGameCard ==
+
== GetSaveDataInfo ==
No input/output.
+
No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer.
   −
== GetGameCardErrorInfo ==
+
The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw.
No input. Returns an output [[#GameCardErrorInfo]].
     −
== GetGameCardErrorReportInfo ==
+
== GetRestSize ==
No input. Returns an output [[#GameCardErrorReportInfo]].
+
No input, returns an output u64.
   −
== GetGameCardDeviceId ==
+
== Push ==
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
+
No input/output, takes a type-0x5 input buffer.
   −
== ChallengeCardExistence ==
+
== Finalize ==
Takes a type-0x6 output buffer, two type-0x5 input buffers and an input [[#GameCardHandle]]. No output.
  −
 
  −
[9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]].
  −
 
  −
== GetGameCardCompatibilityType ==
  −
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardCompatibilityType]].
  −
 
  −
== SetSpeedEmulationMode ==
  −
Takes an input [[#SpeedEmulationMode]]. No output.
  −
 
  −
== GetSpeedEmulationMode ==
  −
No input. Returns an output [[#SpeedEmulationMode]].
  −
 
  −
== SuspendSdmmcControl ==
   
No input/output.
 
No input/output.
   −
== ResumeSdmmcControl ==
+
= ISaveDataTransferManagerWithDivision =
No input/output.
+
This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision".
   −
== GetSdmmcConnectionStatus ==
+
This was added with [[5.0.0]].
Takes a total of 4-bytes of input. Returns a total of 8-bytes of output.
     −
== SetDeviceSimulationEvent ==
+
{| class="wikitable" border="1"
Takes a total of 0x14-bytes of input. No output.
+
|-
 
  −
== ClearDeviceSimulationEvent ==
  −
Takes a total of 4-bytes of input. No output.
  −
 
  −
= IEventNotifier =
  −
This is "nn::fssrv::sf::IEventNotifier".
  −
 
  −
{| class="wikitable" border="1"
  −
|-
   
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetEventHandle]]
+
| 0 || [[#GetChallenge]]
|}
  −
 
  −
== GetEventHandle ==
  −
No input, returns an output Event handle. With official sw the EventClearMode is user-specified.
  −
 
  −
= ISaveDataTransferManager =
  −
This is "nn::fssrv::sf::ISaveDataTransferManager".
  −
 
  −
This was added with [[4.0.0]].
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 8 || [18.0.0+] SetMode
 
|-
 
|-
| 0 || [[#GetChallenge]]
+
| 9 || [18.0.0+] SetAttribute
 
|-
 
|-
| 16 || [[#SetToken]]
+
| 16 || [[#SetKeySeedPackage]]
 
|-
 
|-
 
| 32 || [[#OpenSaveDataExporter]]
 
| 32 || [[#OpenSaveDataExporter]]
 
|-
 
|-
| 64 || [[#OpenSaveDataImporter]]
+
| 33 || [[#OpenSaveDataExporterForDiffExport]]
|}
+
|-
 
+
| 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]]
== GetChallenge ==
+
|-
No input/output, takes a type-0x6 output buffer.
+
| 63 || [17.0.0+] OpenSaveDataImporter
 
  −
== SetToken ==
  −
No input/output, takes a type-0x5 input buffer.
  −
 
  −
== OpenSaveDataExporter ==
  −
Takes an input u8 [[#SaveDataSpaceId]] and u64, returns an [[#ISaveDataExporter]].
  −
 
  −
== OpenSaveDataImporter ==
  −
Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]].
  −
 
  −
= ISaveDataTransferManagerForSaveDataRepair =
  −
This is "nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair".
  −
 
  −
This was added with [[9.0.0]].
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 64 || [6.0.0-17.0.1] [[#OpenSaveDataImporterDeprecated]] ([5.0.0-5.1.0] OpenSaveDataImporter)
 
|-
 
|-
| 0 || [[#GetChallenge]]
+
| 65 || [5.0.0-17.0.1] [[#OpenSaveDataImporterForDiffImport]]
 
|-
 
|-
| 16 || [[#SetKeyPackage]]
+
| 66 || [6.0.0-17.0.1] [[#OpenSaveDataImporterForDuplicateDiffImport]]
 
|-
 
|-
| 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]]
+
| 67 || [6.0.0-16.1.0] [[#OpenSaveDataImporter]]
 
|-
 
|-
| 81 || [[#PrepareOpenSaveDataImporter]]
+
| 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]]
 
|-
 
|-
| 90 || [[#OpenSaveDataImporter]]
+
| 69 || [6.0.0+] [[#CancelSuspendingImport]]
|-
  −
| 91 || [[#OpenSaveDataImporter2]]
   
|-
 
|-
| 100 || [[#OpenSaveDataExporterWithKey]]
+
| 70 || [10.0.0+] CancelSuspendingImportByAttribute
 
|-
 
|-
| 110 || [[#OpenSaveDataImporterWithKey]]
+
| 80 || [11.0.0+] SwapSecondary
 
|}
 
|}
   −
== SetKeyPackage ==
+
== GetChallenge ==
No input/output, takes a type-0x5 input buffer.
+
No input/output, takes a type-0x6 output buffer containing the '''Challenge'''.
   −
== OpenSaveDataExporterAndGetEncryptedKey ==
+
== SetKeySeedPackage ==
Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]].
+
No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''.
   −
== PrepareOpenSaveDataImporter ==
+
== OpenSaveDataExporter ==
Takes a type-0x1A output buffer to receive a RsaEncryptedKey.
+
Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]].
   −
== OpenSaveDataImporter ==
+
== OpenSaveDataExporterForDiffExport ==
Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]].
+
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]].
   −
== OpenSaveDataImporter2 ==
+
== OpenSaveDataExporterByContext ==
Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
+
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]].
   −
== OpenSaveDataExporterWithKey ==
+
== OpenSaveDataImporterDeprecated ==
Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]].
+
Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]].
   −
== OpenSaveDataImporterWithKey ==
+
== OpenSaveDataImporterForDiffImport ==
Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
+
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]].
   −
[17.0.0+] Now only takes 0x18-bytes of input and an additional type-0x5 input buffer.
+
== OpenSaveDataImporterForDuplicateDiffImport ==
 +
Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
   −
= ISaveDataMover =
+
== OpenSaveDataImporter ==
This is "nn::fssrv::sf::ISaveDataMover".
+
Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
   −
This was added with [[10.0.0]].
+
== OpenSaveDataImporterByContext ==
 +
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
   −
{| class="wikitable" border="1"
+
== CancelSuspendingImport ==
|-
+
Takes an input u64 and a 0x10-byte struct, no output.
! Cmd || Name
  −
|-
  −
| 8 || [[#Register]]
  −
|-
  −
| 16 || [[#Process]]
  −
|-
  −
| 18 || [[#Cancel]]
  −
|}
     −
== Register ==
+
= ISaveDataDivisionExporter =
Takes an input u64, no output.
+
This is "nn::fssrv::sf::ISaveDataDivisionExporter".
   −
== Process ==
+
This was added with [[5.0.0]].
Takes an input u64, returns an output u64.
  −
 
  −
== Cancel ==
  −
No input/output.
  −
 
  −
= ISaveDataTransferManagerForRepair =
  −
This is "nn::fssrv::sf::ISaveDataTransferManagerForRepair".
  −
 
  −
This was added with [[11.0.0]].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,786: Line 1,562:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 80 || [[#OpenSaveDataExporter]]
+
| 0 || [[#SetDivisionCount]]
 +
|-
 +
| 1 || [6.0.0+] [[#ReadSaveDataExtraData]]
 
|-
 
|-
| 90 || [[#OpenSaveDataImporter]]
+
| 16 || [[#OpenSaveDataDiffChunkIterator]]
|}
+
|-
 
+
| 48 || [[#OpenSaveDataChunkExporter]]
== OpenSaveDataExporter ==
+
|-
Takes a total of 0x10-bytes of input, returns an [[#ISaveDataDivisionExporter]].
+
| 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]]
 
+
|-
== OpenSaveDataImporter ==
+
| 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]]
Takes 1-byte of input, a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
  −
 
  −
= ISaveDataExporter =
  −
This is "nn::fssrv::sf::ISaveDataExporter".
  −
 
  −
This was added with [[4.0.0]].
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 66 || [6.0.0+] [[#CancelExport]]
 
|-
 
|-
| 0 || [[#GetSaveDataInfo]]
+
| 67 || [6.0.0+] [[#SuspendExport]]
 
|-
 
|-
| 1 || [[#GetRestSize]]
+
| 70 || [6.0.0-17.0.1] [[#GetKeySeed]]
 
|-
 
|-
| 16 || [[#Pull]]
+
| 71 || [6.0.0+] [[#GetInitialDataMac]]
 
|-
 
|-
| 17 || [[#PullInitialData]]
+
| 72 || [6.0.0+] [[#FinalizeExport]]
|}
  −
 
  −
== GetSaveDataInfo ==
  −
No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer.
  −
 
  −
The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw.
  −
 
  −
== GetRestSize ==
  −
No input, returns an output u64.
  −
 
  −
== Pull ==
  −
Takes a type-0x6 output buffer, returns an output u64.
  −
 
  −
== PullInitialData ==
  −
No input/output, takes a type-0x6 output buffer.
  −
 
  −
= ISaveDataImporter =
  −
This is "nn::fssrv::sf::ISaveDataImporter".
  −
 
  −
This was added with [[4.0.0]].
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]]
 
|-
 
|-
| 0 || [[#GetSaveDataInfo]]
+
| 74 || [18.0.0+] [[#GetKeySeed]]
 
|-
 
|-
| 1 || [[#GetRestSize]]
+
| 80 || [6.0.0+] [[#GetImportInitialDataAad]]
 
|-
 
|-
| 16 || [[#Push]]
+
| 81 || [6.0.0+] [[#SetExportInitialDataAad]]
 
|-
 
|-
| 17 || [[#Finalize]]
+
| 96 || [6.0.0+] [[#GetReportInfo]]
 
|}
 
|}
   −
== GetSaveDataInfo ==
+
== SetDivisionCount ==
No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer.
+
Takes an input u32, no output.
   −
The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw.
+
== OpenSaveDataChunkExporter ==
 +
Takes an input u32, returns an [[#ISaveDataChunkExporter]].
   −
== GetRestSize ==
+
== FinalizeFullExport ==
No input, returns an output u64.
+
No input, returns two 0x10-byte output structs.
 +
 
 +
== FinalizeDiffExport ==
 +
No input, returns an output 0x10-byte struct.
 +
 
 +
== CancelExport ==
 +
No input/output.
 +
 
 +
== SuspendExport ==
 +
No input/output, takes a type-0x6 output buffer.
 +
 
 +
== GetKeySeed ==
 +
No input, returns an output 0x10-byte struct.
   −
== Push ==
+
== GetInitialDataMac ==
No input/output, takes a type-0x5 input buffer.
+
No input, returns an output 0x10-byte struct.
   −
== Finalize ==
+
== FinalizeExport ==
 
No input/output.
 
No input/output.
   −
= ISaveDataTransferManagerWithDivision =
+
== SetExportInitialDataAad ==
This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision".
+
Takes an input 0x20-byte struct, no output.
 +
 
 +
= ISaveDataDivisionImporter =
 +
This is "nn::fssrv::sf::ISaveDataDivisionImporter".
    
This was added with [[5.0.0]].
 
This was added with [[5.0.0]].
Line 1,870: Line 1,634:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetChallenge]]
+
| 0 || [6.0.0+] [[#ReadSaveDataExtraData]]
 
|-
 
|-
| 16 || [[#SetKeySeedPackage]]
+
| 16 || [[#OpenSaveDataDiffChunkIterator]]
 
|-
 
|-
| 32 || [[#OpenSaveDataExporter]]
+
| 32 || [[#InitializeImport]]
 
|-
 
|-
| 33 || [[#OpenSaveDataExporterForDiffExport]]
+
| 33 || [[#FinalizeImport]]
 
|-
 
|-
| 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]]
+
| 34 || [6.0.0+] [[#CancelImport]]
 
|-
 
|-
| 63 || [17.0.0+] OpenSaveDataImporter
+
| 35 || [6.0.0+] [[#GetImportContext]]
 
|-
 
|-
| 64 || [6.0.0+] [[#OpenSaveDataImporterDeprecated]] ([5.0.0-5.1.0] OpenSaveDataImporter)
+
| 36 || [6.0.0+] [[#SuspendImport]]
 
|-
 
|-
| 65 || [[#OpenSaveDataImporterForDiffImport]]
+
| 37 || [11.0.0+] FinalizeImportWithoutSwap
 
|-
 
|-
| 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]]
+
| 48 || [[#OpenSaveDataChunkImporter]]
 
|-
 
|-
| 67 || [6.0.0-16.1.0] [[#OpenSaveDataImporter]]
+
| 64 || [6.0.0+] [[#GetImportInitialDataAad]]
 
|-
 
|-
| 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]]
+
| 80 || [6.0.0+] [[#GetReportInfo]]
|-
  −
| 69 || [6.0.0+] [[#CancelSuspendingImport]]
  −
|-
  −
| 70 || [10.0.0+] DecryptAndVerifyInitialData
  −
|-
  −
| 80 || [11.0.0+] DecryptoAndVerifyPortContext
   
|}
 
|}
   −
== GetChallenge ==
+
== ReadSaveDataExtraData ==
No input/output, takes a type-0x6 output buffer containing the '''Challenge'''.
+
No input/output, takes a type-0x6 output buffer.
   −
== SetKeySeedPackage ==
+
== OpenSaveDataDiffChunkIterator ==
No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''.
+
No input, returns an [[#ISaveDataChunkIterator]].
   −
== OpenSaveDataExporter ==
+
== InitializeImport ==
Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]].
+
No input, returns an output u64.
   −
== OpenSaveDataExporterForDiffExport ==
+
== FinalizeImport ==
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]].
+
No input/output.
   −
== OpenSaveDataExporterByContext ==
+
== CancelImport ==
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]].
+
No input/output.
   −
== OpenSaveDataImporterDeprecated ==
+
== GetImportContext ==
Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]].
+
No input/output, takes a type-0x6 output buffer.
   −
== OpenSaveDataImporterForDiffImport ==
+
== SuspendImport ==
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]].
+
No input/output.
   −
== OpenSaveDataImporterForDuplicateDiffImport ==
+
== OpenSaveDataChunkImporter ==
Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
+
Takes an input u32, returns an [[#ISaveDataChunkImporter]].
   −
== OpenSaveDataImporter ==
+
== GetImportInitialDataAad ==  
Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
+
No input, returns an output 0x20-byte struct.
   −
== OpenSaveDataImporterByContext ==
+
== GetReportInfo ==
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
+
No input, returns an output 0x20-byte struct.
   −
== CancelSuspendingImport ==
+
= ISaveDataChunkIterator =
Takes an input u64 and a 0x10-byte struct, no output.
+
This is "nn::fssrv::sf::ISaveDataChunkIterator".
 
  −
= ISaveDataDivisionExporter =
  −
This is "nn::fssrv::sf::ISaveDataDivisionExporter".
      
This was added with [[5.0.0]].
 
This was added with [[5.0.0]].
Line 1,941: Line 1,696:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#SetDivisionCount]]
+
| 0 || [[#Next]]
 
|-
 
|-
| 1 || [6.0.0+] [[#GetSaveDataInfo]]
+
| 1 || [[#IsEnd]]  
 
|-
 
|-
| 16 || [[#OpenSaveDataDiffChunkIterator]]
+
| 16 || [[#GetId]]  
 +
|}
 +
 
 +
== Next ==
 +
No input/output.
 +
 
 +
== IsEnd ==
 +
No input, returns an output u8.
 +
 
 +
== GetId ==
 +
No input, returns an output u32.
 +
 
 +
= ISaveDataChunkExporter =
 +
This is "nn::fssrv::sf::ISaveDataChunkExporter".
 +
 
 +
This was added with [[5.0.0]].
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 48 || [[#OpenSaveDataChunkExporter]]
+
! Cmd || Name
 
|-
 
|-
| 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]]
+
| 0 || [[#Pull]]
 
|-
 
|-
| 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]]
+
| 16 || [6.0.0+] [[#GetRestRawDataSize]]
|-
+
|}
| 66 || [6.0.0+] [[#CancelExport]]
+
 
|-
+
== Pull ==
| 67 || [6.0.0+] [[#SuspendExport]]
+
Takes an input u64 and a type-0x6 output buffer, returns an output u64.
|-
+
 
| 70 || [6.0.0+] [[#GetKeySeed]]
+
== GetRestRawDataSize ==
|-
+
No input, returns an output u64.
| 71 || [6.0.0+] [[#GetInitialDataMac]]
+
 
 +
= ISaveDataChunkImporter =
 +
This is "nn::fssrv::sf::ISaveDataChunkImporter".
 +
 
 +
This was added with [[5.0.0]].
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 72 || [6.0.0+] [[#FinalizeExport]]
+
! Cmd || Name
 
|-
 
|-
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]]
+
| 0 || [[#Push]]
|-
  −
| 80 || [6.0.0+] [[#GetImportInitialDataAad]]
  −
|-
  −
| 81 || [6.0.0+] [[#SetExportInitialDataAad]]
  −
|-
  −
| 96 || [6.0.0+] [[#GetReportInfo]]
   
|}
 
|}
   −
== SetDivisionCount ==
+
== Push ==
Takes an input u32, no output.
+
Takes an input u64 and a type-0x5 input buffer, no output.
   −
== OpenSaveDataChunkExporter ==
+
= ISaveDataTransferProhibiter =
Takes an input u32, returns an [[#ISaveDataChunkExporter]].
+
This is "nn::fssrv::sf::ISaveDataTransferProhibiter".
   −
== FinalizeFullExport ==
+
This was added with [6.0.0+].
No input, returns two 0x10-byte output structs.
     −
== FinalizeDiffExport ==
+
This doesn't seem to handle any commands (?).
No input, returns an output 0x10-byte struct.
     −
== CancelExport ==
+
= IMultiCommitManager =
No input/output.
+
This is "nn::fssrv::sf::IMultiCommitManager".
   −
== SuspendExport ==
+
This was added with [6.0.0+].
No input/output, takes a type-0x6 output buffer.
     −
== GetKeySeed ==
+
{| class="wikitable" border="1"
No input, returns an output 0x10-byte struct.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 1 || [[#Add]]
 +
|-
 +
| 2 || [[#Commit]]
 +
|}
   −
== GetInitialDataMac ==
+
== Add ==
No input, returns an output 0x10-byte struct.
+
Takes an input [[#IFilesystem]], no output.
   −
== FinalizeExport ==
+
== Commit ==
 
No input/output.
 
No input/output.
   −
== SetExportInitialDataAad ==
+
= IWiper =
Takes an input 0x20-byte struct, no output.
+
This is "nn::fssrv::sf::IWiper".
   −
= ISaveDataDivisionImporter =
+
This was added with [[10.0.0]].
This is "nn::fssrv::sf::ISaveDataDivisionImporter".
  −
 
  −
This was added with [[5.0.0]].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,011: Line 1,783:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [6.0.0+] [[#GetSaveDataInfo]]
+
| 0 || [[#Startup|Startup]]
 
|-
 
|-
| 16 || [[#OpenSaveDataDiffChunkIterator]]
+
| 16 || [[#Process_2|Process]]
 +
|}
 +
 
 +
== Startup ==
 +
No input. Returns an u64.
 +
 
 +
== Process ==
 +
No input. Returns an u64.
 +
 
 +
= IStorageDeviceManager =
 +
This is "nn::fssrv::storage::sf::IStorageDeviceManager".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 32 || [[#InitializeImport]]
+
! Cmd || Name
 
|-
 
|-
| 33 || [[#FinalizeImport]]
+
| N/A || IsInserted
 
|-
 
|-
| 34 || [6.0.0+] [[#CancelImport]]
+
| N/A || IsHandleValid
 
|-
 
|-
| 35 || [6.0.0+] [[#GetImportContext]]
+
| N/A || OpenDetectionEvent
 
|-
 
|-
| 36 || [6.0.0+] [[#SuspendImport]]
+
| N/A || OpenOperator
 
|-
 
|-
| 37 || [11.0.0+] FinalizeImportWithoutSwap
+
| N/A || OpenDevice
 
|-
 
|-
| 48 || [[#OpenSaveDataChunkImporter]]
+
| N/A || OpenStorage
 
|-
 
|-
| 64 || [6.0.0+] [[#GetImportInitialDataAad]]
+
| N/A || Invalidate
|-
  −
| 80 || [6.0.0+] [[#GetReportInfo]]
   
|}
 
|}
   −
== GetSaveDataInfo ==
+
= IStorageDeviceOperator =
No input/output, takes a type-0x6 output buffer.
+
This is "nn::fssrv::storage::sf::IStorageDeviceOperator".
 
  −
== OpenSaveDataDiffChunkIterator ==
  −
No input, returns an [[#ISaveDataChunkIterator]].
  −
 
  −
== InitializeImport ==
  −
No input, returns an output u64.
  −
 
  −
== FinalizeImport ==
  −
No input/output.
  −
 
  −
== CancelImport ==
  −
No input/output.
  −
 
  −
== GetImportContext ==
  −
No input/output, takes a type-0x6 output buffer.
  −
 
  −
== SuspendImport ==
  −
No input/output.
  −
 
  −
== OpenSaveDataChunkImporter ==
  −
Takes an input u32, returns an [[#ISaveDataChunkImporter]].
  −
 
  −
== GetImportInitialDataAad ==
  −
No input, returns an output 0x20-byte struct.
  −
 
  −
== GetReportInfo ==
  −
No input, returns an output 0x20-byte struct.
  −
 
  −
= ISaveDataChunkIterator =
  −
This is "nn::fssrv::sf::ISaveDataChunkIterator".
  −
 
  −
This was added with [[5.0.0]].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,073: Line 1,823:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#Next]]
+
| N/A || Operate
 
|-
 
|-
| 1 || [[#IsEnd]]
+
| N/A || OperateIn
 +
|-
 +
| N/A || OperateOut
 +
|-
 +
| N/A || OperateOut2
 +
|-
 +
| N/A || OperateInOut
 
|-
 
|-
| 16 || [[#GetId]]
+
| N/A || OperateIn2Out
 
|}
 
|}
   −
== Next ==
+
= IStorageDevice =
No input/output.
+
This is "nn::fssrv::storage::sf::IStorageDevice".
 
  −
== IsEnd ==
  −
No input, returns an output u8.
  −
 
  −
== GetId ==
  −
No input, returns an output u32.
  −
 
  −
= ISaveDataChunkExporter =
  −
This is "nn::fssrv::sf::ISaveDataChunkExporter".
  −
 
  −
This was added with [[5.0.0]].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,098: Line 1,843:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#Pull]]
+
| N/A || GetHandle
 +
|-
 +
| N/A || IsHandleValid
 +
|-
 +
| N/A || OpenOperator
 
|-
 
|-
| 16 || [6.0.0+] [[#GetRestRawDataSize]]
+
| N/A || Read
|}
+
|-
 
+
| N/A || Write
== Pull ==
+
|-
Takes an input u64 and a type-0x6 output buffer, returns an output u64.
+
| N/A || Flush
 +
|-
 +
| N/A || SetSize
 +
|-
 +
| N/A || GetSize
 +
|-
 +
| N/A || OperateRange
 +
|}
   −
== GetRestRawDataSize ==
+
= FileSystemProxyType =
No input, returns an output u64.
+
This is "nn::fs::FileSystemProxyType".
 
  −
= ISaveDataChunkImporter =
  −
This is "nn::fssrv::sf::ISaveDataChunkImporter".
  −
 
  −
This was added with [[5.0.0]].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Value || Name
 +
|-
 +
| 0 || Code
 
|-
 
|-
| 0 || [[#Push]]
+
| 1 || Rom
|}
+
|-
 
+
| 2 || Logo
== Push ==
+
|-
Takes an input u64 and a type-0x5 input buffer, no output.
+
| 3 || Control
 
+
|-
= ISaveDataTransferProhibiter =
+
| 4 || Manual
This is "nn::fssrv::sf::ISaveDataTransferProhibiter".
+
|-
 +
| 5 || Meta
 +
|-
 +
| 6 || Data
 +
|-
 +
| 7 || Package
 +
|-
 +
| 8 || [4.0.0+] RegisteredUpdate
 +
|}
   −
This was added with [6.0.0+].
+
= ContentType =
 
+
This is "nn::fs::ContentType".
This doesn't seem to handle any commands (?).
  −
 
  −
= IMultiCommitManager =
  −
This is "nn::fssrv::sf::IMultiCommitManager".
  −
 
  −
This was added with [6.0.0+].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Value || Name
 
|-
 
|-
| 1 || [[#Add]]
+
| 0 || Meta
 
|-
 
|-
| 2 || [[#Commit]]
+
| 1 || Control
|}
+
|-
 
+
| 2 || Manual
== Add ==
+
|-
Takes an input [[#IFilesystem]], no output.
+
| 3 || Logo
 
+
|-
== Commit ==
+
| 4 || Data
No input/output.
+
|}
 
  −
= IWiper =
  −
This is "nn::fssrv::sf::IWiper".
     −
This was added with [[10.0.0]].
+
= ContentAttributes =
 +
This is "nn::fs::ContentAttributes".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Value || Name
 
|-
 
|-
| 0 || [[#Startup|Startup]]
+
| 0 || None
 
|-
 
|-
| 16 || [[#Process_2|Process]]
+
| 15 || All
 
|}
 
|}
   −
== Startup ==
+
= ContentStorageId =
No input. Returns an u64.
+
This is "nn::fs::ContentStorageId".
 
  −
== Process ==
  −
No input. Returns an u64.
  −
 
  −
= IStorageDeviceManager =
  −
This is "nn::fssrv::storage::sf::IStorageDeviceManager".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Value || Name
 
|-
 
|-
| N/A || IsInserted
+
| 0 || System
 
|-
 
|-
| N/A || IsHandleValid
+
| 1 || User
 
|-
 
|-
| N/A || OpenDetectionEvent
+
| 2 || SdCard
 
|-
 
|-
| N/A || OpenOperator
+
| 3 || [16.0.0+] System0
|-
  −
| N/A || OpenDevice
  −
|-
  −
| N/A || OpenStorage
  −
|-
  −
| N/A || Invalidate
   
|}
 
|}
   −
= IStorageDeviceOperator =
+
= SaveDataSpaceId =
This is "nn::fssrv::storage::sf::IStorageDeviceOperator".
+
This is "nn::fs::SaveDataSpaceId".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Value || Name
 +
|-
 +
| 0 || System
 
|-
 
|-
| N/A || Operate
+
| 1 || User
 
|-
 
|-
| N/A || OperateIn
+
| 2 || SdSystem
 
|-
 
|-
| N/A || OperateOut
+
| 3 || [3.0.0+] Temporary
 
|-
 
|-
| N/A || OperateOut2
+
| 4 || [4.0.0+] SdUser
 
|-
 
|-
| N/A || OperateInOut
+
| 100 || [3.0.0+] ProperSystem
 
|-
 
|-
| N/A || OperateIn2Out
+
| 101 || [3.0.0+] SafeMode
 
|}
 
|}
   −
= IStorageDevice =
+
Determines the storage where the savedata is stored.
This is "nn::fssrv::storage::sf::IStorageDevice".
+
 
 +
= SaveDataType =
 +
This is "nn::fs::SaveDataType".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Value || Name
 
|-
 
|-
| N/A || GetHandle
+
| 0 || System
 
|-
 
|-
| N/A || IsHandleValid
+
| 1 || Account
 
|-
 
|-
| N/A || OpenOperator
+
| 2 || Bcat
 
|-
 
|-
| N/A || Read
+
| 3 || Device
 
|-
 
|-
| N/A || Write
+
| 4 || [3.0.0+] Temporary
 
|-
 
|-
| N/A || Flush
+
| 5 || [3.0.0+] Cache
 
|-
 
|-
| N/A || SetSize
+
| 6 || [4.0.0+] SystemBcat
|-
  −
| N/A || GetSize
  −
|-
  −
| N/A || OperateRange
   
|}
 
|}
   −
= FileSystemProxyType =
+
= SaveDataRank =
This is "nn::fs::FileSystemProxyType".
+
This is "nn::fs::SaveDataRank".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,246: Line 1,987:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || Code
+
| 0 || Primary
 
|-
 
|-
| 1 || Rom
+
| 1 || Secondary
 +
|}
 +
 
 +
= SaveDataEnumerateOption =
 +
This is "nn::fs::SaveDataEnumerateOption".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 2 || Logo
+
! Value || Name
 
|-
 
|-
| 3 || Control
+
| 1 || AllRank
 +
|}
 +
 
 +
= SaveDataFlags =
 +
This is "nn::fs::SaveDataFlags".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 4 || Manual
+
! Value || Name
 
|-
 
|-
| 5 || Meta
+
| 1 || KeepAfterResettingSystemSaveData
 
|-
 
|-
| 6 || Data
+
| 2 || KeepAfterRefurbishment
 
|-
 
|-
| 7 || Package
+
| 4 || KeepAfterResettingSystemSaveDataWithoutUserSaveData
 
|-
 
|-
| 8 || [4.0.0+] RegisteredUpdate
+
| 8 || NeedsSecureDelete
 
|}
 
|}
   −
= ContentType =
+
= SaveDataMetaType =
This is "nn::fs::ContentType".
+
This is "nn::fs::SaveDataMetaType".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,272: Line 2,025:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || Meta
+
| 0 || None
 
|-
 
|-
| 1 || Control
+
| 1 || Thumbnail
 
|-
 
|-
| 2 || Manual
+
| 2 || ExtensionContext
 +
|}
 +
 
 +
= ImageDirectoryId =
 +
This is "nn::fs::ImageDirectoryId".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Name
 
|-
 
|-
| 3 || Logo
+
| 0 || Nand
 
|-
 
|-
| 4 || Data
+
| 1 || SdCard
 
|}
 
|}
   −
= ContentStorageId =
+
= CloudBackupWorkStorageId =
This is "nn::fs::ContentStorageId".
+
This is "nn::fs::CloudBackupWorkStorageId".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,290: Line 2,051:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || System
+
| 0 || Nand
 
|-
 
|-
| 1 || User
+
| 1 || SdCard
|-
  −
| 2 || SdCard
  −
|-
  −
| 3 || [16.0.0+] System0
   
|}
 
|}
   −
= SaveDataSpaceId =
+
= CustomStorageId =
This is "nn::fs::SaveDataSpaceId".
+
This is "nn::fs::CustomStorageId".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,308: Line 2,065:  
| 0 || System
 
| 0 || System
 
|-
 
|-
| 1 || User
+
| 1 || SdCard
|-
+
|}
| 2 || SdSystem
+
 
 +
= Priority =
 +
This is "nn::fs::Priority".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 3 || [3.0.0+] Temporary
+
! Value || Name
 
|-
 
|-
| 4 || [4.0.0+] SdUser
+
| 0 || Realtime
 
|-
 
|-
| 100 || [3.0.0+] ProperSystem
+
| 1 || Normal
 
|-
 
|-
| 101 || [3.0.0+] SafeMode
+
| 2 || Low
 
|}
 
|}
   −
Determines the storage where the savedata is stored.
+
= PriorityRaw =
 
+
This is "nn::fs::PriorityRaw".
= SaveDataType =
  −
This is "nn::fs::SaveDataType".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,330: Line 2,089:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || System
+
| 0 || Realtime
 
|-
 
|-
| 1 || Account
+
| 1 || Normal
 
|-
 
|-
| 2 || Bcat
+
| 2 || Low
 
|-
 
|-
| 3 || Device
+
| 3 || Background
|-
  −
| 4 || [3.0.0+] Temporary
  −
|-
  −
| 5 || [3.0.0+] Cache
  −
|-
  −
| 6 || [4.0.0+] SystemBcat
   
|}
 
|}
   −
= SaveDataRank =
+
= AbortSpecifier =
This is "nn::fs::SaveDataRank".
+
This is "nn::fs::AbortSpecifier".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,352: Line 2,105:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || Primary
+
| 0 || Default
 
|-
 
|-
| 1 || Secondary
+
| 1 || Abort
|}
  −
 
  −
= SaveDataEnumerateOption =
  −
This is "nn::fs::SaveDataEnumerateOption".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Value || Name
+
| 2 || ReturnResult
|-
  −
| 1 || AllRank
   
|}
 
|}
   −
= SaveDataFlags =
+
= OperationId =
This is "nn::fs::SaveDataFlags".
+
This is "nn::fs::OperationId".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,374: Line 2,119:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 1 || KeepAfterResettingSystemSaveData
+
| 0 || Clear
 
|-
 
|-
| 2 || KeepAfterRefurbishment
+
| 1 || ClearSignature
 
|-
 
|-
| 4 || KeepAfterResettingSystemSaveDataWithoutUserSaveData
+
| 2 || InvalidateCache
 
|-
 
|-
| 8 || NeedsSecureDelete
+
| 3 || QueryRange
 
|}
 
|}
   −
= SaveDataMetaType =
+
= MountHostOption =
This is "nn::fs::SaveDataMetaType".
+
This is "nn::fs::MountHostOption".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,390: Line 2,135:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || None
+
| 1 || PseudoCaseSensitive
|-
  −
| 1 || Thumbnail
  −
|-
  −
| 2 || ExtensionContext
   
|}
 
|}
   −
= ImageDirectoryId =
+
= BisPartitionId =
This is "nn::fs::ImageDirectoryId".
+
This is "nn::fs::BisPartitionId".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,404: Line 2,145:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || Nand
+
| 0 || BootPartition1Root
 
|-
 
|-
| 1 || SdCard
+
| 10 || BootPartition2Root
|}
  −
 
  −
= CloudBackupWorkStorageId =
  −
This is "nn::fs::CloudBackupWorkStorageId".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Value || Name
+
| 20 || UserDataRoot
 
|-
 
|-
| 0 || Nand
+
| 21 || BootConfigAndPackage2Part1
 
|-
 
|-
| 1 || SdCard
+
| 22 || BootConfigAndPackage2Part2
|}
  −
 
  −
= CustomStorageId =
  −
This is "nn::fs::CustomStorageId".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Value || Name
+
| 23 || BootConfigAndPackage2Part3
 
|-
 
|-
| 0 || System
+
| 24 || BootConfigAndPackage2Part4
 +
|-
 +
| 25 || BootConfigAndPackage2Part5
 
|-
 
|-
| 1 || SdCard
+
| 26 || BootConfigAndPackage2Part6
|}
  −
 
  −
= Priority =
  −
This is "nn::fs::Priority".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Value || Name
+
| 27 || CalibrationBinary
 
|-
 
|-
| 0 || Realtime
+
| 28 || CalibrationFile
 
|-
 
|-
| 1 || Normal
+
| 29 || SafeMode
 
|-
 
|-
| 2 || Low
+
| 30 || User
|}
  −
 
  −
= PriorityRaw =
  −
This is "nn::fs::PriorityRaw".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Value || Name
+
| 31 || System
 
|-
 
|-
| 0 || Realtime
+
| 32 || SystemProperEncryption
 
|-
 
|-
| 1 || Normal
+
| 33 || SystemProperPartition
 
|-
 
|-
| 2 || Low
+
| 34 || SignedSystemPartitionOnSafeMode
 
|-
 
|-
| 3 || Background
+
| 35 || [16.0.0+] DeviceTreeBlob
 +
|-
 +
| 36 || [16.0.0+] System0
 
|}
 
|}
   −
= AbortSpecifier =
+
= SdCardSpeedMode =
This is "nn::fs::AbortSpecifier".
+
This is "nn::fs::SdCardSpeedMode".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,470: Line 2,191:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || Default
+
| 0 || Identification
 +
|-
 +
| 1 || DefaultSpeed
 +
|-
 +
| 2 || HighSpeed
 +
|-
 +
| 3 || Sdr12
 +
|-
 +
| 4 || Sdr25
 +
|-
 +
| 5 || Sdr50
 +
|-
 +
| 6 || Sdr104
 
|-
 
|-
| 1 || Abort
+
| 7 || Ddr50
 
|-
 
|-
| 2 || ReturnResult
+
| 8 || Unknown
 
|}
 
|}
   −
= OperationId =
+
= MmcSpeedMode =
This is "nn::fs::OperationId".
+
This is "nn::fs::MmcSpeedMode".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,484: Line 2,217:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 0 || Clear
+
| 0 || Identification
 
|-
 
|-
| 1 || ClearSignature
+
| 1 || LegacySpeed
 
|-
 
|-
| 2 || InvalidateCache
+
| 2 || HighSpeed
 +
|-
 +
| 3 || Hs200
 +
|-
 +
| 4 || Hs400
 
|-
 
|-
| 3 || QueryRange
+
| 5 || Unknown
 
|}
 
|}
   −
= MountHostOption =
+
= MmcPartition =
This is "nn::fs::MountHostOption".
+
This is "nn::fs::MmcPartition".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,500: Line 2,237:  
! Value || Name
 
! Value || Name
 
|-
 
|-
| 1 || PseudoCaseSensitive
+
| 0 || UserData
 +
|-
 +
| 1 || BootPartition1
 +
|-
 +
| 2 || BootPartition2
 
|}
 
|}
   −
= BisPartitionId =
+
= MemoryReportInfo =
This is "nn::fs::BisPartitionId".
+
This is "nn::fs::MemoryReportInfo".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value || Name
+
! Offset
 +
! Size
 +
! Description
 
|-
 
|-
| 0 || BootPartition1Root
+
| 0x0
 +
| 0x8
 +
| PooledBufferFreeSizePeak
 
|-
 
|-
| 10 || BootPartition2Root
+
| 0x8
 +
| 0x8
 +
| PooledBufferRetriedCount
 
|-
 
|-
| 20 || UserDataRoot
+
| 0x10
 +
| 0x8
 +
| PooledBufferReduceAllocationCount
 
|-
 
|-
| 21 || BootConfigAndPackage2Part1
+
| 0x18
 +
| 0x8
 +
| BufferManagerFreeSizePeak
 
|-
 
|-
| 22 || BootConfigAndPackage2Part2
+
| 0x20
 +
| 0x8
 +
| BufferManagerRetriedCount
 
|-
 
|-
| 23 || BootConfigAndPackage2Part3
+
| 0x28
 +
| 0x8
 +
| ExpHeapFreeSizePeak
 
|-
 
|-
| 24 || BootConfigAndPackage2Part4
+
| 0x30
 +
| 0x8
 +
| BufferPoolFreeSizePeak
 
|-
 
|-
| 25 || BootConfigAndPackage2Part5
+
| 0x38
 +
| 0x8
 +
| PatrolReadAllocateBufferSuccessCount
 
|-
 
|-
| 26 || BootConfigAndPackage2Part6
+
| 0x40
 +
| 0x8
 +
| PatrolReadAllocateBufferFailureCount
 
|-
 
|-
| 27 || CalibrationBinary
+
| 0x48
 +
| 0x8
 +
| BufferManagerTotalAllocatableSizePeak
 
|-
 
|-
| 28 || CalibrationFile
+
| 0x50
 +
| 0x8
 +
| BufferPoolAllocateSizeMax
 
|-
 
|-
| 29 || SafeMode
+
| 0x58
 +
| 0x8
 +
| PooledBufferFailedIdealAllocationCountOnAsyncAccess
 
|-
 
|-
| 30 || User
+
| 0x60
|-
+
| 0x20
| 31 || System
+
| Reserved
|-
  −
| 32 || SystemProperEncryption
  −
|-
  −
| 33 || SystemProperPartition
  −
|-
  −
| 34 || SignedSystemPartitionOnSafeMode
  −
|-
  −
| 35 || [16.0.0+] DeviceTreeBlob
  −
|-
  −
| 36 || [16.0.0+] System0
   
|}
 
|}
   −
= SdCardSpeedMode =
+
= StorageErrorInfo =
This is "nn::fs::SdCardSpeedMode".
+
This is "nn::fs::StorageErrorInfo".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value || Name
+
! Offset
 +
! Size
 +
! Description
 
|-
 
|-
| 0 || Identification
+
| 0x0
 +
| 0x4
 +
| NumActivationFailures
 
|-
 
|-
| 1 || DefaultSpeed
+
| 0x4
 +
| 0x4
 +
| NumActivationErrorCorrections
 
|-
 
|-
| 2 || HighSpeed
+
| 0x8
 +
| 0x4
 +
| NumReadWriteFailures
 
|-
 
|-
| 3 || Sdr12
+
| 0xC
|-
+
| 0x4
| 4 || Sdr25
+
| NumReadWriteErrorCorrections
|-
  −
| 5 || Sdr50
  −
|-
  −
| 6 || Sdr104
  −
|-
  −
| 7 || Ddr50
  −
|-
  −
| 8 || Unknown
   
|}
 
|}
   −
= MmcSpeedMode =
+
= GameCardErrorInfo =
This is "nn::fs::MmcSpeedMode".
+
This is "nn::fs::GameCardErrorInfo".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value || Name
+
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x2
 +
| GameCardCrcErrorCount
 +
|-
 +
| 0x2
 +
| 0x2
 +
| Reserved
 
|-
 
|-
| 0 || Identification
+
| 0x4
 +
| 0x2
 +
| AsicCrcErrorCount
 
|-
 
|-
| 1 || LegacySpeed
+
| 0x6
 +
| 0x2
 +
| Reserved
 
|-
 
|-
| 2 || HighSpeed
+
| 0x8
 +
| 0x2
 +
| RefreshCount
 
|-
 
|-
| 3 || Hs200
+
| 0xA
 +
| 0x2
 +
| Reserved
 
|-
 
|-
| 4 || Hs400
+
| 0xC
 +
| 0x2
 +
| ReadRetryCount
 
|-
 
|-
| 5 || Unknown
+
| 0xE
 +
| 0x2
 +
| TimeoutRetryErrorCount
 
|}
 
|}
   −
= MmcPartition =
+
= GameCardErrorReportInfo =
This is "nn::fs::MmcPartition".
+
This is "nn::fs::GameCardErrorReportInfo".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value || Name
+
! Offset
 +
! Size
 +
! Description
 
|-
 
|-
| 0 || UserData
+
| 0x0
 +
| 0x10
 +
| [[#GameCardErrorInfo|ErrorInfo]]
 +
|-
 +
| 0x10
 +
| 0x2
 +
| AsicReinitializeFailureDetail
 
|-
 
|-
| 1 || BootPartition1
+
| 0x12
 +
| 0x2
 +
| InsertionCount
 
|-
 
|-
| 2 || BootPartition2
+
| 0x14
|}
+
| 0x2
 
+
| RemovalCount
= StorageErrorInfo =
  −
This is "nn::fs::StorageErrorInfo".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset
+
| 0x16
! Size
+
| 0x2
! Description
+
| AsicReinitializeCount
 
|-
 
|-
| 0x0
+
| 0x18
 
| 0x4
 
| 0x4
| NumActivationFailures
+
| AsicInitializeCount
 +
|-
 +
| 0x1C
 +
| 0x2
 +
| AsicReinitializeFailureCount
 +
|-
 +
| 0x1E
 +
| 0x2
 +
| AwakenFailureCount
 +
|-
 +
| 0x20
 +
| 0x2
 +
| Reserved
 +
|-
 +
| 0x22
 +
| 0x2
 +
| RefreshCount
 
|-
 
|-
 +
| 0x24
 
| 0x4
 
| 0x4
 +
| LastReadErrorPageAddress
 +
|-
 +
| 0x28
 
| 0x4
 
| 0x4
| NumActivationErrorCorrections
+
| LastReadErrorPageCount
 
|-
 
|-
| 0x8
+
| 0x2C
 
| 0x4
 
| 0x4
| NumReadWriteFailures
+
| AwakenCount
 
|-
 
|-
| 0xC
+
| 0x30
 
| 0x4
 
| 0x4
| NumReadWriteErrorCorrections
+
| ReadCountFromInsert
|}
  −
 
  −
= GameCardErrorInfo =
  −
This is "nn::fs::GameCardErrorInfo".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset
+
| 0x34
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x4
  −
| GameCardCrcErrorNum
  −
|-
  −
| 0x4
   
| 0x4
 
| 0x4
| AsicCrcErrorNum
+
| ReadCountFromAwaken
 
|-
 
|-
 +
| 0x38
 
| 0x8
 
| 0x8
| 0x4
+
| Reserved
| RefreshNum
  −
|-
  −
| 0xC
  −
| 0x4
  −
| RetryLimitOutNum
   
|}
 
|}
  −
= GameCardErrorReportInfo =
  −
This is "nn::fs::GameCardErrorReportInfo". This is a 0x40-byte struct.
      
= GameCardHandle =
 
= GameCardHandle =
Line 2,714: Line 2,498:  
| 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag
 
| 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag
 
|}
 
|}
 +
 +
= GameCardAttribute2 =
 +
This is "nn::fs::GameCardAttribute2".
    
= GameCardSize =
 
= GameCardSize =
Line 2,781: Line 2,568:  
|}
 
|}
   −
= CardId1 =
+
= GameCardIdSet =
This is "nn::gc::detail::CardId1".
+
This is "nn::gc::GameCardIdSet".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,791: Line 2,578:  
|-
 
|-
 
| 0x0
 
| 0x0
| 0x1
+
| 0x4
| MakerCode
+
| [[#CardId1|Id1]]
 
|-
 
|-
| 0x1
+
| 0x4
| 0x1
+
| 0x4
| MemoryCapacity
+
| [[#CardId2|Id2]]
 +
|-
 +
| 0x8
 +
| 0x4
 +
| [[#CardId3|Id3]]
 +
|}
 +
 
 +
= CardId1 =
 +
This is "nn::gc::detail::CardId1".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| [[#MakerCodeForCardId1|MakerCode]]
 +
|-
 +
| 0x1
 +
| 0x1
 +
| [[#MemoryCapacity|MemoryCapacity]]
 
|-
 
|-
 
| 0x2
 
| 0x2
Line 2,821: Line 2,630:  
|-
 
|-
 
| 0x1
 
| 0x1
| 0x1
+
| 0x1
| CardType
+
| CardType
|-
+
|-
| 0x2
+
| 0x2
| 0x2
+
| 0x2
| Reserved
+
| Reserved
|}
+
|}
 
+
 
= CardId3 =
+
= CardId3 =
This is "nn::gc::detail::CardId3".
+
This is "nn::gc::detail::CardId3".
 
+
 
{| class="wikitable" border="1"
+
{| class="wikitable" border="1"
|-
+
|-
! Offset
+
! Offset
! Size
+
! Size
! Description
+
! Description
|-
+
|-
| 0x0
+
| 0x0
| 0x4
+
| 0x4
| Reserved
+
| Reserved
|}
+
|}
 +
 
 +
= MakerCodeForCardId1 =
 +
This is "nn::gc::detail::MakerCodeForCardId1".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Name
 +
|-
 +
| 0x36 || Unknown
 +
|-
 +
| 0xC2 || MegaChips
 +
|-
 +
| 0xAE || Lapis
 +
|}
 +
 
 +
= MemoryCapacity =
 +
This is "nn::gc::detail::MemoryCapacity".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Name
 +
|-
 +
| 0xFA || 1GB
 +
|-
 +
| 0xF8 || 2GB
 +
|-
 +
| 0xF0 || 4GB
 +
|-
 +
| 0xE0 || 8GB
 +
|-
 +
| 0xE1 || 16GB
 +
|-
 +
| 0xE2 || 32GB
 +
|}
 +
 
 +
= RmaInformation =
 +
This is "nn::gc::RmaInformation". This is a 0x200-byte struct.
   −
= GameCardIdSet =
+
= GameCardCardHeader =
This is "nn::gc::GameCardIdSet".
+
This is a 0x600-byte struct.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,853: Line 2,699:  
|-
 
|-
 
| 0x0
 
| 0x0
| 0x4
+
| 0x100
| [[#CardId1|Id1]]
+
| [[XCI#CardHeader|Signature]]
 
|-
 
|-
| 0x4
+
| 0x100
| 0x4
+
| 0x100
| [[#CardId2|Id2]]
+
| [[Lotus3#GetCardHeader|Header]]
 
|-
 
|-
| 0x8
+
| 0x200
| 0x4
+
| 0x400
| [[#CardId3|Id3]]
+
| [[XCI#NewCardHeaderCertArea|NewCardHeaderCertArea]]
 
|}
 
|}
  −
= RmaInformation =
  −
This is "nn::gc::RmaInformation". This is a 0x200-byte struct.
      
= SimulatingDeviceType =
 
= SimulatingDeviceType =
Line 2,940: Line 2,783:  
|}
 
|}
   −
= ContentPath =
+
= FspPath =
These are the 0x300 paths to NCA files for the various filesystems FS can access, beginning with @. They're passed via X descriptors, and returned via various [[Location Resolver services|ncm/lr]] commands.
+
This is "nn::fssrv::sf::FspPath". This is a 0x301-byte string.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"

Navigation menu