Line 4: |
Line 4: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Arguments || Notes | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || OpenCodeFileSystem || u64 TitleId + X descriptor [[#ContentPath]] || Returns an [[#IFileSystem]]. | + | | 0 || [[#OpenCodeFileSystem]] |
| |- | | |- |
− | | 1 || IsArchivedProgram || u64 ProcessId || Returns a bool (1 if code is mounted). | + | | 1 || [[#IsArchivedProgram]] |
| |- | | |- |
− | | 2 || [4.0.0+] SetCurrentProcess || PID descriptor || | + | | 2 || [4.0.0+] [[#SetCurrentProcess]] |
| |} | | |} |
| + | |
| + | == OpenCodeFileSystem == |
| + | Takes an u64 TitleId and a [[#ContentPath]]. Returns an [[#IFileSystem]]. |
| + | |
| + | == IsArchivedProgram == |
| + | Takes an u64 ProcessId. Returns a bool (1 if the process id's [[#ContentPath]] ends in ".nca"). |
| + | |
| + | == SetCurrentProcess == |
| + | Takes a PID descriptor. |
| | | |
| = fsp-pr = | | = fsp-pr = |
Line 18: |
Line 27: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#RegisterProgram]] || | + | | 0 || [[#RegisterProgram]] |
| |- | | |- |
− | | 1 || [[#UnregisterProgram]] || | + | | 1 || [[#UnregisterProgram]] |
| |- | | |- |
− | | 2 || [4.0.0+] SetCurrentProcess || | + | | 2 || [4.0.0+] [[#SetCurrentProcess]] |
| |- | | |- |
− | | 256 || [[#SetEnabledProgramVerification]] || | + | | 256 || [[#SetEnabledProgramVerification]] |
| |} | | |} |
| | | |
Line 59: |
Line 68: |
| | 8 || [2.0.0+] [[#OpenFileSystemWithId]] | | | 8 || [2.0.0+] [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 9 || [3.0.0+] OpenDataFileSystemByApplicationId | + | | 9 || [3.0.0+] OpenDataFileSystemByProgramId |
| |- | | |- |
| | 11 || [[#OpenBisFileSystem]] | | | 11 || [[#OpenBisFileSystem]] |
Line 99: |
Line 108: |
| | 34 || [5.0.0+] GetCacheStorageSize | | | 34 || [5.0.0+] GetCacheStorageSize |
| |- | | |- |
− | | 35 || [6.0.0+] CreateSaveDataFileSystemByHashSalt (Unofficial name, takes a total of 0xB0-bytes of input, no output) | + | | 35 || [6.0.0+] [[#CreateSaveDataFileSystemWithHashSalt]] |
| + | |- |
| + | | 36 || [9.0.0+] OpenHostFileSystemWithOption |
| |- | | |- |
| | 51 || [[#OpenSaveDataFileSystem]] | | | 51 || [[#OpenSaveDataFileSystem]] |
Line 107: |
Line 118: |
| | 53 || [2.0.0+] OpenReadOnlySaveDataFileSystem | | | 53 || [2.0.0+] OpenReadOnlySaveDataFileSystem |
| |- | | |- |
− | | 57 || [3.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataSpaceId | + | | 57 || [3.0.0+] [[#ReadSaveDataFileSystemExtraDataBySaveDataSpaceId]] |
| |- | | |- |
− | | 58 || ReadSaveDataFileSystemExtraData | + | | 58 || [[#ReadSaveDataFileSystemExtraData]] |
| |- | | |- |
| | 59 || [2.0.0+] WriteSaveDataFileSystemExtraData | | | 59 || [2.0.0+] WriteSaveDataFileSystemExtraData |
Line 117: |
Line 128: |
| | 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]] | | | 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]] |
| |- | | |- |
− | | 62 || [5.0.0+] OpenCacheStorageList | + | | 62 || [5.0.0+] OpenSaveDataInfoReaderOnlyCacheStorage |
| |- | | |- |
| | 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem | | | 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem |
Line 123: |
Line 134: |
| | 65 || [5.0.0+] UpdateSaveDataMacForDebug | | | 65 || [5.0.0+] UpdateSaveDataMacForDebug |
| |- | | |- |
− | | 66 || [5.0.0+] WriteSaveDataFileSystemExtraData2 | + | | 66 || [5.0.0+] WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | 67 || [6.0.0+] FindSaveDataWithFilter (Takes a total of 0x50-bytes of input, returns 8-bytes of output, and a type-0x6 output buffer) | + | | 67 || [6.0.0+] [[#FindSaveDataWithFilter]] |
| |- | | |- |
− | | 68 || [6.0.0+] OpenSaveDataInfoReaderBySaveDataFilter (Unofficial name, takes a total of 0x50-bytes of input, returns an #ISaveDataInfoReader) | + | | 68 || [6.0.0+] [[#OpenSaveDataInfoReaderWithFilter]] |
| + | |- |
| + | | 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute |
| + | |- |
| + | | 70 || [8.0.0+] WriteSaveDataFileSystemExtraDataBySaveDataAttribute |
| |- | | |- |
| | 80 || OpenSaveDataMetaFile | | | 80 || OpenSaveDataMetaFile |
| |- | | |- |
− | | 81 || [4.0.0+] OpenSaveDataTransferManager (No input, returns an [[#ISaveDataTransferManager]]) | + | | 81 || [4.0.0+] [[#OpenSaveDataTransferManager]] |
| + | |- |
| + | | 82 || [5.0.0+] [[#OpenSaveDataTransferManagerVersion2]] |
| |- | | |- |
− | | 82 || [5.0.0+] OpenSaveDataTransferManagerVersion2 (No input, returns an [[#ISaveDataTransferManagerWithDivision]]) | + | | 83 || [6.0.0+] [[#OpenSaveDataTransferProhibiter]] |
| |- | | |- |
− | | 83 || [6.0.0+] OpenSaveDataTransferProhibiterForCloudBackUp (Takes an input u64, returns an [[#ISaveDataTransferProhibiter]]) | + | | 84 || [6.0.0+] [[#ListAccessibleSaveDataOwnerId]] |
| |- | | |- |
− | | 84 || [6.0.0+] ListApplicationAccessibleSaveDataOwnerId (Takes a total of 0x10-bytes of input, returns 4-bytes of output, and a type-0x6 output buffer) | + | | 85 || [9.0.0+] [[#OpenSaveDataTransferManagerForSaveDataRepair]] |
| |- | | |- |
| | 100 || OpenImageDirectoryFileSystem | | | 100 || OpenImageDirectoryFileSystem |
Line 143: |
Line 160: |
| | 110 || [[#OpenContentStorageFileSystem]] | | | 110 || [[#OpenContentStorageFileSystem]] |
| |- | | |- |
− | | 120 || [6.0.0+] OpenCloudBackupWorkStorageFileSystem (Takes 4-bytes of input, returns an #IFileSystem) | + | | 120 || [6.0.0+] [[#OpenCloudBackupWorkStorageFileSystem]] |
| + | |- |
| + | | 130 || [7.0.0+] [[#OpenCustomStorageFileSystem]] |
| |- | | |- |
| | 200 || OpenDataStorageByCurrentProcess | | | 200 || OpenDataStorageByCurrentProcess |
Line 152: |
Line 171: |
| |- | | |- |
| | 203 || OpenPatchDataStorageByCurrentProcess | | | 203 || OpenPatchDataStorageByCurrentProcess |
| + | |- |
| + | | 204 || [7.0.0+] [[#OpenDataFileSystemWithProgramIndex]] |
| + | |- |
| + | | 205 || [7.0.0+] [[#OpenDataStorageWithProgramIndex]] |
| |- | | |- |
| | 400 || [[#OpenDeviceOperator]] | | | 400 || [[#OpenDeviceOperator]] |
Line 163: |
Line 186: |
| | 511 || [5.0.0+] NotifySystemDataUpdateEvent | | | 511 || [5.0.0+] NotifySystemDataUpdateEvent |
| |- | | |- |
− | | 520 || [6.0.0+] SimulateGameCardDetectionEvent (Takes a total of 0xC-bytes of input, no output) | + | | 520 || [6.0.0+] [[#SimulateDeviceDetectionEvent]] |
| |- | | |- |
| | 600 || [1.0.0-3.0.2] SetCurrentPosixTime | | | 600 || [1.0.0-3.0.2] SetCurrentPosixTime |
Line 198: |
Line 221: |
| |- | | |- |
| | 616 || [6.0.0+] [[#GetSaveDataCommitId]] | | | 616 || [6.0.0+] [[#GetSaveDataCommitId]] |
| + | |- |
| + | | 617 || [7.0.0+] UnregisterExternalKey |
| |- | | |- |
| | 620 || [2.0.0+] [[#SetSdCardEncryptionSeed]] | | | 620 || [2.0.0+] [[#SetSdCardEncryptionSeed]] |
Line 205: |
Line 230: |
| | 631 || [4.0.0+] IsSdCardAccessible | | | 631 || [4.0.0+] IsSdCardAccessible |
| |- | | |- |
− | | 640 || [4.0.0+] IsSignedSystemPartitionOnSdCardValid | + | | 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid |
| |- | | |- |
− | | 700 || [5.0.0+] OpenAccessFailureResolver | + | | 700 || [5.0.0+] [[#OpenAccessFailureDetectionEventNotifier]] |
| |- | | |- |
| | 701 || [5.0.0+] GetAccessFailureDetectionEvent | | | 701 || [5.0.0+] GetAccessFailureDetectionEvent |
Line 217: |
Line 242: |
| | 720 || [5.0.0+] AbandonAccessFailure | | | 720 || [5.0.0+] AbandonAccessFailure |
| |- | | |- |
− | | 800 || [2.0.0+] GetAndClearFileSystemProxyErrorInfo | + | | 800 || [2.0.0+] GetAndClearErrorInfo |
| + | |- |
| + | | 810 || [7.0.0+] RegisterProgramIndexMapInfo |
| |- | | |- |
| | 1000 || SetBisRootForHost | | | 1000 || SetBisRootForHost |
| |- | | |- |
− | | 1001 || SetSaveDataSize | + | | 1001 || [[#SetSaveDataSize]] |
| |- | | |- |
− | | 1002 || SetSaveDataRootPath | + | | 1002 || [[#SetSaveDataRootPath]] |
| |- | | |- |
| | 1003 || DisableAutoSaveDataCreation | | | 1003 || DisableAutoSaveDataCreation |
Line 239: |
Line 266: |
| | 1009 || [4.0.0+] GetAndClearMemoryReportInfo | | | 1009 || [4.0.0+] GetAndClearMemoryReportInfo |
| |- | | |- |
− | | 1010 || [5.1.0+] SetDataStorageRedirectTarget | + | | 1010 || [5.1.0-6.2.0] SetDataStorageRedirectTarget |
| + | |- |
| + | | 1011 || [7.0.0+] [[#GetProgramIndexForAccessLog]] |
| + | |- |
| + | | 1012 || [9.0.0+] GetFsStackUsage |
| + | |- |
| + | | 1013 || [9.0.0+] UnsetSaveDataRootPath |
| |- | | |- |
| | 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey | | | 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey |
| |- | | |- |
− | | 1110 || [6.0.0+] CorruptSaveDataFileSystemBySaveDataSpaceId2 | + | | 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset |
| |- | | |- |
− | | 1200 || [6.0.0+] OpenMultiCommitManager (No input, returns an output #IMultiCommitManager) | + | | 1200 || [6.0.0+] [[#OpenMultiCommitManager]] |
| |} | | |} |
| | | |
Line 282: |
Line 315: |
| | 0x9 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanMountCloudBackupWorkStorage || 3 || OpenCloudBackupWorkStorageFileSystem | | | 0x9 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanMountCloudBackupWorkStorage || 3 || OpenCloudBackupWorkStorageFileSystem |
| |- | | |- |
− | | 0xA || 0x8000000000000084<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanMountBisCalibrationFile || 3 || [[#OpenBisFileSystem]] | + | | 0xA || 0x8000000000000000<br/>([7.0.0-7.0.1] 0x4000000000000000)<br/>([6.0.0-6.2.0] 0x8000000000000084)<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanMountCustomStorage || 3 || OpenCustomStorageFileSystem |
| |- | | |- |
− | | 0xB || 0x8000000000000080<br/>([1.0.0-5.1.0] 0x8000000000008080) || CanMountBisSafeMode || 3 || [[#OpenBisFileSystem]] | + | | 0xB || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000008080) || CanMountBisCalibrationFile || 3 || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xC || 0x8000000000008080 || CanMountBisUser || 3 || [[#OpenBisFileSystem]] | + | | 0xC || 0x8000000000000080<br/>([1.0.0-6.2.0] 0x8000000000008080) || CanMountBisSafeMode || 3 || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xD || 0x8000000000008080<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanMountBisSystem || 3 || [[#OpenBisFileSystem]] | + | | 0xD || 0x8000000000008080<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanMountBisUser || 3 || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xE || 0x8000000000000080<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanMountBisSystemProperEncryption || 3 || [[#OpenBisFileSystem]] | + | | 0xE || 0x8000000000008080<br/>([3.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanMountBisSystem || 3 || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xF || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000000010) || CanMountBisSystemProperPartition || 3 || [[#OpenBisFileSystem]] | + | | 0xF || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000000010) || CanMountBisSystemProperEncryption || 3 || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0x10 || 0xC000000000200000<br/>([3.0.0-5.1.0] 0x8000000000000010)<br/>([1.0.0-2.3.0] 0x8000000000040020) || CanMountSdCard || 3 || [[#OpenSdCardFileSystem]] | + | | 0x10 || 0x8000000000000080<br/>([6.0.0-6.2.0] 0xC000000000200000<br/>([3.0.0-5.1.0] 0x8000000000000010)<br/>([1.0.0-2.3.0] 0x8000000000040020) || CanMountBisSystemProperPartition || 3 || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0x11 || 0x8000000000000010<br/>([3.0.0-5.1.0] 0x8000000000040020)<br/>([1.0.0-2.3.0] 0x8000000000000028) || CanMountGameCard || 3 || [[#OpenGameCardFileSystem]] | + | | 0x11 || 0xC000000000200000<br/>([6.0.0-6.2.0] 0x8000000000000010)<br/>([3.0.0-5.1.0] 0x8000000000040020)<br/>([1.0.0-2.3.0] 0x8000000000000028) || CanMountSdCard || 3 || [[#OpenSdCardFileSystem]] |
| |- | | |- |
− | | 0x12 || 0x8000000000040020<br/>([3.0.0-5.1.0] 0x8000000000000028)<br/>([1.0.0-2.3.0] 0x8000000000000020) || CanMountDeviceSaveData || 3 || [[#OpenSaveDataFileSystem]] | + | | 0x12 || 0x8000000000000010<br/>([6.0.0-6.2.0] 0x8000000000040020)<br/>([3.0.0-5.1.0] 0x8000000000000028)<br/>([1.0.0-2.3.0] 0x8000000000000020) || CanMountGameCard || 3 || [[#OpenGameCardFileSystem]] |
| |- | | |- |
− | | 0x13 || 0x8000000000000028<br/>([1.0.0-5.1.0] 0x8000000000000020) || CanMountSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | + | | 0x13 || 0x8000000000040020<br/>([6.0.0-6.2.0] 0x8000000000000028)<br/>([1.0.0-5.1.0] 0x8000000000000020) || CanMountDeviceSaveData || 3 || [[#OpenSaveDataFileSystem]] |
| |- | | |- |
− | | 0x14 || 0x8000000000000020<br/>([1.0.0-2.3.0] 0x8000000000010082) || CanMountOthersSaveData || 3 || [[#OpenSaveDataFileSystem]] | + | | 0x14 || 0x8000000000000028<br/>([3.0.0-6.2.0] 0x8000000000000020)<br/>([1.0.0-2.3.0] 0x8000000000010082) || CanMountSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] |
| |- | | |- |
− | | 0x15 || 0x8000000000000020<br/>([3.0.0-5.1.0] 0x8000000000010082)<br/>([1.0.0-2.3.0] 0x8000000000010080) || CanMountOthersSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | + | | 0x15 || 0x8000000000000020<br/>([3.0.0-5.1.0] 0x8000000000010082)<br/>([1.0.0-2.3.0] 0x8000000000010080) || CanMountOthersSaveData || 3 || [[#OpenSaveDataFileSystem]] |
| |- | | |- |
− | | 0x16 || 0x8000000000010082<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanOpenBisPartitionBootPartition1Root || 3 || [[#OpenBisStorage]] | + | | 0x16 || 0x8000000000000020<br/>([6.0.0-6.2.0] 0x8000000000010082)<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanMountOthersSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] |
| |- | | |- |
− | | 0x17 || 0x8000000000010080<br/>([3.0.0-5.1.0] 0x8000000000000080)<br/>([1.0.0-2.3.0] 0x8000000000010080) || CanOpenBisPartitionBootPartition2Root || 3 || [[#OpenBisStorage]] | + | | 0x17 || 0x8000000000010082<br/>([6.0.0-6.2.0] 0x8000000000010080)<br/>([3.0.0-5.1.0] 0x8000000000000080)<br/>([1.0.0-2.3.0] 0x8000000000010080) || CanOpenBisPartitionBootPartition1Root || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x18 || 0x8000000000000080<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanOpenBisPartitionUserDataRoot || 3 || [[#OpenBisStorage]] | + | | 0x18 || 0x8000000000010080<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanOpenBisPartitionBootPartition2Root || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x19 || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 3 || [[#OpenBisStorage]] | + | | 0x19 || 0x8000000000000080<br/>([6.0.0-6.2.0] 0x8000000000010080) || CanOpenBisPartitionUserDataRoot || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1A || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part2 || 3 || [[#OpenBisStorage]] | + | | 0x1A || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1B || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part3 || 3 || [[#OpenBisStorage]] | + | | 0x1B || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part2 || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1C || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part4 || 3 || [[#OpenBisStorage]] | + | | 0x1C || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part3 || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1D || 0x8000000000010080<br/>([1.0.0-2.3.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part5 || 3 || [[#OpenBisStorage]] | + | | 0x1D || 0x8000000000010080<br/>([1.0.0-2.3.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part4 || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1E || 0x8000000000010080<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part6 || 3 || [[#OpenBisStorage]] | + | | 0x1E || 0x8000000000010080<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part5 || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1F || 0x8000000000000084<br/>([1.0.0-2.3.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationBinary || 3 || [[#OpenBisStorage]] | + | | 0x1F || 0x8000000000010080<br/>([6.0.0-6.2.0] 0x8000000000000084)<br/>([1.0.0-2.3.0] 0x8000000000000080) || CanOpenBisPartitionBootConfigAndPackage2Part6 || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x20 || 0x8000000000000084<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationFile || 3 || [[#OpenBisStorage]] | + | | 0x20 || 0x8000000000000084<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationBinary || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x21 || 0x8000000000000080 || CanOpenBisPartitionSafeMode || 3 || [[#OpenBisStorage]] | + | | 0x21 || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationFile || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x22 || 0x8000000000000080 || CanOpenBisPartitionUser || 3 || [[#OpenBisStorage]] | + | | 0x22 || 0x8000000000000080 || CanOpenBisPartitionSafeMode || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x23 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanOpenBisPartitionSystem || 3 || [[#OpenBisStorage]] | + | | 0x23 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanOpenBisPartitionUser || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x24 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0x8000000000000100) || CanOpenBisPartitionSystemProperEncryption || 3 || [[#OpenBisStorage]] | + | | 0x24 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0x8000000000000100) || CanOpenBisPartitionSystem || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x25 || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000100008) || CanOpenBisPartitionSystemProperPartition || 3 || [[#OpenBisStorage]] | + | | 0x25 || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000100008) || CanOpenBisPartitionSystemProperEncryption || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x26 || 0xC000000000200000<br/>([3.0.0-5.1.0] 0x8000000000000100)<br/>([1.0.0-2.3.0] 0xC000000000400000) || CanOpenSdCardStorage || || | + | | 0x26 || 0x8000000000000080<br/>([6.0.0-6.2.0] 0xC000000000200000)<br/>([3.0.0-5.1.0] 0x8000000000000100)<br/>([1.0.0-2.3.0] 0xC000000000400000) || CanOpenBisPartitionSystemProperPartition || 3 || [[#OpenBisStorage]] |
| |- | | |- |
− | | [3.0.0+] 0x27 || 0x8000000000000100<br/>([1.0.0-5.1.0] 0x8000000000100008) || CanOpenGameCardStorage || 3 || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1) | + | | [3.0.0+] 0x27 || 0xC000000000200000<br/>([6.0.0-6.2.0] 0x8000000000000100)<br/>([1.0.0-5.1.0] 0x8000000000100008) || CanOpenSdCardStorage || || |
| |- | | |- |
− | | [3.0.0+] 0x28 || 0x8000000000100008<br/>([1.0.0-5.1.0] 0xC000000000400000) || CanMountSystemDataPrivate || 1 || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]] | + | | [3.0.0+] 0x28 || 0x8000000000000100<br/>([6.0.0-6.2.0] 0x8000000000100008)<br/>([1.0.0-5.1.0] 0xC000000000400000) || CanOpenGameCardStorage || 3 || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1) |
| |- | | |- |
− | | [4.0.0+] 0x29 || 0xC000000000400000<br/>([1.0.0-5.1.0] 0x8000000000010000) || CanMountHost || 3 || [[#OpenHostFileSystem]] | + | | [4.0.0+] 0x29 || 0x8000000000100008<br/>([6.0.0-6.2.0] 0xC000000000400000)<br/>([1.0.0-5.1.0] 0x8000000000010000) || CanMountSystemDataPrivate || 1 || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]] |
| |- | | |- |
− | | [5.0.0+] 0x2A || 0x8000000000010000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanMountRegisteredUpdatePartition || 1 || [[#OpenRegisteredUpdatePartition]] | + | | [5.0.0+] 0x2A || 0xC000000000400000<br/>([6.0.0-6.2.0] 0x8000000000010000)<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanMountHost || 3 || [[#OpenHostFileSystem]] |
| |- | | |- |
− | | [6.0.0+] 0x2B || 0x8000000000000000 || CanOpenSaveDataInternalStorage || 3 || [[#OpenSaveDataInternalStorageFileSystem]] | + | | [6.0.0+] 0x2B || 0x8000000000010000<br/>([1.0.0-6.2.0]0x8000000000000000) || CanMountRegisteredUpdatePartition || 1 || [[#OpenRegisteredUpdatePartition]] |
| + | |- |
| + | | [7.0.0+] 0x2C || 0x8000000000000000 || CanOpenSaveDataInternalStorage || 3 || [[#OpenSaveDataInternalStorageFileSystem]] |
| + | |- |
| + | | [7.0.0+] 0x2D || 0x0000000000000000 || CanNotMountCustomStorage || 3 || OpenCustomStorageFileSystem |
| |} | | |} |
| | | |
Line 382: |
Line 419: |
| | 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | | | 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] |
| |- | | |- |
− | | 0xD || 0x8000000000000040<br/>([1.0.0-5.1.0] 0x8000000000020000) || || OpenSaveDataInfoReaderBySaveDataFilter | + | | 0xD || 0x8000000000000040<br/>([1.0.0-5.1.0] 0x8000000000020000) || CanOpenSaveDataInfoReaderForInternal || OpenSaveDataInfoReaderWithFilter |
| |- | | |- |
| | 0xE || 0x8000000000020000<br/>([1.0.0-5.1.0] 0x8000000000000400) || CanOpenSaveDataMetaFile || [[#OpenSaveDataMetaFile]] | | | 0xE || 0x8000000000020000<br/>([1.0.0-5.1.0] 0x8000000000000400) || CanOpenSaveDataMetaFile || [[#OpenSaveDataMetaFile]] |
Line 414: |
Line 451: |
| | [3.0.0+] 0x1C || 0x8000000000000800<br/>([5.0.0-5.1.0] 0x8000000000004020)<br/>([1.0.0-4.1.0] 0x8000000000000028) || CanSetEncryptionSeed || [[#SetSdCardEncryptionSeed]] | | | [3.0.0+] 0x1C || 0x8000000000000800<br/>([5.0.0-5.1.0] 0x8000000000004020)<br/>([1.0.0-4.1.0] 0x8000000000000028) || CanSetEncryptionSeed || [[#SetSdCardEncryptionSeed]] |
| |- | | |- |
− | | [4.0.0+] 0x1D || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000000)<br/>([1.0.0-4.1.0] 0x8000000020000000) || SaveDataExtraData_Write0 || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x1D || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000000)<br/>([1.0.0-4.1.0] 0x8000000020000000) || CanWriteSaveDataFileSystemExtraDataTimeStamp || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraDataWithMask]] |
| |- | | |- |
− | | [4.0.0+] 0x1E || 0x8000000000004020<br/>([5.0.0-5.1.0] 0x8000000000002020)<br/>([1.0.0-4.1.0] 0x8000000040000000) || CanWriteSaveDataFileSystemExtraDataFlags || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x1E || 0x8000000000004020<br/>([5.0.0-5.1.0] 0x8000000000002020)<br/>([1.0.0-4.1.0] 0x8000000040000000) || CanWriteSaveDataFileSystemExtraDataFlags || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraDataWithMask]] |
| |- | | |- |
− | | [4.0.0+] 0x1F || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000028)<br/>([1.0.0-4.1.0] 0x8000000000000000) || SaveDataExtraData_Write1 || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x1F || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000028)<br/>([1.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataCommitId || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraDataWithMask]] |
| |- | | |- |
− | | [4.0.0+] 0x20 || 0x8000000000000000<br/>([5.0.0-5.1.0] 0x8000000020000000)<br/>([1.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataAll || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x20 || 0x8000000000000000<br/>([5.0.0-5.1.0] 0x8000000020000000)<br/>([1.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataAll || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraDataWithMask]] |
| |- | | |- |
| | [5.0.0+] 0x21 || 0x8000000000002020<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanExtendSaveData || [[#ExtendSaveDataFileSystem]] | | | [5.0.0+] 0x21 || 0x8000000000002020<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanExtendSaveData || [[#ExtendSaveDataFileSystem]] |
Line 432: |
Line 469: |
| | [5.0.0+] 0x25 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanOpenSaveDataTransferManagerVersion2 || [[#OpenSaveDataTransferManagerVersion2]] | | | [5.0.0+] 0x25 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanOpenSaveDataTransferManagerVersion2 || [[#OpenSaveDataTransferManagerVersion2]] |
| |- | | |- |
− | | [5.0.0+] 0x26 || 0x8000000200002000<br/>([1.0.0-5.1.0] 0x8000000080000110) || CanOpenSaveDataTransferProhibiterForCloudBackUp || [[#OpenSaveDataTransferProhibiterForCloudBackUp]] | + | | [5.0.0+] 0x26 || 0x8000000200002000<br/>([1.0.0-5.1.0] 0x8000000080000110) || CanOpenOpenSaveDataTransferProhibiter || [[#OpenSaveDataTransferProhibiter]] |
| |- | | |- |
− | | [5.0.0+] 0x27 || 0x8000000200002000<br/>([1.0.0-5.1.0] 0x8000000000100008) || CanListApplicationAccessibleSaveDataOwnerId || ListApplicationAccessibleSaveDataOwnerId | + | | [5.0.0+] 0x27 || 0x8000000240002000 <br/>([6.0.0-7.0.1] 0x8000000200002000)<br/>([1.0.0-5.1.0] 0x8000000000100008) || CanListAccessibleSaveDataOwnerId || ListAccessibleSaveDataOwnerId |
| |- | | |- |
| | [5.0.0+] 0x28 || 0x8000000000000000<br/>([1.0.0-5.1.0] 0x8000000080010000) || CanControlMmcPatrol || [[#SuspendMmcPatrol]], [[#ResumeMmcPatrol]] | | | [5.0.0+] 0x28 || 0x8000000000000000<br/>([1.0.0-5.1.0] 0x8000000080010000) || CanControlMmcPatrol || [[#SuspendMmcPatrol]], [[#ResumeMmcPatrol]] |
Line 448: |
Line 485: |
| | [5.0.0+] 0x2D || 0x8000000000010000<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanNotifySystemDataUpdateEvent || [[#NotifySystemDataUpdateEvent]] | | | [5.0.0+] 0x2D || 0x8000000000010000<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanNotifySystemDataUpdateEvent || [[#NotifySystemDataUpdateEvent]] |
| |- | | |- |
− | | [5.0.0+] 0x2E || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanOpenAccessFailureDetectionEventNotifier || [[#OpenAccessFailureResolver]] | + | | [5.0.0+] 0x2E || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanOpenAccessFailureDetectionEventNotifier || [[#OpenAccessFailureDetectionEventNotifier]] |
| |- | | |- |
| | [5.0.0+] 0x2F || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanGetAccessFailureDetectionEvent || [[#GetAccessFailureDetectionEvent]] | | | [5.0.0+] 0x2F || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanGetAccessFailureDetectionEvent || [[#GetAccessFailureDetectionEvent]] |
Line 464: |
Line 501: |
| | [6.0.0+] 0x35 || 0x8000000000200000 || CanSetSdCardAccessibility || [[#SetSdCardAccessibility]] | | | [6.0.0+] 0x35 || 0x8000000000200000 || CanSetSdCardAccessibility || [[#SetSdCardAccessibility]] |
| |- | | |- |
− | | [6.0.0+] 0x36 || 0x4000000000000000 || || SimulateGameCardDetectionEvent, SetGameCardSimulationEvent, ClearGameCardSimulationEvent | + | | [6.0.0+] 0x36 || 0x4000000000000000 || CanSimulateDevice || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent |
| |- | | |- |
− | | [6.0.0+] 0x37 || 0x8000000000080000 || CanSetDataStorageRedirectTarget || SetDataStorageRedirectTarget | + | | [6.0.0+] 0x37 || 0x8000000000000000<br/>([6.0.0-6.2.0] 0x8000000000080000) || CanCreateSaveDataWithHashSalt || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt |
| |- | | |- |
− | | [6.0.0+] 0x38 || 0x8000000000000000 || || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemByHashSalt | + | | [6.0.0+] 0x38 || 0x8000000400000000<br/>([6.0.0-6.2.0] 0x8000000000000000) || CanRegisterProgramIndexMapInfo || RegisterProgramIndexMapInfo |
| + | |- |
| + | | [8.0.0+] 0x39 || 0x8000000000000010 || CanChallengeCardExistence || ChallengeCardExistence |
| |} | | |} |
| | | |
Line 534: |
Line 573: |
| | | |
| Mounts a [[Gamecard_Partition|gamecard partition]]. | | Mounts a [[Gamecard_Partition|gamecard partition]]. |
| + | |
| + | == CreateSaveDataFileSystemWithHashSalt == |
| + | Takes a total of 0xB0-bytes of input, no output. |
| | | |
| == OpenSaveDataFileSystem == | | == OpenSaveDataFileSystem == |
Line 550: |
Line 592: |
| | | |
| Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. | | Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. |
| + | |
| + | == ReadSaveDataFileSystemExtraDataBySaveDataSpaceId == |
| + | Takes an input u8 [[#SaveDataSpaceId]], an input u64 saveID, and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]]. |
| + | |
| + | == ReadSaveDataFileSystemExtraData == |
| + | Takes an input u64 saveID and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]]. |
| | | |
| == OpenSaveDataInfoReader == | | == OpenSaveDataInfoReader == |
Line 556: |
Line 604: |
| == OpenSaveDataInfoReaderBySaveDataSpaceId == | | == OpenSaveDataInfoReaderBySaveDataSpaceId == |
| Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]]. | | Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]]. |
| + | |
| + | == FindSaveDataWithFilter == |
| + | Takes a total of 0x50-bytes of input, returns 8-bytes of output and a type-0x6 output buffer. |
| + | |
| + | == OpenSaveDataInfoReaderWithFilter == |
| + | Takes a total of 0x50-bytes of input, returns an [[#ISaveDataInfoReader]]. |
| + | |
| + | == OpenSaveDataTransferManager == |
| + | No input, returns an [[#ISaveDataTransferManager]]. |
| + | |
| + | == OpenSaveDataTransferManagerVersion2 == |
| + | No input, returns an [[#ISaveDataTransferManagerWithDivision]]. |
| + | |
| + | == OpenSaveDataTransferProhibiter == |
| + | Takes an input u64, returns an [[#ISaveDataTransferProhibiter]]. |
| + | |
| + | == ListAccessibleSaveDataOwnerId == |
| + | Takes a total of 0x10-bytes of input, returns 4-bytes of output and a type-0x6 output buffer. |
| + | |
| + | == OpenSaveDataTransferManagerForSaveDataRepair == |
| + | No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]]. |
| | | |
| == OpenContentStorageFileSystem == | | == OpenContentStorageFileSystem == |
Line 561: |
Line 630: |
| | | |
| Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]]. | | Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]]. |
| + | |
| + | == OpenCloudBackupWorkStorageFileSystem == |
| + | Takes 4-bytes of input, returns an [[#IFileSystem]]. |
| + | |
| + | == OpenCustomStorageFileSystem == |
| + | 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. |
| | | |
| == OpenDataStorageByDataId == | | == OpenDataStorageByDataId == |
Line 566: |
Line 643: |
| | | |
| Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives. | | Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives. |
| + | |
| + | == OpenDataFileSystemWithProgramIndex == |
| + | Takes an input u8, returns an [[#IFileSystem]]. |
| + | |
| + | == OpenDataStorageWithProgramIndex == |
| + | Takes an input u8, returns an [[#IStorage]]. |
| | | |
| == OpenDeviceOperator == | | == OpenDeviceOperator == |
Line 575: |
Line 658: |
| == OpenGameCardDetectionEventNotifier == | | == OpenGameCardDetectionEventNotifier == |
| This command returns a session to a port implementing the [[#IEventNotifier]] interface. | | This command returns a session to a port implementing the [[#IEventNotifier]] interface. |
| + | |
| + | == SimulateDeviceDetectionEvent == |
| + | Takes a total of 0xC-bytes of input, no output. |
| | | |
| == VerifySaveDataFileSystem == | | == VerifySaveDataFileSystem == |
Line 587: |
Line 673: |
| Takes in the 0x10 byte SD card encryption seed, and loads it into FS-module state. | | 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 (usually/always?) all-zero. | + | [[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 (usually/always?) all-zero (however in some cases the byte at offset 0x20 is value 0x1). |
| + | |
| + | == OpenAccessFailureDetectionEventNotifier == |
| + | Takes 8-bytes of input and returns an [[#IEventNotifier]]. |
| + | |
| + | [8.0.0+] Now takes an additional 8-bytes of input. |
| + | |
| + | == SetSaveDataSize == |
| + | Takes two input u64s "size" and "journal_size", and writes them to fsp-srv object member variables. |
| + | |
| + | These variables are normally initialized with 32 MiB (0x2000000) and 16 MiB (0x1000000), respectively. |
| + | |
| + | These variables don't seem to be actually used anywhere else (?) |
| + | |
| + | == SetSaveDataRootPath == |
| + | Takes an input path, and does snprintf(<fsp-srv object>->m_save_data_root_path, FS_MAX_PATH-1, "/%s", input_path); |
| + | |
| + | 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. |
| + | |
| + | == SetGlobalAccessLogMode == |
| + | Takes an input u32. |
| | | |
| == SetGlobalAccessLogMode == | | == SetGlobalAccessLogMode == |
Line 607: |
Line 713: |
| | | |
| 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). | | 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]]. |
| | | |
| = IStorage = | | = IStorage = |
Line 615: |
Line 727: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Arguments | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || Read || Takes a type-0x46 buffer, an offset and length | + | | 0 || [[#Read]] |
| |- | | |- |
− | | 1 || Write || Takes a type-0x45 buffer, an offset and length | + | | 1 || [[#Write]] |
| |- | | |- |
− | | 2 || Flush || None | + | | 2 || [[#Flush]] |
| |- | | |- |
− | | 3 || SetSize || Takes a size | + | | 3 || [[#SetSize]] |
| |- | | |- |
− | | 4 || GetSize || None | + | | 4 || [[#GetSize]] |
| |- | | |- |
− | | 5 || [4.0.0+] OperateRange || | + | | 5 || [4.0.0+] OperateRange |
| |} | | |} |
| + | |
| + | == 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 = | | = IFileSystem = |
Line 670: |
Line 797: |
| | 13 || [3.0.0+] [[#CleanDirectoryRecursively]] | | | 13 || [3.0.0+] [[#CleanDirectoryRecursively]] |
| |- | | |- |
− | | 14 || [3.0.0+] GetFileTimeStampRaw | + | | 14 || [3.0.0+] [[#GetFileTimeStampRaw]] |
| |- | | |- |
| | 15 || [4.0.0+] QueryEntry | | | 15 || [4.0.0+] QueryEntry |
Line 699: |
Line 826: |
| == CleanDirectoryRecursively == | | == CleanDirectoryRecursively == |
| Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path. | | Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path. |
| + | |
| + | == GetFileTimeStampRaw == |
| + | Takes a type-0x19 input buffer for the path and returns a 0x20-byte struct. This contains 3 u64s and an u8. |
| | | |
| = IDirectory = | | = IDirectory = |
Line 721: |
Line 851: |
| | | |
| = DirectoryEntry = | | = DirectoryEntry = |
| + | This is "nn::fs::DirectoryEntry". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x300 || Path | + | | 0x0 || 0x301 || Path |
| + | |- |
| + | | 0x301 || 0x1 || File attributes (bit 0 = is directory; bit 1 = archive bit) |
| |- | | |- |
− | | 0x300 || 0x4 || ? | + | | 0x302 || 0x2 || Padding? |
| |- | | |- |
| | 0x304 || 0x1 || [[#DirectoryEntryType]] | | | 0x304 || 0x1 || [[#DirectoryEntryType]] |
Line 733: |
Line 867: |
| | 0x305 || 0x3 || Padding? | | | 0x305 || 0x3 || Padding? |
| |- | | |- |
− | | 0x308 || 0x8? || Filesize, 0 for directories. | + | | 0x308 || 0x8 || Filesize, 0 for directories. |
| |} | | |} |
| | | |
| = DirectoryEntryType = | | = DirectoryEntryType = |
− | s8 type: 0 = directory, 1 = file. | + | This is "nn::fs::DirectoryEntryType". |
| + | |
| + | An s8 value indicating a directory entry type. The current values are: |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Description |
| + | |- |
| + | | 0 || Directory |
| + | |- |
| + | | 1 || File |
| + | |} |
| | | |
| = IFile = | | = IFile = |
Line 829: |
Line 974: |
| | 208 || GetGameCardIdSet | | | 208 || GetGameCardIdSet |
| |- | | |- |
− | | 209 || WriteToGameCard | + | | 209 || WriteToGameCardDirectly |
| |- | | |- |
| | 210 || SetVerifyWriteEnalbleFlag | | | 210 || SetVerifyWriteEnalbleFlag |
Line 848: |
Line 993: |
| |- | | |- |
| | 218 || [3.0.0+] GetGameCardDeviceId | | | 218 || [3.0.0+] GetGameCardDeviceId |
| + | |- |
| + | | 219 || [8.0.0+] ChallengeCardExistence |
| + | |- |
| + | | 220 || [9.0.0+] GetGameCardCompatibilityType |
| |- | | |- |
| | 300 || SetSpeedEmulationMode | | | 300 || SetSpeedEmulationMode |
Line 857: |
Line 1,006: |
| | 401 || [5.0.0+] ResumeSdmmcControl | | | 401 || [5.0.0+] ResumeSdmmcControl |
| |- | | |- |
− | | 402 || [6.0.0+] GetSdmmcConnectionStatus (Takes a total of 4-bytes of input, returns a total of 8-bytes of output) | + | | 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]] |
| |- | | |- |
− | | 500 || [6.0.0+] SetGameCardSimulationEvent (Takes a total of 0x14-bytes of input, no output) | + | | 500 || [6.0.0+] [[#SetDeviceSimulationEvent]] |
| |- | | |- |
− | | 501 || [6.0.0+] ClearGameCardSimulationEvent (Takes a total of 4-bytes of input, no output) | + | | 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]] |
| |} | | |} |
| | | |
Line 871: |
Line 1,020: |
| | | |
| [[NS_Services|NS]] appears to only use this with [[Content_Manager_services#GetTitleIdInfo]] and [[Content_Manager_services#GetUpdateTitleList]] with storageid=nandsys, for checking whether a sysupdate is required. | | [[NS_Services|NS]] appears to only use this with [[Content_Manager_services#GetTitleIdInfo]] and [[Content_Manager_services#GetUpdateTitleList]] with storageid=nandsys, for checking whether a sysupdate is required. |
| + | |
| + | == GetSdmmcConnectionStatus == |
| + | 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 = | | = IEventNotifier = |
Line 883: |
Line 1,041: |
| | | |
| = ISaveDataTransferManager = | | = ISaveDataTransferManager = |
| + | This is "nn::fssrv::sf::ISaveDataTransferManager". |
| + | |
| + | This was added with [[4.0.0]]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 895: |
Line 1,057: |
| | 64 || [[#OpenSaveDataImporter]] | | | 64 || [[#OpenSaveDataImporter]] |
| |} | | |} |
− |
| |
− | This was added with [[4.0.0]].
| |
| | | |
| == GetChallenge == | | == GetChallenge == |
Line 909: |
Line 1,069: |
| == OpenSaveDataImporter == | | == OpenSaveDataImporter == |
| Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]]. | | 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 |
| + | |- |
| + | | 0 || [[#GetChallenge]] |
| + | |- |
| + | | 16 || [[#SetKeyPackage]] |
| + | |- |
| + | | 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]] |
| + | |- |
| + | | 81 || [[#PrepareOpenSaveDataImporter]] |
| + | |- |
| + | | 90 || [[#OpenSaveDataImporter]] |
| + | |- |
| + | | 91 || [[#OpenSaveDataImporter2]] |
| + | |- |
| + | | 100 || [[#OpenSaveDataExporterWithKey]] |
| + | |- |
| + | | 110 || [[#OpenSaveDataImporterWithKey]] |
| + | |} |
| + | |
| + | == SetKeyPackage == |
| + | No input/output, takes a type-0x5 input buffer. |
| + | |
| + | == OpenSaveDataExporterAndGetEncryptedKey == |
| + | Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]]. |
| + | |
| + | == PrepareOpenSaveDataImporter == |
| + | Takes a type-0x1A output buffer to receive a RsaEncryptedKey. |
| + | |
| + | == OpenSaveDataImporter == |
| + | Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | == OpenSaveDataImporter2 == |
| + | Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | == OpenSaveDataExporterWithKey == |
| + | Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]]. |
| + | |
| + | == OpenSaveDataImporterWithKey == |
| + | Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| | | |
| = ISaveDataExporter = | | = ISaveDataExporter = |
| + | This is "nn::fssrv::sf::ISaveDataExporter". |
| + | |
| + | This was added with [[4.0.0]]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Initialize]] | + | | 0 || [[#GetSaveDataInfo]] |
| |- | | |- |
| | 1 || [[#GetRestSize]] | | | 1 || [[#GetRestSize]] |
Line 924: |
Line 1,135: |
| |} | | |} |
| | | |
− | This was added with [[4.0.0]].
| + | == GetSaveDataInfo == |
− | | |
− | == Initialize == | |
| No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. | | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. |
| | | |
Line 941: |
Line 1,150: |
| | | |
| = ISaveDataImporter = | | = ISaveDataImporter = |
| + | This is "nn::fssrv::sf::ISaveDataImporter". |
| + | |
| + | This was added with [[4.0.0]]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Initialize]] | + | | 0 || [[#GetSaveDataInfo]] |
| |- | | |- |
| | 1 || [[#GetRestSize]] | | | 1 || [[#GetRestSize]] |
Line 954: |
Line 1,167: |
| |} | | |} |
| | | |
− | This was added with [[4.0.0]].
| + | == GetSaveDataInfo == |
− | | + | No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer. |
− | == Initialize == | |
− | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. | |
| | | |
| The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw. | | The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw. |
Line 971: |
Line 1,182: |
| | | |
| = ISaveDataTransferManagerWithDivision = | | = ISaveDataTransferManagerWithDivision = |
| + | This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision". |
| + | |
| + | This was added with [[5.0.0]]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 977: |
Line 1,192: |
| | 0 || [[#GetChallenge]] | | | 0 || [[#GetChallenge]] |
| |- | | |- |
− | | 16 || [[#SetToken]] | + | | 16 || [[#SetKeySeedPackage]] |
| + | |- |
| + | | 32 || [[#OpenSaveDataExporter]] |
| |- | | |- |
− | | 32 || [[#OpenSaveDataExporter_2|#OpenSaveDataExporter]] | + | | 33 || [[#OpenSaveDataExporterForDiffExport]] |
| |- | | |- |
− | | 33 || [[#OpenSaveDataExporter2]] | + | | 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]] |
| |- | | |- |
− | | 34 || [6.0.0+] ? (No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]) | + | |rowspan="2"| 64 || [5.0.0-5.1.0] OpenSaveDataImporter |
| |- | | |- |
− | | 64 || [[#OpenSaveDataImporter_2|#OpenSaveDataImporter]]
| + | | [6.0.0+] [[#OpenSaveDataImporterDeprecated]] |
| |- | | |- |
− | | 65 || [[#OpenSaveDataImporter2]] | + | | 65 || [[#OpenSaveDataImporterForDiffImport]] |
| |- | | |- |
− | | 66 || [6.0.0+] ? (Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]) | + | | 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]] |
| |- | | |- |
− | | 67 || [6.0.0+] ? (Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]) | + | | 67 || [6.0.0+] [[#OpenSaveDataImporter]] |
| |- | | |- |
− | | 68 || [6.0.0+] ? (No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]) | + | | 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]] |
| |- | | |- |
− | | 69 || [6.0.0+] ? (Takes an input u64 and a 0x10-byte struct, no output) | + | | 69 || [6.0.0+] [[#CancelSuspendingImport]] |
| |} | | |} |
− |
| |
− | This was added with [[5.0.0]].
| |
| | | |
| == GetChallenge == | | == GetChallenge == |
| No input/output, takes a type-0x6 output buffer containing the '''Challenge'''. | | No input/output, takes a type-0x6 output buffer containing the '''Challenge'''. |
| | | |
− | == SetToken == | + | == SetKeySeedPackage == |
− | No input/output, takes a type-0x5 input buffer containing the '''Token'''. | + | No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. |
| | | |
| == OpenSaveDataExporter == | | == OpenSaveDataExporter == |
| Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. | | Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. |
| | | |
− | == OpenSaveDataExporter2 == | + | == OpenSaveDataExporterForDiffExport == |
| Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]]. | | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]]. |
| | | |
− | Officially this has the same name as OpenSaveDataExporter except with different parameters.
| + | == OpenSaveDataExporterByContext == |
| + | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]. |
| | | |
− | == OpenSaveDataImporter == | + | == OpenSaveDataImporterDeprecated == |
| Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]]. | | Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | == OpenSaveDataImporter2 == | + | == OpenSaveDataImporterForDiffImport == |
| Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]]. | | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | Officially this has the same name as OpenSaveDataImporter except with different parameters.
| + | == OpenSaveDataImporterForDuplicateDiffImport == |
| + | Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | == OpenSaveDataImporter == |
| + | Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | == OpenSaveDataImporterByContext == |
| + | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | == CancelSuspendingImport == |
| + | Takes an input u64 and a 0x10-byte struct, no output. |
| | | |
| = ISaveDataDivisionExporter = | | = ISaveDataDivisionExporter = |
| + | This is "nn::fssrv::sf::ISaveDataDivisionExporter". |
| + | |
| + | This was added with [[5.0.0]]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || SetDivisionCount (Takes an input u32, no output) | + | | 0 || [[#SetDivisionCount]] |
| + | |- |
| + | | 1 || [6.0.0+] [[#GetSaveDataInfo]] |
| |- | | |- |
− | | 1 || [6.0.0+] ? (No input/output, takes a type-0x6 output buffer) | + | | 16 || [[#OpenSaveDataDiffChunkIterator]] |
| |- | | |- |
− | | 16 || OpenSaveDataDiffChunkIterator (No input, returns an [[#ISaveDataChunkIterator]]) | + | | 48 || [[#OpenSaveDataChunkExporter]] |
| |- | | |- |
− | | 48 || OpenSaveDataChunkExporter (Takes an input u32, returns an [[#ISaveDataChunkExporter]]) | + | | 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]] |
| |- | | |- |
− | | 64 || [6.0.0+] FinalizeFullExport (No input, returns two 0x10-byte output structs) | + | | 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]] |
| |- | | |- |
− | | 65 || [6.0.0+] FinalizeDiffExport (No input, returns an output 0x10-byte struct) | + | | 66 || [6.0.0+] [[#CancelExport]] |
| |- | | |- |
− | | 66 || [6.0.0+] CancelExport (No input/output) | + | | 67 || [6.0.0+] [[#SuspendExport]] |
| |- | | |- |
− | | 67 || [6.0.0+] SuspendExport (No input/output, takes a type-0x6 output buffer) | + | | 70 || [6.0.0+] [[#GetKeySeed]] |
| |- | | |- |
− | | 70 || [6.0.0+] GetKeySeed (No input, returns an output 0x10-byte struct) | + | | 71 || [6.0.0+] [[#GetInitialDataMac]] |
| |- | | |- |
− | | 71 || [6.0.0+] GetInitialDataMac (No input, returns an output 0x10-byte struct) | + | | 72 || [6.0.0+] [[#FinalizeExport]] |
| |- | | |- |
− | | 72 || [6.0.0+] FinalizeExport (No input/output) | + | | 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]] |
| |- | | |- |
− | | 80 || [6.0.0+] GetImportInitialDataAad (No input, returns an output 0x20-byte struct) | + | | 80 || [6.0.0+] [[#GetImportInitialDataAad]] |
| |- | | |- |
− | | 81 || [6.0.0+] SetExportInitialDataAad (Takes an input 0x20-byte struct, no output) | + | | 81 || [6.0.0+] [[#SetExportInitialDataAad]] |
| |- | | |- |
− | | 96 || [6.0.0+] GetReportInfo (No input, returns an output 0x20-byte struct) | + | | 96 || [6.0.0+] [[#GetReportInfo]] |
| |} | | |} |
| + | |
| + | == SetDivisionCount == |
| + | Takes an input u32, no output. |
| + | |
| + | == OpenSaveDataChunkExporter == |
| + | Takes an input u32, returns an [[#ISaveDataChunkExporter]]. |
| + | |
| + | == FinalizeFullExport == |
| + | 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. |
| + | |
| + | == GetInitialDataMac == |
| + | No input, returns an output 0x10-byte struct. |
| + | |
| + | == FinalizeExport == |
| + | No input/output. |
| + | |
| + | == SetExportInitialDataAad == |
| + | 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]]. |
| | | |
− | = ISaveDataDivisionImporter =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [6.0.0+] ? (No input/output, takes a type-0x6 output buffer) | + | | 0 || [6.0.0+] [[#GetSaveDataInfo]] |
| |- | | |- |
− | | 16 || OpenSaveDataDiffChunkIterator (No input, returns an [[#ISaveDataChunkIterator]]) | + | | 16 || [[#OpenSaveDataDiffChunkIterator]] |
| |- | | |- |
− | | 32 || InitializeImport (No input, returns an output u64) | + | | 32 || [[#InitializeImport]] |
| |- | | |- |
− | | 33 || FinalizeImport (No input/output) | + | | 33 || [[#FinalizeImport]] |
| |- | | |- |
− | | 34 || [6.0.0+] CancelImport (No input/output) | + | | 34 || [6.0.0+] [[#CancelImport]] |
| |- | | |- |
− | | 35 || [6.0.0+] GetImportContext (No input/output, takes a type-0x6 output buffer) | + | | 35 || [6.0.0+] [[#GetImportContext]] |
| |- | | |- |
− | | 36 || [6.0.0+] SuspendImport (No input/output) | + | | 36 || [6.0.0+] [[#SuspendImport]] |
| |- | | |- |
− | | 48 || OpenSaveDataChunkImporter (Takes an input u32, returns an [[#ISaveDataChunkImporter]]) | + | | 48 || [[#OpenSaveDataChunkImporter]] |
| |- | | |- |
− | | 64 || [6.0.0+] GetImportInitialDataAad (No input, returns an output 0x20-byte struct) | + | | 64 || [6.0.0+] [[#GetImportInitialDataAad]] |
| |- | | |- |
− | | 80 || [6.0.0+] GetReportInfo (No input, returns an output 0x20-byte struct) | + | | 80 || [6.0.0+] [[#GetReportInfo]] |
| |} | | |} |
| + | |
| + | == GetSaveDataInfo == |
| + | No input/output, takes a type-0x6 output buffer. |
| + | |
| + | == 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]]. | | This was added with [[5.0.0]]. |
| | | |
− | = ISaveDataChunkIterator =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || Next (No input/output) | + | | 0 || [[#Next]] |
| |- | | |- |
− | | 1 || IsEnd (No input, returns an output u8) | + | | 1 || [[#IsEnd]] |
| |- | | |- |
− | | 16 || GetId (No input, returns an output u32) | + | | 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]]. | | This was added with [[5.0.0]]. |
| | | |
− | = ISaveDataChunkExporter =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || Pull (Takes an input u64 and a type-0x6 output buffer, returns an output u64) | + | | 0 || [[#Pull]] |
− | |-
| |
− | | 16 || [6.0.0+] GetRestRawDataSize (No input, returns an output u64)
| |
| |- | | |- |
| + | | 16 || [6.0.0+] [[#GetRestRawDataSize]] |
| |} | | |} |
| + | |
| + | == Pull == |
| + | Takes an input u64 and a type-0x6 output buffer, returns an output u64. |
| + | |
| + | == GetRestRawDataSize == |
| + | No input, returns an output u64. |
| + | |
| + | = ISaveDataChunkImporter = |
| + | This is "nn::fssrv::sf::ISaveDataChunkImporter". |
| | | |
| This was added with [[5.0.0]]. | | This was added with [[5.0.0]]. |
| | | |
− | = ISaveDataChunkImporter =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || Push (Takes an input u64 and a type-0x5 input buffer, no output) | + | | 0 || [[#Push]] |
| |} | | |} |
| | | |
− | This was added with [[5.0.0]].
| + | == Push == |
| + | Takes an input u64 and a type-0x5 input buffer, no output. |
| | | |
| = ISaveDataTransferProhibiter = | | = ISaveDataTransferProhibiter = |
Line 1,129: |
Line 1,444: |
| | | |
| = IMultiCommitManager = | | = IMultiCommitManager = |
| + | This was added with [[6.0.0]]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 1 || ? (Takes an input [[#IFilesystem]], no output) | + | | 1 || [[#Add]] |
| |- | | |- |
− | | 2 || ? (No input/output) | + | | 2 || [[#Commit]] |
| |} | | |} |
| | | |
− | This was added with [[6.0.0]].
| + | == Add == |
| + | Takes an input [[#IFilesystem]], no output. |
| + | |
| + | == Commit == |
| + | No input/output. |
| | | |
| = FileSystemType = | | = FileSystemType = |
Line 1,145: |
Line 1,466: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || Invalid | + | | 0 || Code |
| |- | | |- |
− | | 1 || Invalid | + | | 1 || Data |
| |- | | |- |
| | 2 || Logo | | | 2 || Logo |
Line 1,160: |
Line 1,481: |
| |- | | |- |
| | 7 || ApplicationPackage | | | 7 || ApplicationPackage |
| + | |- |
| + | | 8 || RegisteredUpdate |
| |} | | |} |
| | | |
Line 1,181: |
Line 1,504: |
| | | |
| = ContentStorageId = | | = ContentStorageId = |
| + | This is "nn::fs::ContentStorageId". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || NandSystem | + | | 0 || System |
| |- | | |- |
− | | 1 || NandUser | + | | 1 || User |
| |- | | |- |
| | 2 || SdCard | | | 2 || SdCard |
Line 1,193: |
Line 1,518: |
| | | |
| = SaveDataSpaceId = | | = SaveDataSpaceId = |
| + | This is "nn::fs::SaveDataSpaceId". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || NandSystem | + | | 0 || System |
| |- | | |- |
− | | 1 || NandUser | + | | 1 || User |
| |- | | |- |
− | | 2 || SdCard | + | | 2 || SdSystem |
| |- | | |- |
− | | 3 || [3.0.0+] TemporaryStorage | + | | 100 || [3.0.0+] ProperSystem |
| |} | | |} |
| | | |
Line 1,224: |
Line 1,551: |
| |- | | |- |
| | 5 || [3.0.0+] CacheStorage | | | 5 || [3.0.0+] CacheStorage |
| + | |} |
| + | |
| + | = ImageDirectoryId = |
| + | This is "nn::fs::ImageDirectoryId". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Nand |
| + | |- |
| + | | 1 || SdCard |
| + | |} |
| + | |
| + | = CloudBackupWorkStorageId = |
| + | This is "nn::fs::CloudBackupWorkStorageId". |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Nand |
| + | |- |
| + | | 1 || SdCard |
| + | |} |
| + | |
| + | = CustomStorageId = |
| + | This is "nn::fs::CustomStorageId". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Nand |
| + | |- |
| + | | 1 || SdCard |
| |} | | |} |
| | | |
Line 1,253: |
Line 1,615: |
| | @GcApp || Gamecard App partition (Partition 2) | | | @GcApp || Gamecard App partition (Partition 2) |
| |- | | |- |
− | | @GcS00000001 || Gamecard Contents. | + | | @GcXYYYYYYYY || Gamecard Contents. X is the partition type (U - Update, N - Normal, S - Secure). Y is the gamecard handle as a 32-bit hex value |
| |- | | |- |
| | @upp || Gamecard update partition (Partition 0) | | | @upp || Gamecard update partition (Partition 0) |
Line 1,261: |
Line 1,623: |
| | | |
| = Save Struct = | | = Save Struct = |
| + | This is "nn::fs::SaveDataAttribute". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,284: |
Line 1,648: |
| |- | | |- |
| | 0x21 | | | 0x21 |
− | | 0x7 | + | | 0x1 |
| + | | Save data 'rank' or 'precedence'. 0 if this save data is considered the primary save data. 1 if it's considered the secondary save data. |
| + | |- |
| + | | 0x22 |
| + | | 0x2 |
| + | | Save data index |
| + | |- |
| + | | 0x24 |
| + | | 0x4 |
| | Padding | | | Padding |
| |- | | |- |
Line 1,313: |
Line 1,685: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | [[Savegames|IVFC]] level4 size? | + | | Save data size. |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x8 | | | 0x8 |
− | | Same as offset 0x0 normally? Hard-coded to 0x80000 for BcatSaveData. | + | | Save data journal size. |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x8 | | | 0x8 |
− | | 0x4000 for SystemSaveData/SaveData/DeviceSaveData/BcatSaveData. [[Savegames|IVFC]] level4 block-size in bytes? | + | | Save data block size. 0x4000 for SystemSaveData/SaveData/DeviceSaveData/BcatSaveData. |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 0x8 | | | 0x8 |
− | | Official user-processes only uses 0 here for SystemSaveData/SaveData. For the dedicated save-creation code with SaveData/DeviceSaveData, this value comes from an input param with official user-processes. For BcatSaveData, this is the hard-coded [[Title_list|titleID]] of the bcat-sysmodule. | + | | Save data owner id. Official user-processes only uses 0 here for SystemSaveData/SaveData. For the dedicated save-creation code with SaveData/DeviceSaveData, this value comes from an input param with official user-processes. For BcatSaveData, this is the hard-coded [[Title_list|titleID]] of the bcat-sysmodule. |
| |- | | |- |
| | 0x20 | | | 0x20 |
| | 0x4 | | | 0x4 |
− | | Written using an input param for official user-processes. Hard-coded 0 for BcatSaveData. | + | | Save data flags. Written using an input param for official user-processes. Hard-coded 0 for BcatSaveData. |
| |- | | |- |
| | 0x24 | | | 0x24 |
| | 0x1 | | | 0x1 |
− | | Official user-processes only uses 0 here for SystemSaveData, 1 for SaveData/DeviceSaveData/BcatSaveData. | + | | [[#SaveDataSpaceId]]. Official user-processes only uses 0 here for SystemSaveData, 1 for SaveData/DeviceSaveData/BcatSaveData. |
| |- | | |- |
| | 0x25 | | | 0x25 |
| | 0x1 | | | 0x1 |
− | | 0 for SystemSaveData/SaveData. | + | | Unknown. 0 for SystemSaveData/SaveData. |
| |- | | |- |
| | 0x26 | | | 0x26 |
Line 1,394: |
Line 1,766: |
| |- | | |- |
| | 0x38 | | | 0x38 |
− | | 0x28 | + | | 0x2 |
| + | | Save data index |
| + | |- |
| + | | 0x3A |
| + | | 0x1 |
| + | | Save data 'rank' or 'precedence'. 0 if this save data is considered the primary save data. 1 if it's considered the secondary save data. |
| + | |- |
| + | | 0x3B |
| + | | 0x25 |
| | Unknown. Usually zeros? | | | Unknown. Usually zeros? |
| |} | | |} |
| | | |
| This is a 0x60-byte struct. | | This is a 0x60-byte struct. |
| + | |
| + | = SaveDataFileSystemExtraData = |
| + | This is a 0x200-byte struct. Appears to match [[Savegames#Extra_data]]. |
| | | |
| = InitialDataVersion2 = | | = InitialDataVersion2 = |