Changes

Jump to navigation Jump to search
9,202 bytes added ,  17:10, 15 September 2019
no edit summary
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 =
11

edits

Navigation menu