Line 14: |
Line 14: |
| | | |
| == OpenCodeFileSystem == | | == OpenCodeFileSystem == |
− | Takes an [[NCM_services#ProgramId|ProgramId]] and a [[#ContentPath]]. Returns an [[#IFileSystem]]. | + | Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]]. |
| + | |
| + | [10.0.0+] This now takes an additional type-0x1A output buffer. |
| + | |
| + | [16.0.0+] This now takes an additional input [[#ContentAttributes]]. |
| + | |
| + | [17.0.0+] This now takes a type-0x6 output buffer instead of a type-0x1A output buffer. |
| | | |
| == IsArchivedProgram == | | == IsArchivedProgram == |
− | Takes an u64 ProcessId. Returns a bool (1 if the process id's [[#ContentPath]] ends in ".nca"). | + | Takes an input u64 ProcessId. Returns a bool (1 if the process id's [[#FspPath]] ends in ".nca"). |
| | | |
| == SetCurrentProcess == | | == SetCurrentProcess == |
− | Takes a ProcessId descriptor. | + | Takes an input u64 ProcessId. No output. |
| | | |
| = fsp-pr = | | = fsp-pr = |
Line 35: |
Line 41: |
| | 2 || [4.0.0+] [[#SetCurrentProcess]] | | | 2 || [4.0.0+] [[#SetCurrentProcess]] |
| |- | | |- |
− | | 256 || [[#SetEnabledProgramVerification]] | + | | 256 || [1.0.0-9.2.0] [[#SetEnabledProgramVerification]] |
| |} | | |} |
| | | |
Line 50: |
Line 56: |
| | | |
| When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA_Format|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort. | | When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA_Format|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort. |
| + | |
| + | [10.0.0+] This was moved to [[Loader_services|Loader]]. |
| | | |
| = fsp-srv = | | = fsp-srv = |
Line 66: |
Line 74: |
| | 7 || [2.0.0+] [[#OpenFileSystemWithPatch]] | | | 7 || [2.0.0+] [[#OpenFileSystemWithPatch]] |
| |- | | |- |
− | | 8 || [2.0.0+] [[#OpenFileSystemWithId]] | + | | 8 || [16.0.0+] [[#OpenFileSystemWithIdObsolete]] ([2.0.0-15.0.1] OpenFileSystemWithId) |
| |- | | |- |
| | 9 || [3.0.0+] OpenDataFileSystemByProgramId | | | 9 || [3.0.0+] OpenDataFileSystemByProgramId |
| + | |- |
| + | | 10 || [16.0.0+] [[#OpenFileSystemWithId]] |
| |- | | |- |
| | 11 || [[#OpenBisFileSystem]] | | | 11 || [[#OpenBisFileSystem]] |
Line 97: |
Line 107: |
| |- | | |- |
| | 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute | | | 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute |
| + | |- |
| + | | 29 || [19.0.0+] IsInitializationMode |
| |- | | |- |
| | 30 || [[#OpenGameCardStorage]] | | | 30 || [[#OpenGameCardStorage]] |
Line 111: |
Line 123: |
| |- | | |- |
| | 36 || [9.0.0+] OpenHostFileSystemWithOption | | | 36 || [9.0.0+] OpenHostFileSystemWithOption |
| + | |- |
| + | | 37 || [14.0.0+] CreateSaveDataFileSystemWithCreationInfo2 |
| |- | | |- |
| | 51 || [[#OpenSaveDataFileSystem]] | | | 51 || [[#OpenSaveDataFileSystem]] |
Line 116: |
Line 130: |
| | 52 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | | | 52 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] |
| |- | | |- |
− | | 53 || [2.0.0+] OpenReadOnlySaveDataFileSystem | + | | 53 || [2.0.0+] [[#OpenReadOnlySaveDataFileSystem]] |
| |- | | |- |
| | 57 || [3.0.0+] [[#ReadSaveDataFileSystemExtraDataBySaveDataSpaceId]] | | | 57 || [3.0.0+] [[#ReadSaveDataFileSystemExtraDataBySaveDataSpaceId]] |
Line 142: |
Line 156: |
| | 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute | | | 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute |
| |- | | |- |
− | | 70 || [8.0.0+] WriteSaveDataFileSystemExtraDataBySaveDataAttribute | + | | 70 || [8.0.0+] WriteSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute |
| + | |- |
| + | | 71 || [10.0.0+] ReadSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute |
| |- | | |- |
| | 80 || OpenSaveDataMetaFile | | | 80 || OpenSaveDataMetaFile |
Line 155: |
Line 171: |
| |- | | |- |
| | 85 || [9.0.0+] [[#OpenSaveDataTransferManagerForSaveDataRepair]] | | | 85 || [9.0.0+] [[#OpenSaveDataTransferManagerForSaveDataRepair]] |
| + | |- |
| + | | 86 || [10.0.0+] [[#OpenSaveDataMover]] |
| + | |- |
| + | | 87 || [11.0.0+] [[#OpenSaveDataTransferManagerForRepair]] |
| |- | | |- |
| | 100 || OpenImageDirectoryFileSystem | | | 100 || OpenImageDirectoryFileSystem |
| + | |- |
| + | | 101 || [11.0.0+] OpenBaseFileSystem |
| + | |- |
| + | | 102 || [12.0.0+] FormatBaseFileSystem |
| |- | | |- |
| | 110 || [[#OpenContentStorageFileSystem]] | | | 110 || [[#OpenContentStorageFileSystem]] |
| |- | | |- |
− | | 120 || [6.0.0+] [[#OpenCloudBackupWorkStorageFileSystem]] | + | | 120 || [6.0.0-9.2.0] [[#OpenCloudBackupWorkStorageFileSystem]] |
| |- | | |- |
| | 130 || [7.0.0+] [[#OpenCustomStorageFileSystem]] | | | 130 || [7.0.0+] [[#OpenCustomStorageFileSystem]] |
Line 175: |
Line 199: |
| |- | | |- |
| | 205 || [7.0.0+] [[#OpenDataStorageWithProgramIndex]] | | | 205 || [7.0.0+] [[#OpenDataStorageWithProgramIndex]] |
| + | |- |
| + | | 206 || [13.0.0+] OpenDataStorageByPath |
| + | |- |
| + | | 207 || [15.0.0+] OpenDataFileSystemByDataId |
| |- | | |- |
| | 400 || [[#OpenDeviceOperator]] | | | 400 || [[#OpenDeviceOperator]] |
Line 181: |
Line 209: |
| |- | | |- |
| | 501 || [[#OpenGameCardDetectionEventNotifier]] | | | 501 || [[#OpenGameCardDetectionEventNotifier]] |
| + | |- |
| + | | 503 || [19.0.0+] OpenGameCardAwakenReadyEventNotifier |
| |- | | |- |
| | 510 || [5.0.0+] OpenSystemDataUpdateEventNotifier | | | 510 || [5.0.0+] OpenSystemDataUpdateEventNotifier |
Line 206: |
Line 236: |
| | 608 || [2.0.0+] UnregisterAllExternalKey | | | 608 || [2.0.0+] UnregisterAllExternalKey |
| |- | | |- |
− | | 609 || [2.0.0+] GetRightsIdByPath | + | | 609 || [2.0.0-15.0.1] GetRightsIdByPath |
| |- | | |- |
| | 610 || [3.0.0+] GetRightsIdAndKeyGenerationByPath | | | 610 || [3.0.0+] GetRightsIdAndKeyGenerationByPath |
Line 223: |
Line 253: |
| |- | | |- |
| | 617 || [7.0.0+] UnregisterExternalKey | | | 617 || [7.0.0+] UnregisterExternalKey |
| + | |- |
| + | | 618 || [17.0.0+] GetProgramId |
| |- | | |- |
| | 620 || [2.0.0+] [[#SetSdCardEncryptionSeed]] | | | 620 || [2.0.0+] [[#SetSdCardEncryptionSeed]] |
Line 229: |
Line 261: |
| |- | | |- |
| | 631 || [4.0.0+] IsSdCardAccessible | | | 631 || [4.0.0+] IsSdCardAccessible |
| + | |- |
| + | | 632 || [19.0.0+] TestExternalKey |
| |- | | |- |
| | 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid | | | 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid |
Line 246: |
Line 280: |
| | 810 || [7.0.0+] RegisterProgramIndexMapInfo | | | 810 || [7.0.0+] RegisterProgramIndexMapInfo |
| |- | | |- |
− | | 1000 || SetBisRootForHost | + | | 820 || [19.0.0+] GetContentStorageInfoIndex |
| + | |- |
| + | | 1000 || [1.0.0-9.2.0] SetBisRootForHost |
| |- | | |- |
| | 1001 || [[#SetSaveDataSize]] | | | 1001 || [[#SetSaveDataSize]] |
Line 274: |
Line 310: |
| | 1013 || [9.0.0+] UnsetSaveDataRootPath | | | 1013 || [9.0.0+] UnsetSaveDataRootPath |
| |- | | |- |
− | | 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey | + | | 1014 || [10.0.0-10.2.0] OutputMultiProgramTagAccessLog |
| + | |- |
| + | | 1016 || [11.0.0+] FlushAccessLogOnSdCard |
| + | |- |
| + | | 1017 || [11.0.0+] OutputApplicationInfoAccessLog |
| + | |- |
| + | | 1018 || [13.0.0+] SetDebugOption |
| + | |- |
| + | | 1019 || [13.0.0+] UnsetDebugOption |
| + | |- |
| + | | 1020 || [18.0.0+] OpenMemoryStressor |
| + | |- |
| + | | 1100 || [4.0.0-17.0.1] OverrideSaveDataTransferTokenSignVerificationKey |
| + | |- |
| + | | 1101 || [18.0.0+] OverrideSaveDataTransferKeyForTest |
| |- | | |- |
| | 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset | | | 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset |
| |- | | |- |
| | 1200 || [6.0.0+] [[#OpenMultiCommitManager]] | | | 1200 || [6.0.0+] [[#OpenMultiCommitManager]] |
| + | |- |
| + | | 1300 || [10.0.0+] [[#OpenBisWiper]] |
| + | |- |
| + | | 1400 || [15.0.0+] NotifyErrorContextServiceReady |
| |} | | |} |
| | | |
Line 295: |
Line 349: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! AccessibilityType || Mask || Name || Value || Used by | + | ! AccessibilityType || Name || Mask || Permission || Used by |
| |- | | |- |
− | | 0x0 || 0x8000000000000801 || CanMountLogo || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | + | | 0x0 || CanMountLogo || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 0x1 || 0x8000000000000801 || CanMountContentMeta || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | + | | 0x1 || CanMountContentMeta || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 0x2 || 0x8000000000000801 || CanMountContentControl || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | + | | 0x2 || CanMountContentControl || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 0x3 || 0x8000000000000801 || CanMountContentManual || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | + | | 0x3 || CanMountContentManual || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 0x4 || 0x8000000000000801 || CanMountContentData || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | + | | 0x4 || CanMountContentData || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 0x5 || 0x8000000000000801 || CanMountApplicationPackage || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | + | | 0x5 || CanMountApplicationPackage || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 0x6 || 0x8000000000000000 || CanMountSaveDataStorage || 3 || | + | | 0x6 || CanMountSaveDataStorage || 0x8000000000000000 || RW || |
| |- | | |- |
− | | 0x7 || 0x8000000000000800 || CanMountContentStorage || 3 || [[#OpenContentStorageFileSystem]] | + | | 0x7 || CanMountContentStorage || 0x8000000000000800 || RW || [[#OpenContentStorageFileSystem]] |
| |- | | |- |
− | | 0x8 || 0x8000000000001000 || CanMountImageAndVideoStorage || 3 || [[#OpenImageDirectoryFileSystem]] | + | | 0x8 || CanMountImageAndVideoStorage ||0x8000000000001000 || RW || [[#OpenImageDirectoryFileSystem]] |
| |- | | |- |
− | | 0x9 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanMountCloudBackupWorkStorage || 3 || OpenCloudBackupWorkStorageFileSystem | + | | 0x9 || CanMountCustomStorage0 || 0x8000000000000000 || RW || OpenCustomStorageFileSystem |
| |- | | |- |
− | | 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) || CanMountCustomStorage0 || 3 || OpenCustomStorageFileSystem | + | | 0xA || CanMountBisCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xB || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000008080) || CanMountBisCalibrationFile || 3 || [[#OpenBisFileSystem]] | + | | 0xB || CanMountBisSafeMode || 0x8000000000000080 || RW || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xC || 0x8000000000000080<br/>([1.0.0-6.2.0] 0x8000000000008080) || CanMountBisSafeMode || 3 || [[#OpenBisFileSystem]] | + | | 0xC || CanMountBisUser || 0x8000000000008080 || RW || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xD || 0x8000000000008080<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanMountBisUser || 3 || [[#OpenBisFileSystem]] | + | | 0xD || CanMountBisSystem || 0x8000000000008080 || RW || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xE || 0x8000000000008080<br/>([3.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanMountBisSystem || 3 || [[#OpenBisFileSystem]] | + | | 0xE || CanMountBisSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 0xF || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000000010) || CanMountBisSystemProperEncryption || 3 || [[#OpenBisFileSystem]] | + | | 0xF || CanMountBisSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisFileSystem]] |
| |- | | |- |
− | | 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]] | + | | 0x10 || CanMountSdCard || 0xC000000000200000 || RW || [[#OpenSdCardFileSystem]] |
| |- | | |- |
− | | 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]] | + | | 0x11 || CanMountGameCard || 0x8000000000000010 || R- || [[#OpenGameCardFileSystem]] |
| |- | | |- |
− | | 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]] | + | | 0x12 || CanMountDeviceSaveData || 0x8000000000040020 || RW || [[#OpenSaveDataFileSystem]] |
| |- | | |- |
− | | 0x13 || 0x8000000000040020<br/>([6.0.0-6.2.0] 0x8000000000000028)<br/>([1.0.0-5.1.0] 0x8000000000000020) || CanMountDeviceSaveData || 3 || [[#OpenSaveDataFileSystem]] | + | | 0x13 || CanMountSystemSaveData || 0x8000000000000028 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]] |
| |- | | |- |
− | | 0x14 || 0x8000000000000028<br/>([3.0.0-6.2.0] 0x8000000000000020)<br/>([1.0.0-2.3.0] 0x8000000000010082) || CanMountSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | + | | 0x14 || CanMountOthersSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystem]] |
| |- | | |- |
− | | 0x15 || 0x8000000000000020<br/>([3.0.0-5.1.0] 0x8000000000010082)<br/>([1.0.0-2.3.0] 0x8000000000010080) || CanMountOthersSaveData || 3 || [[#OpenSaveDataFileSystem]] | + | | 0x15 || CanMountOthersSystemSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]] |
| |- | | |- |
− | | 0x16 || 0x8000000000000020<br/>([6.0.0-6.2.0] 0x8000000000010082)<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanMountOthersSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | + | | 0x16 || CanOpenBisPartitionBootPartition1Root || 0x8000000000010082 || RW || [[#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]] | + | | 0x17 || CanOpenBisPartitionBootPartition2Root || 0x8000000000010080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x18 || 0x8000000000010080<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanOpenBisPartitionBootPartition2Root || 3 || [[#OpenBisStorage]] | + | | 0x18 || CanOpenBisPartitionUserDataRoot || 0x8000000000000080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x19 || 0x8000000000000080<br/>([6.0.0-6.2.0] 0x8000000000010080) || CanOpenBisPartitionUserDataRoot || 3 || [[#OpenBisStorage]] | + | | 0x19 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 0x8000000000010080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1A || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 3 || [[#OpenBisStorage]] | + | | 0x1A || CanOpenBisPartitionBootConfigAndPackage2Part2 || 0x8000000000010080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1B || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part2 || 3 || [[#OpenBisStorage]] | + | | 0x1B || CanOpenBisPartitionBootConfigAndPackage2Part3 || 0x8000000000010080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1C || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part3 || 3 || [[#OpenBisStorage]] | + | | 0x1C || CanOpenBisPartitionBootConfigAndPackage2Part4 || 0x8000000000010080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1D || 0x8000000000010080<br/>([1.0.0-2.3.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part4 || 3 || [[#OpenBisStorage]] | + | | 0x1D || CanOpenBisPartitionBootConfigAndPackage2Part5 || 0x8000000000010080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1E || 0x8000000000010080<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part5 || 3 || [[#OpenBisStorage]] | + | | 0x1E || CanOpenBisPartitionBootConfigAndPackage2Part6 || 0x8000000000010080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x1F || 0x8000000000010080<br/>([6.0.0-6.2.0] 0x8000000000000084)<br/>([1.0.0-2.3.0] 0x8000000000000080) || CanOpenBisPartitionBootConfigAndPackage2Part6 || 3 || [[#OpenBisStorage]] | + | | 0x1F || CanOpenBisPartitionCalibrationBinary || 0x8000000000000084 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x20 || 0x8000000000000084<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationBinary || 3 || [[#OpenBisStorage]] | + | | 0x20 || CanOpenBisPartitionCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x21 || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationFile || 3 || [[#OpenBisStorage]] | + | | 0x21 || CanOpenBisPartitionSafeMode || 0x8000000000000080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x22 || 0x8000000000000080 || CanOpenBisPartitionSafeMode || 3 || [[#OpenBisStorage]] | + | | 0x22 || CanOpenBisPartitionUser || 0x8000000000000080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x23 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanOpenBisPartitionUser || 3 || [[#OpenBisStorage]] | + | | 0x23 || CanOpenBisPartitionSystem || 0x8000000000000080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x24 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0x8000000000000100) || CanOpenBisPartitionSystem || 3 || [[#OpenBisStorage]] | + | | 0x24 || CanOpenBisPartitionSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 0x25 || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000100008) || CanOpenBisPartitionSystemProperEncryption || 3 || [[#OpenBisStorage]] | + | | 0x25 || CanOpenBisPartitionSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | 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]] | + | | 0x26 || CanOpenBisPartitionDeviceTreeBlob || 0x8000002000000080 || RW || [[#OpenBisStorage]] |
| |- | | |- |
− | | [3.0.0+] 0x27 || 0xC000000000200000<br/>([6.0.0-6.2.0] 0x8000000000000100)<br/>([3.0.0-5.1.0] 0x8000000000100008) || CanOpenSdCardStorage || || | + | | [3.0.0+] 0x27 || CanOpenSdCardStorage || 0xC000000000200000 || RW || |
| |- | | |- |
− | | [3.0.0+] 0x28 || 0x8000000000000100<br/>([6.0.0-6.2.0] 0x8000000000100008)<br/>([3.0.0-5.1.0] 0xC000000000400000) || CanOpenGameCardStorage || 3 || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1) | + | | [3.0.0+] 0x28 || CanOpenGameCardStorage || 0x8000000000000100 || RW || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1) |
| |- | | |- |
− | | [4.0.0+] 0x29 || 0x8000000000100008<br/>([6.0.0-6.2.0] 0xC000000000400000)<br/>([4.0.0-5.1.0] 0x8000000000010000) || CanMountSystemDataPrivate || 1 || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]] | + | | [4.0.0+] 0x29 || CanMountSystemDataPrivate || 0x8000000000100008 || R- || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]] |
| |- | | |- |
− | | [5.0.0+] 0x2A || 0xC000000000400000<br/>([6.0.0-6.2.0] 0x8000000000010000)<br/>([5.0.0-5.1.0] 0x8000000000000000) || CanMountHost || 3 || [[#OpenHostFileSystem]] | + | | [5.0.0+] 0x2A || CanMountHost || 0xC000000000400000 || RW || [[#OpenHostFileSystem]] |
| |- | | |- |
− | | [6.0.0+] 0x2B || 0x8000000000010000<br/>([6.0.0-6.2.0] 0x8000000000000000) || CanMountRegisteredUpdatePartition || 1 || [[#OpenRegisteredUpdatePartition]] | + | | [6.0.0+] 0x2B || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]] |
| |- | | |- |
− | | [7.0.0+] 0x2C || 0x8000000000000000 || CanOpenSaveDataInternalStorage || 3 || [[#OpenSaveDataInternalStorageFileSystem]] | + | | [7.0.0+] 0x2C || CanOpenSaveDataInternalStorage || 0x8000000000000000 || RW || [[#OpenSaveDataInternalStorageFileSystem]] |
| |- | | |- |
− | | [7.0.0+] 0x2D || 0x0000000000000000 || CanNotMountCustomStorage || 3 || OpenCustomStorageFileSystem | + | | [7.0.0+] 0x2D || CanMountTemporaryDirectory || 0xC000000000000000 || RW || |
| + | |- |
| + | | [11.0.0+] 0x2E || CanMountAllBaseFilesystem || 0x8000000000000000 || RW || OpenBaseFileSystem |
| + | |- |
| + | | [15.0.0+] 0x2F || CanNotMount || 0x0000000000000000 || -- || OpenCustomStorageFileSystem |
| |} | | |} |
| | | |
Line 393: |
Line 451: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! OperationType || Mask || Name || Used by | + | ! OperationType || Name || Mask || Used by |
| |- | | |- |
− | | 0x0 || 0x8000000000000080 || CanInvalidateBisCache || [[#InvalidateBisCache]] | + | | 0x0 || CanInvalidateBisCache || 0x8000000000000080 || [[#InvalidateBisCache]] |
| |- | | |- |
− | | 0x1 || 0x8000000000000080 || CanEraseMmc || EraseMmc | + | | 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc |
| |- | | |- |
− | | 0x2 || 0x8000000000000010 || CanGetGameCardDeviceCertificate || GetGameCardDeviceCertificate | + | | 0x2 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate |
| |- | | |- |
− | | 0x3 || 0x8000000000000010 || CanGetGameCardIdSet || GetGameCardIdSet | + | | 0x3 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet |
| |- | | |- |
− | | 0x4 || 0x8000000000000200 || CanFinalizeGameCardDriver || FinalizeGameCardDriver | + | | 0x4 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver |
| |- | | |- |
− | | 0x5 || 0x8000000000000200 || CanGetGameCardAsicInfo || GetGameCardAsicInfo | + | | 0x5 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo |
| |- | | |- |
− | | 0x6 || 0x8000000000002020 || CanCreateSaveData || [[#CreateSaveDataFileSystem]] | + | | 0x6 || CanGetGameCardAsicCertificate || 0x8000000000000200 || GetGameCardAsicCertificate |
| |- | | |- |
− | | 0x7 || 0x8000000000000060 || CanDeleteSaveData || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion | + | | 0x7 || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]] |
| |- | | |- |
− | | 0x8 || 0x8000000000000028 || CanCreateSystemSaveData || CreateSaveDataFileSystemBySystemSaveDataId | + | | 0x8 || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion |
| |- | | |- |
− | | 0x9 || 0x8000000000000020 || CanCreateOthersSystemSaveData || CreateSaveDataFileSystemBySystemSaveDataId | + | | 0x9 || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId |
| |- | | |- |
− | | 0xA || 0x8000000000004028 || CanDeleteSystemSaveData || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion | + | | 0xA || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId |
| |- | | |- |
− | | 0xB || 0x8000000000000060 || CanOpenSaveDataInfoReader || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | + | | 0xB || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion |
| |- | | |- |
− | | 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | + | | 0xC || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] |
| |- | | |- |
− | | 0xD || 0x8000000000000040<br/>([1.0.0-5.1.0] 0x8000000000020000) || CanOpenSaveDataInfoReaderForInternal || [[#OpenSaveDataInfoReaderWithFilter]] | + | | 0xD || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] |
| |- | | |- |
− | | 0xE || 0x8000000000020000<br/>([1.0.0-5.1.0] 0x8000000000000400) || CanOpenSaveDataMetaFile || OpenSaveDataMetaFile | + | | 0xE || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]] |
| |- | | |- |
− | | 0xF || 0x8000000000000400<br/>([1.0.0-5.1.0] 0x8000000000004060) || CanSetCurrentPosixTime || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference | + | | 0xF || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile |
| |- | | |- |
− | | 0x10 || 0x8000000000004060<br/>([1.0.0-5.1.0] 0x8000000000080000) || CanReadSaveDataFileSystemExtraData || [[#ReadSaveDataFileSystemExtraData]] | + | | 0x10 || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference |
| |- | | |- |
− | | 0x11 || 0x8000000000080000 || CanSetGlobalAccessLogMode || [[#SetGlobalAccessLogMode]] | + | | 0x11 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]] |
| |- | | |- |
− | | 0x12 || 0x8000000000080000<br/>([1.0.0-5.1.0] Invalid) || CanSetSpeedEmulationMode || SetSpeedEmulationMode | + | | 0x12 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]] |
| |- | | |- |
− | | 0x13 || Invalid<br/>([1.0.0-5.1.0] 0xC000000000800000) || || | + | | 0x13 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode |
| |- | | |- |
− | | 0x14 || 0xC000000000800000<br/>([1.0.0-5.1.0] 0xC000000001000000) || CanFillBis || CreatePaddingFile, DeleteAllPaddingFiles | + | | 0x14 || CanDebug || 0xC000000000000000 || |
| |- | | |- |
− | | 0x15 || 0xC000000001000000<br/>([5.0.0-5.1.0] 0x8000000001000060)<br/>([1.0.0-4.1.0] 0xC000000002000000) || CanCorruptSaveData || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId | + | | 0x15 || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles |
| |- | | |- |
− | | [2.0.0+] 0x16 || 0x8000000001000060<br/>([5.0.0-5.1.0] 0x8000000000000060)<br/>([2.0.0-4.1.0] 0x8000000004000000) || CanCorruptSystemSaveData || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId | + | | [2.0.0+] 0x16 || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId |
| |- | | |- |
− | | [2.0.0+] 0x17 || 0x8000000000000060<br/>([5.0.0-5.1.0] 0xC000000002000000)<br/>([2.0.0-4.1.0] 0x8000000008000000) || CanVerifySaveData || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId | + | | [2.0.0+] 0x17 || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId |
| |- | | |- |
− | | [2.0.0+] 0x18 || 0xC000000002000000<br/>([5.0.0-5.1.0] 0x8000000004000000)<br/>([2.0.0-4.1.0] 0x8000000010000000) || CanDebugSaveData || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]] | + | | [2.0.0+] 0x18 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId |
| |- | | |- |
− | | [2.0.0+] 0x19 || 0x8000000004000000<br/>([5.0.0-5.1.0] 0x8000000008000000)<br/>([2.0.0-4.1.0] 0x8000000000000800) || CanFormatSdCard || FormatSdCardFileSystem | + | | [2.0.0+] 0x19 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]] |
| |- | | |- |
− | | [2.0.0+] 0x1A || 0x8000000008000000<br/>([5.0.0-5.1.0] 0x8000000010000000)<br/>([2.0.0-4.1.0] 0x8000000000004020) || CanGetRightsId || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath | + | | [2.0.0+] 0x1A || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem |
| |- | | |- |
− | | [3.0.0+] 0x1B || 0x8000000010000000<br/>([5.0.0-5.1.0] 0x8000000000000800)<br/>([3.0.0-4.1.0] 0x8000000000002020) || CanRegisterExternalKey || RegisterExternalKey, UnregisterAllExternalKey | + | | [3.0.0+] 0x1B || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath |
| |- | | |- |
− | | [3.0.0+] 0x1C || 0x8000000000000800<br/>([5.0.0-5.1.0] 0x8000000000004020)<br/>([3.0.0-4.1.0] 0x8000000000000028) || CanSetEncryptionSeed || [[#SetSdCardEncryptionSeed]] | + | | [3.0.0+] 0x1C || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey |
| |- | | |- |
− | | [4.0.0+] 0x1D || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000000)<br/>([4.0.0-4.1.0] 0x8000000020000000) || CanWriteSaveDataFileSystemExtraDataTimeStamp || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | + | | [4.0.0+] 0x1D || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]] |
| |- | | |- |
− | | [4.0.0+] 0x1E || 0x8000000000004020<br/>([5.0.0-5.1.0] 0x8000000000002020)<br/>([4.0.0-4.1.0] 0x8000000040000000) || CanWriteSaveDataFileSystemExtraDataFlags || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | + | | [4.0.0+] 0x1E || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [4.0.0+] 0x1F || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000028)<br/>([4.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataCommitId || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | + | | [4.0.0+] 0x1F || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [4.0.0+] 0x20 || 0x8000000000000000<br/>([5.0.0-5.1.0] 0x8000000020000000)<br/>([4.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataAll || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | + | | [4.0.0+] 0x20 || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [5.0.0+] 0x21 || 0x8000000000002020<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanExtendSaveData || ExtendSaveDataFileSystem | + | | [5.0.0+] 0x21 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [5.0.0+] 0x22 || 0x8000000000000028<br/>([1.0.0-5.1.0] 0x0000000080000002) || CanExtendSystemSaveData || ExtendSaveDataFileSystem | + | | [5.0.0+] 0x22 || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem |
| |- | | |- |
− | | [5.0.0+] 0x23 || 0x8000000020000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanRegisterUpdatePartition || RegisterUpdatePartition | + | | [5.0.0+] 0x23 || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem |
| |- | | |- |
− | | [5.0.0+] 0x24 || 0x8000000040000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanOpenSaveDataTransferManager || [[#OpenSaveDataTransferManager]] | + | | [5.0.0+] 0x24 || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem |
| |- | | |- |
− | | [5.0.0+] 0x25 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanOpenSaveDataTransferManagerVersion2 || [[#OpenSaveDataTransferManagerVersion2]] | + | | [5.0.0+] 0x25 || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition |
| |- | | |- |
− | | [5.0.0+] 0x26 || 0x8000000200000000<br/>([6.0.0-8.1.0] 0x8000000200002000)<br/>([5.0.0-5.1.0] 0x8000000080000110) || CanOpenSaveDataTransferManagerForSaveDataRepair || OpenSaveDataTransferManagerForSaveDataRepair | + | | [5.0.0+] 0x26 || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]] |
| |- | | |- |
− | | [5.0.0+] 0x27 || 0x8000000000000000<br/>([8.0.0-8.1.0] 0x8000000240002000)<br/>([6.0.0-7.0.1] 0x8000000200002000)<br/>([5.0.0-5.1.0] 0x8000000000100008) || CanOpenSaveDataTransferManagerForSaveDataRepairTool || OpenSaveDataTransferManagerForSaveDataRepair | + | | [5.0.0+] 0x27 || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]] |
| |- | | |- |
− | | [5.0.0+] 0x28 || 0x8000000200002000<br/>([6.0.0-8.1.0] 0x8000000000000000)<br/>([5.0.0-5.1.0] 0x8000000080010000) || CanOpenOpenSaveDataTransferProhibiter || [[#OpenSaveDataTransferProhibiter]] | + | | [5.0.0+] 0x28 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair |
| |- | | |- |
− | | [5.0.0+] 0x29 || 0x8000000240002000<br/>([6.0.0-8.1.0] 0x8000000000000000)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanListAccessibleSaveDataOwnerId || [[#ListAccessibleSaveDataOwnerId]] | + | | [5.0.0+] 0x29 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair |
| |- | | |- |
− | | [5.0.0+] 0x2A || 0x8000000000000000<br/>([6.0.0-8.1.0] 0x8000000080200000)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanControlMmcPatrol || SuspendMmcPatrol, ResumeMmcPatrol | + | | [5.0.0+] 0x2A || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]] |
| |- | | |- |
− | | [5.0.0+] 0x2B || 0x8000000000000000<br/>([6.0.0-8.1.0] 0x8000000080000110)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanOverrideSaveDataTransferTokenSignVerificationKey || OverrideSaveDataTransferTokenSignVerificationKey | + | | [5.0.0+] 0x2B || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]] |
| |- | | |- |
− | | [5.0.0+] 0x2C || 0x8000000080200000<br/>([6.0.0-8.1.0] 0x8000000000100008)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanOpenSdCardDetectionEventNotifier || [[#OpenSdCardDetectionEventNotifier]] | + | | [5.0.0+] 0x2C || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]] |
| |- | | |- |
− | | [5.0.0+] 0x2D || 0x8000000080000110<br/>([6.0.0-8.1.0] 0x8000000000010000)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanOpenGameCardDetectionEventNotifier || [[#OpenGameCardDetectionEventNotifier]] | + | | [5.0.0+] 0x2D || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]] |
| |- | | |- |
− | | [5.0.0+] 0x2E || 0x8000000000100008<br/>([6.0.0-8.1.0] 0x8000000100000000)<br/>([5.0.0-5.1.0] 0x8000000040000000) || CanOpenSystemDataUpdateEventNotifier || OpenSystemDataUpdateEventNotifier | + | | [5.0.0+] 0x2E || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol |
| |- | | |- |
− | | [5.0.0+] 0x2F || 0x8000000000010000<br/>([6.0.0-8.1.0] 0x8000000100000000)<br/>([5.0.0-5.1.0] 0x8000000080200000) || CanNotifySystemDataUpdateEvent || NotifySystemDataUpdateEvent | + | | [5.0.0+] 0x2F || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey |
| |- | | |- |
− | | [5.1.0+] 0x30 || 0x8000000100000000<br/>([5.1.0-6.0.0] 0x8000000080080000) || CanOpenAccessFailureDetectionEventNotifier || [[#OpenAccessFailureDetectionEventNotifier]] | + | | [5.1.0+] 0x30 || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]] |
| |- | | |- |
− | | [6.0.0+] 0x31 || 0x8000000100000000 || CanGetAccessFailureDetectionEvent || GetAccessFailureDetectionEvent | + | | [6.0.0+] 0x31 || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]] |
| |- | | |- |
− | | [6.0.0+] 0x32 || 0x8000000100000000 || CanIsAccessFailureDetected || IsAccessFailureDetected | + | | [6.0.0+] 0x32 || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier |
| |- | | |- |
− | | [6.0.0+] 0x33 || 0x8000000100000000<br/>([6.0.0-8.1.0] 0x8000000040000000) || CanResolveAccessFailure || ResolveAccessFailure | + | | [6.0.0+] 0x33 || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent |
| |- | | |- |
− | | [6.0.0+] 0x34 || 0x8000000100000000<br/>([6.0.0-8.1.0] 0x8000000200000020) || CanAbandonAccessFailure || AbandonAccessFailure | + | | [6.0.0+] 0x34 || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]] |
| |- | | |- |
− | | [6.0.0+] 0x35 || 0x8000000040000000<br/>([6.0.0-8.1.0] 0x8000000000200000) || CanQuerySaveDataInternalStorageTotalSize || QuerySaveDataInternalStorageTotalSize | + | | [6.0.0+] 0x35 || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent |
| |- | | |- |
− | | [6.0.0+] 0x36 || 0x8000000200000020<br/>([6.0.0-8.1.0] 0x4000000000000000) || CanGetSaveDataCommitId || [[#GetSaveDataCommitId]] | + | | [6.0.0+] 0x36 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected |
| |- | | |- |
− | | [6.0.0+] 0x37 || 0x8000000000200000<br/>([7.0.0-8.1.0] 0x8000000000000000)<br/>([6.0.0-6.2.0] 0x8000000000080000) || CanSetSdCardAccessibility || SetSdCardAccessibility | + | | [6.0.0+] 0x37 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure |
| |- | | |- |
− | | [6.0.0+] 0x38 || 0x4000000000000000<br/>([7.0.0-8.1.0] 0x8000000400000000)<br/>([6.0.0-6.2.0] 0x8000000000000000) || CanSimulateDevice || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent | + | | [6.0.0+] 0x38 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure |
| |- | | |- |
− | | [8.0.0+] 0x39 || 0x8000000000000000<br/>([8.0.0-8.1.0] 0x8000000000000010) || CanCreateSaveDataWithHashSalt || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]] | + | | [8.0.0+] 0x39 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize |
| |- | | |- |
− | | [9.0.0+] 0x3A || 0x8000000400000000 || CanRegisterProgramIndexMapInfo || RegisterProgramIndexMapInfo | + | | [9.0.0+] 0x3A || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]] |
| |- | | |- |
− | | [9.0.0+] 0x3B || 0x8000000000000010 || CanChallengeCardExistence || ChallengeCardExistence | + | | [9.0.0+] 0x3B || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility |
| |- | | |- |
− | | [9.0.0+] 0x3C || 0x8000000800000000 || CanCreateOwnSaveData || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt | + | | [9.0.0+] 0x3C || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent |
| |- | | |- |
− | | [9.0.0+] 0x3D || 0x8000000800000000 || CanReadOwnSaveDataFileSystemExtraData || [[#ReadSaveDataFileSystemExtraData]] | + | | [9.0.0+] 0x3D || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]] |
| |- | | |- |
− | | [9.0.0+] 0x3E || 0x8000000800000000 || CanExtendOwnSaveData || ExtendSaveDataFileSystem | + | | [9.0.0+] 0x3E || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo |
| |- | | |- |
− | | [9.0.0+] 0x3F || 0x8000000800000000 || CanOpenOwnSaveDataTransferProhibiter || [[#OpenSaveDataTransferProhibiter]] | + | | [9.0.0+] 0x3F || CanChallengeCardExistence || 0x8000000000000010 || ChallengeCardExistence |
| |- | | |- |
− | | [9.0.0+] 0x40 || 0x8000000800000000 || CanFindOwnSaveDataWithFilter || [[#FindSaveDataWithFilter]] | + | | [9.0.0+] 0x40 || CanCreateOwnSaveData || 0x8000000800000000 || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt |
− | |} | + | |- |
| + | | [9.0.0+] 0x41 || CanDeleteOwnSaveData || 0x8000000800000000 || [[#DeleteSaveDataFileSystem]] |
| + | |- |
| + | | [10.0.0+] 0x42 || CanReadOwnSaveDataFileSystemExtraData || 0x8000000800000000 || [[#ReadSaveDataFileSystemExtraData]] |
| + | |- |
| + | | [10.0.0+] 0x43 || CanExtendOwnSaveData || 0x8000000800000000 || ExtendSaveDataFileSystem |
| + | |- |
| + | | [10.2.0+] 0x44 || CanOpenOwnSaveDataTransferProhibiter || 0x8000000800000000 || [[#OpenSaveDataTransferProhibiter]] |
| + | |- |
| + | | [11.0.0+] 0x45 || CanFindOwnSaveDataWithFilter || 0x8000000800000000 || [[#FindSaveDataWithFilter]] |
| + | |- |
| + | | [13.0.0+] 0x46 || CanOpenSaveDataTransferManagerForRepair || 0x8000000000000020 || [[#OpenSaveDataTransferManagerForRepair]] |
| + | |- |
| + | | [13.0.0+] 0x47 || CanSetDebugConfiguration || 0x8000000000000000 || SetDebugOption, UnsetDebugOption |
| + | |- |
| + | | [15.0.0+] 0x48 || CanOpenDataStorageByPath || 0x8000000000000000 || OpenDataStorageByPath |
| + | |- |
| + | | [17.0.0+] 0x49 || CanNotifyErrorContextServiceReady || 0x8000004000000000 || NotifyErrorContextServiceReady |
| + | |- |
| + | | [17.0.0+] 0x4A || CanGetProgramId || 0x8000000008000000 || GetProgramId |
| + | |} |
| | | |
| == OpenFileSystem == | | == OpenFileSystem == |
− | Takes a type-0x19 input [[#ContentPath]] and a [[#FileSystemType]] as parameters. Returns an [[#IFileSystem]]. | + | Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[#FileSystemProxyType]]. Returns an [[#IFileSystem]]. |
| | | |
| [2.0.0+] This function was removed. | | [2.0.0+] This function was removed. |
| | | |
| == SetCurrentProcess == | | == SetCurrentProcess == |
− | Takes a pid-descriptor. | + | Takes an input u64 ProcessId. No output. |
| | | |
| == OpenFileSystemWithPatch == | | == OpenFileSystemWithPatch == |
− | Takes an input [[#FileSystemType]] and an u64 title-id. Returns an [[#IFileSystem]]. | + | Takes an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]]. |
| | | |
− | Web-applet loads the [[#FileSystemType]] (which must be '''ContentManual''') from u32_table[inparam]. | + | Web-applet loads the [[#FileSystemProxyType]] (which must be '''Manual''') from u32_table[inparam]. |
| | | |
| Note: web-applet strings refer to both this cmd and [[#OpenFileSystemWithId]] as "MountContent", but official nn_sf_sync symbols use "OpenXX" names. | | Note: web-applet strings refer to both this cmd and [[#OpenFileSystemWithId]] as "MountContent", but official nn_sf_sync symbols use "OpenXX" names. |
| | | |
− | == OpenFileSystemWithId == | + | == OpenFileSystemWithIdObsolete == |
− | Takes a type-0x19 input buffer, an [[#FileSystemType]] and an u64 title-id. Returns an [[#IFileSystem]]. | + | Takes a type-0x19 input buffer containing a [[#FspPath]], an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]]. |
| | | |
− | The [[#IFileSystem]] must be '''ContentMeta''' if the NCA type is 0 (control). | + | The [[#IFileSystem]] must be '''Meta''' if the NCA type is 0. |
| | | |
| The input buffer is the output string path from [[NS_Services#GetApplicationContentPath|GetApplicationContentPath]]. | | The input buffer is the output string path from [[NS_Services#GetApplicationContentPath|GetApplicationContentPath]]. |
Line 550: |
Line 628: |
| May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn't inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles. | | May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn't inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles. |
| | | |
− | The official "MountApplicationPackage" func uses this with in64=0 and [[#FileSystemType]] '''ApplicationPackage'''. | + | The official "MountApplicationPackage" func uses this with in64=0 and [[#FileSystemProxyType]] '''Package'''. |
| + | |
| + | After the [[#FileSystemProxyType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0. |
| | | |
− | After the [[#FileSystemType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0.
| + | When [[#FileSystemProxyType]] is '''Meta''', it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA [[NCM_services#ProgramId|ProgramId]], then an error is thrown on mismatch. |
| | | |
− | When [[#FileSystemType]] is '''ContentMeta''', it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA [[NCM_services#ProgramId|ProgramId]], then an error is thrown on mismatch.
| + | == OpenFileSystemWithId == |
| + | Takes a type-0x19 input buffer containing a [[#FspPath]], an input [[#ContentAttributes]], an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]]. |
| | | |
| == OpenBisFileSystem == | | == OpenBisFileSystem == |
− | Takes a type-0x19 input buffer string and a [[#BisPartitionId]]. Official user-process code sets instr[0] = 0 normally. Returns an [[#IFileSystem]]. | + | Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[#BisPartitionId]]. Returns an [[#IFileSystem]]. |
| + | |
| + | Official user-process code sets instr[0] = 0 normally. |
| | | |
| Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as [[#OpenBisStorage]] except this mounts the partition filesystem instead of allowing direct access to the partition sectors. | | Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as [[#OpenBisStorage]] except this mounts the partition filesystem instead of allowing direct access to the partition sectors. |
Line 571: |
Line 654: |
| | | |
| == CreateSaveDataFileSystem == | | == CreateSaveDataFileSystem == |
− | Takes a 0x40-byte [[#SaveDataAttribute]], a 0x40-byte [[#SaveDataCreationInfo]], and a 0x10-byte input struct. | + | Takes a 0x40-byte [[#SaveDataAttribute]], a 0x40-byte [[#SaveDataCreationInfo]], and a 0x10-byte input struct which governs creation of a saveMeta file. |
| | | |
− | Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060, +4 u8 = 1. | + | Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060 meta file size, +4 u8 = 1 meta index which dictates meta file name. |
| | | |
− | Creates regular savedata. | + | Creates non-system savedata. |
| | | |
| == CreateSaveDataFileSystemBySystemSaveDataId == | | == CreateSaveDataFileSystemBySystemSaveDataId == |
Line 608: |
Line 691: |
| | | |
| Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. | | Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. |
| + | |
| + | == OpenReadOnlySaveDataFileSystem == |
| + | Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]], and returns an [[#IFileSystem]]. |
| + | |
| + | Mounts SaveData as ReadOnly. |
| | | |
| == ReadSaveDataFileSystemExtraDataBySaveDataSpaceId == | | == ReadSaveDataFileSystemExtraDataBySaveDataSpaceId == |
Line 641: |
Line 729: |
| == OpenSaveDataTransferManagerForSaveDataRepair == | | == OpenSaveDataTransferManagerForSaveDataRepair == |
| No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]]. | | No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]]. |
| + | |
| + | == OpenSaveDataMover == |
| + | Takes 2 input [[#SaveDataSpaceId]], an input u64 size and a TransferMemory handle. Returns an output [[#ISaveDataMover]]. |
| + | |
| + | == OpenSaveDataTransferManagerForRepair == |
| + | No input, returns an output [[#ISaveDataTransferManagerForRepair]]. |
| | | |
| == OpenContentStorageFileSystem == | | == OpenContentStorageFileSystem == |
Line 689: |
Line 783: |
| 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 (however in some cases the byte at offset 0x20 is value 0x1). | + | [[NS_Services|NS]]-module reads the 0x10 bytes from SdCard:/Nintendo/Contents/private, and compares them to the first 0x10 bytes of the ns_appman:/private (in [[Flash_Filesystem#System_Savegames|system savedata]] 0x8000000000000043). If they match, NS calls this command using bytes 0x10-0x20 from ns_appman:/private. The rest of this file (0x1F0 bytes total) is all-zero except for the byte at offset 0x20. This byte is set to 1 by NS if the SD card has been mounted successfully and is subsequently passed to SetSdCardAccessibility. |
| | | |
| == OpenAccessFailureDetectionEventNotifier == | | == OpenAccessFailureDetectionEventNotifier == |
Line 735: |
Line 829: |
| == OpenMultiCommitManager == | | == OpenMultiCommitManager == |
| No input, returns an output [[#IMultiCommitManager]]. | | No input, returns an output [[#IMultiCommitManager]]. |
| + | |
| + | == OpenBisWiper == |
| + | Takes an input u64 size and a TransferMemory handle. Returns an output [[#IWiper]]. |
| | | |
| = IStorage = | | = IStorage = |
Line 778: |
Line 875: |
| There are two main implementations of this interface: | | There are two main implementations of this interface: |
| | | |
− | * '''RomFS''': Filesystem implementation statically linked in the binary. Uses an [[#IStorage]] interface as underlying raw device. | + | * '''nn::fs::fsa::IFileSystem''': The main IFileSystem implementation. Filesystem classes implement this interface, and FS code usually operates on this interface. |
− | * '''IPC proxy''': Used for all non-RomFS filesystems. In this case, actual filesystem implementation is in the FS process. | + | * '''nn::fssrv::sf::IFileSystem''': Used for sending an IFileSystem over IPC. Not used outside of IPC code. |
| + | |
| + | There are two adapter classes to convert between these interfaces: |
| + | |
| + | * '''nn::fssrv::detail::FileSystemInterfaceAdapter''': Allows access to an nn::fs::fsa::IFileSystem via the nn::fssrv::sf::IFileSystem interface. |
| + | * '''nn::fs::detail::FileSystemServiceObjectAdapter''': Allows access to an nn::fssrv::sf::IFileSystem via the nn::fs::fsa::IFileSystem interface. |
| + | |
| + | When the FS process returns a filesystem, it will wrap the filesystem object in a FileSystemInterfaceAdapter to return it over IPC. |
| + | Then when FS application code receives that filesystem, it will wrap the nn::fssrv::sf::IFileSystem object in a FileSystemServiceObjectAdapter before using it. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 816: |
Line 921: |
| |- | | |- |
| | 15 || [4.0.0+] QueryEntry | | | 15 || [4.0.0+] QueryEntry |
| + | |- |
| + | | 16 || [15.0.0+] GetFileSystemAttribute |
| |} | | |} |
| | | |
Line 918: |
Line 1,025: |
| |- | | |- |
| | 5 || [4.0.0+] OperateRange | | | 5 || [4.0.0+] OperateRange |
| + | |- |
| + | | 6 || [12.0.0+] OperateRangeWithBuffer |
| |} | | |} |
| | | |
Line 942: |
Line 1,051: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || IsSdCardInserted | + | | 0 || [[#IsSdCardInserted]] |
| |- | | |- |
− | | 1 || GetSdCardSpeedMode | + | | 1 || [[#GetSdCardSpeedMode]] |
| |- | | |- |
− | | 2 || [2.0.0+] GetSdCardCid | + | | 2 || [2.0.0+] [[#GetSdCardCid]] |
| |- | | |- |
− | | 3 || [2.0.0+] GetSdCardUserAreaSize | + | | 3 || [2.0.0+] [[#GetSdCardUserAreaSize]] |
| |- | | |- |
− | | 4 || [2.0.0+] GetSdCardProtectedAreaSize | + | | 4 || [2.0.0+] [[#GetSdCardProtectedAreaSize]] |
| |- | | |- |
− | | 5 || [2.0.0+] GetAndClearSdCardErrorInfo | + | | 5 || [2.0.0+] [[#GetAndClearSdCardErrorInfo]] |
| |- | | |- |
− | | 100 || GetMmcCid | + | | 6 || [17.0.0+] [[#GetSdCardHostControllerStatus]] |
| |- | | |- |
− | | 101 || GetMmcSpeedMode | + | | 100 || [[#GetMmcCid]] |
| |- | | |- |
− | | 110 || EraseMmc | + | | 101 || [[#GetMmcSpeedMode]] |
| |- | | |- |
− | | 111 || GetMmcPartitionSize | + | | 110 || [[#EraseMmc]] |
| |- | | |- |
− | | 112 || [2.0.0+] GetMmcPatrolCount | + | | 111 || [[#GetMmcPartitionSize]] |
| |- | | |- |
− | | 113 || [2.0.0+] GetAndClearMmcErrorInfo | + | | 112 || [2.0.0+] [[#GetMmcPatrolCount]] |
| |- | | |- |
− | | 114 || [2.0.0+] GetMmcExtendedCsd | + | | 113 || [2.0.0+] [[#GetAndClearMmcErrorInfo]] |
| |- | | |- |
− | | 115 || [4.0.0+] SuspendMmcPatrol | + | | 114 || [2.0.0+] [[#GetMmcExtendedCsd]] |
| |- | | |- |
− | | 116 || [4.0.0+] ResumeMmcPatrol | + | | 115 || [4.0.0+] [[#SuspendMmcPatrol]] |
| + | |- |
| + | | 116 || [4.0.0+] [[#ResumeMmcPatrol]] |
| + | |- |
| + | | 117 || [17.0.0+] [[#EraseMmcWithRange]] |
| |- | | |- |
| | 200 || [[#IsGameCardInserted]] | | | 200 || [[#IsGameCardInserted]] |
| |- | | |- |
− | | 201 || EraseGameCard | + | | 201 || [[#EraseGameCard]] |
| |- | | |- |
| | 202 || [[#GetGameCardHandle]] | | | 202 || [[#GetGameCardHandle]] |
Line 980: |
Line 1,093: |
| | 203 || [[#GetGameCardUpdatePartitionInfo]] | | | 203 || [[#GetGameCardUpdatePartitionInfo]] |
| |- | | |- |
− | | 204 || FinalizeGameCardDriver | + | | 204 || [[#FinalizeGameCardDriver]] |
| |- | | |- |
− | | 205 || GetGameCardAttribute | + | | 205 || [[#GetGameCardAttribute]] |
| |- | | |- |
| | 206 || [[#GetGameCardDeviceCertificate]] | | | 206 || [[#GetGameCardDeviceCertificate]] |
| |- | | |- |
− | | 207 || GetGameCardAsicInfo | + | | 207 || [[#GetGameCardAsicInfo]] |
| |- | | |- |
− | | 208 || GetGameCardIdSet | + | | 208 || [[#GetGameCardIdSet]] |
| |- | | |- |
− | | 209 || WriteToGameCardDirectly | + | | 209 || [[#WriteToGameCardDirectly]] |
| |- | | |- |
− | | 210 || SetVerifyWriteEnalbleFlag | + | | 210 || [[#SetVerifyWriteEnalbleFlag]] |
| |- | | |- |
− | | 211 || GetGameCardImageHash | + | | 211 || [[#GetGameCardImageHash]] |
| |- | | |- |
− | | 212 || [2.0.0+] GetGameCardDeviceIdForProdCard | + | | 212 || [2.0.0+] [[#GetGameCardDeviceIdForProdCard]] |
| |- | | |- |
− | | 213 || [2.0.0+] EraseAndWriteParamDirectly | + | | 213 || [2.0.0+] [[#EraseAndWriteParamDirectly]] |
| |- | | |- |
− | | 214 || [2.0.0+] ReadParamDirectly | + | | 214 || [2.0.0+] [[#ReadParamDirectly]] |
| |- | | |- |
− | | 215 || [2.0.0+] ForceEraseGameCard | + | | 215 || [2.0.0+] [[#ForceEraseGameCard]] |
| |- | | |- |
− | | 216 || [2.0.0+] GetGameCardErrorInfo | + | | 216 || [2.0.0+] [[#GetGameCardErrorInfo]] |
| |- | | |- |
− | | 217 || [2.1.0+] GetGameCardErrorReportInfo | + | | 217 || [2.1.0+] [[#GetGameCardErrorReportInfo]] |
| |- | | |- |
− | | 218 || [3.0.0+] GetGameCardDeviceId | + | | 218 || [3.0.0+] [[#GetGameCardDeviceId]] |
| |- | | |- |
| | 219 || [8.0.0+] [[#ChallengeCardExistence]] | | | 219 || [8.0.0+] [[#ChallengeCardExistence]] |
Line 1,014: |
Line 1,127: |
| | 220 || [9.0.0+] [[#GetGameCardCompatibilityType]] | | | 220 || [9.0.0+] [[#GetGameCardCompatibilityType]] |
| |- | | |- |
− | | 300 || SetSpeedEmulationMode | + | | 221 || [17.0.0+] [[#GetGameCardAsicCertificate]] |
| + | |- |
| + | | 222 || [18.0.0+] [[#GetGameCardCardHeader]] |
| |- | | |- |
− | | 301 || GetSpeedEmulationMode | + | | 223 || [19.0.0+] [[#SetGameCardSessionCreationDelay]] |
| |- | | |- |
− | | 400 || [5.0.0+] SuspendSdmmcControl | + | | 224 || [19.0.0+] [[#GetGameCardApplicationIdList]] |
| |- | | |- |
− | | 401 || [5.0.0+] ResumeSdmmcControl | + | | 300 || [[#SetSpeedEmulationMode]] |
| + | |- |
| + | | 301 || [[#GetSpeedEmulationMode]] |
| + | |- |
| + | | 302 || [18.0.0+] [[#SetApplicationStorageSpeed]] |
| + | |- |
| + | | 400 || [5.0.0+] [[#SuspendSdmmcControl]] |
| + | |- |
| + | | 401 || [5.0.0+] [[#ResumeSdmmcControl]] |
| |- | | |- |
| | 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]] | | | 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]] |
Line 1,029: |
Line 1,152: |
| |} | | |} |
| | | |
− | == IsGameCardInserted == | + | == IsSdCardInserted == |
− | No input, returns a bool. | + | No input. Returns an output bool. |
| + | |
| + | == GetSdCardSpeedMode == |
| + | No input. Returns an output [[#SdCardSpeedMode]]. |
| + | |
| + | == GetSdCardCid == |
| + | Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output. |
| + | |
| + | == GetSdCardUserAreaSize == |
| + | No input. Returns an output s64 '''SdCardUserAreaSize'''. |
| | | |
− | == GetGameCardHandle == | + | == GetSdCardProtectedAreaSize == |
− | No input, returns an u32 '''GameCardHandle'''. | + | No input. Returns an output s64 '''SdCardProtectedAreaSize'''. |
| | | |
− | == GetGameCardUpdatePartitionInfo == | + | == GetAndClearSdCardErrorInfo == |
− | Returns a [[NCM_services#ProgramId|ProgramId]] and the title-version for it. | + | Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''. |
| | | |
− | * Output u32 with ARMS-gamecard: title-version v131162. This is the title-version for [[2.1.0]], which is the sysupdate included with this gamecard. Launch-day gamecards return title-version v450.
| + | == GetSdCardHostControllerStatus == |
− | * Output u64 with ARMS-gamecard: [[NCM_services#ProgramId|ProgramId]] 0100000000000816.
| + | No input. Returns an output [[#HostControllerStatus]]. |
| | | |
− | [[NS_Services|NS]] appears to only use this with [[NCM_services|NCM]] for checking whether a sysupdate is required.
| + | == GetMmcCid == |
| + | Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output. |
| | | |
− | == GetGameCardDeviceCertificate == | + | == GetMmcSpeedMode == |
− | Takes a type-0x6 output buffer, an u32 '''GameCardHandle''' and an u64 '''DeviceCertificateBufferSize'''. No output.
| + | No input. Returns an output [[#MmcSpeedMode]]. |
| | | |
− | == ChallengeCardExistence == | + | == EraseMmc == |
− | Takes a type-0x6 output buffer, two type-0x5 input buffers and an u32 '''GameCardHandle'''. No output. | + | Takes an input [[#MmcPartition]]. No output. |
| | | |
− | [9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]]. | + | == GetMmcPartitionSize == |
| + | Takes an input [[#MmcPartition]]. Returns an output s64 '''MmcPartitionSize'''. |
| | | |
− | == GetGameCardCompatibilityType == | + | == GetMmcPatrolCount == |
− | Takes an u32 '''GameCardHandle''', returns an u8 '''CompatibilityType''' (0x00 = Global, 0x01 = China) from [[Gamecard_Format#Gamecard_Info|Gamecard Info]].
| + | No input. Returns an output u32 '''MmcPatrolCount'''. |
| | | |
− | == GetSdmmcConnectionStatus == | + | == GetAndClearMmcErrorInfo == |
− | Takes a total of 4-bytes of input, returns a total of 8-bytes of output. | + | Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''. |
| | | |
− | == SetDeviceSimulationEvent == | + | == GetMmcExtendedCsd == |
− | Takes a total of 0x14-bytes of input, no output. | + | Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output. |
| | | |
− | == ClearDeviceSimulationEvent == | + | == SuspendMmcPatrol == |
− | Takes a total of 4-bytes of input, no output.
| + | No input/output. |
| | | |
− | = IEventNotifier = | + | == ResumeMmcPatrol == |
− | This is "nn::fssrv::sf::IEventNotifier".
| + | No input/output. |
| | | |
− | {| class="wikitable" border="1"
| + | == EraseMmcWithRange == |
− | |-
| + | Takes an input [[#MmcPartition]] and two input u64s. No output. |
− | ! Cmd || Name
| |
− | |-
| |
− | | 0 || [[#GetEventHandle]]
| |
− | |}
| |
| | | |
− | == GetEventHandle == | + | == IsGameCardInserted == |
− | No input, returns an output Event handle. With official sw the EventClearMode is user-specified. | + | No input. Returns an output bool. |
| | | |
− | = ISaveDataTransferManager = | + | == EraseGameCard == |
− | This is "nn::fssrv::sf::ISaveDataTransferManager".
| + | Takes an input [[#GameCardSize]] and an input u64 '''NormalAreaSize'''. No output. |
| | | |
− | This was added with [[4.0.0]].
| + | == GetGameCardHandle == |
| + | No input. Returns an output [[#GameCardHandle]]. |
| | | |
− | {| class="wikitable" border="1"
| + | == GetGameCardUpdatePartitionInfo == |
− | |-
| + | Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardUpdatePartitionInfo]]. |
− | ! Cmd || Name
| + | |
− | |-
| + | == FinalizeGameCardDriver == |
− | | 0 || [[#GetChallenge]]
| + | No input/output. |
− | |-
| + | |
− | | 16 || [[#SetToken]]
| + | == GetGameCardAttribute == |
− | |-
| + | Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardAttribute]]. |
− | | 32 || [[#OpenSaveDataExporter]]
| + | |
− | |-
| + | == GetGameCardDeviceCertificate == |
− | | 64 || [[#OpenSaveDataImporter]]
| + | Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output. |
− | |}
| |
| | | |
− | == GetChallenge ==
| + | [19.0.0+] Now returns an output s64 '''OutSize''' which can be 0x200 or 0x400. |
− | No input/output, takes a type-0x6 output buffer.
| |
| | | |
− | == SetToken == | + | == GetGameCardAsicInfo == |
− | No input/output, takes a type-0x5 input buffer.
| + | Takes a type-0x5 input buffer '''FwBuffer''', a type-0x6 output buffer containing [[#RmaInformation]] and two input s64s '''FwBufferSize''' and '''RmaInformationSize'''. No output. |
| | | |
− | == OpenSaveDataExporter == | + | == GetGameCardIdSet == |
− | Takes an input u8 [[#SaveDataSpaceId]] and u64, returns an [[#ISaveDataExporter]]. | + | Takes a type-0x6 output buffer containing a [[#GameCardIdSet]] and an input s64 '''BufferSize'''. No output. |
| | | |
− | == OpenSaveDataImporter == | + | == WriteToGameCardDirectly == |
− | Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]]. | + | Takes a type-0x6 output buffer and two input s64s '''Offset''' and '''BufferSize'''. No output. |
| | | |
− | = ISaveDataTransferManagerForSaveDataRepair = | + | == SetVerifyWriteEnalbleFlag == |
− | This is "nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair".
| + | Takes an input bool. No output. |
| | | |
− | This was added with [[9.0.0]].
| + | == GetGameCardImageHash == |
| + | Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output. |
| | | |
− | {| class="wikitable" border="1"
| + | == GetGameCardDeviceIdForProdCard == |
− | |-
| + | Takes a type-0x5 input buffer '''CardHeaderForDev''', a type-0x6 output buffer and two input s64s '''CardHeaderForDevSize''' and '''BufferSize'''. No output. |
− | ! Cmd || Name
| |
− | |-
| |
− | | 0 || [[#GetChallenge]]
| |
− | |-
| |
− | | 16 || [[#SetKeyPackage]]
| |
− | |-
| |
− | | 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]]
| |
− | |-
| |
− | | 81 || [[#PrepareOpenSaveDataImporter]]
| |
− | |-
| |
− | | 90 || [[#OpenSaveDataImporter]]
| |
− | |-
| |
− | | 91 || [[#OpenSaveDataImporter2]]
| |
− | |-
| |
− | | 100 || [[#OpenSaveDataExporterWithKey]]
| |
− | |-
| |
− | | 110 || [[#OpenSaveDataImporterWithKey]]
| |
− | |}
| |
| | | |
− | == SetKeyPackage == | + | == EraseAndWriteParamDirectly == |
− | No input/output, takes a type-0x5 input buffer.
| + | Takes a type-0x5 input buffer and an input s64 '''BufferSize'''. No output. |
| | | |
− | == OpenSaveDataExporterAndGetEncryptedKey == | + | == ReadParamDirectly == |
− | Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]]. | + | Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output. |
| | | |
− | == PrepareOpenSaveDataImporter == | + | == ForceEraseGameCard == |
− | Takes a type-0x1A output buffer to receive a RsaEncryptedKey.
| + | No input/output. |
| | | |
− | == OpenSaveDataImporter == | + | == GetGameCardErrorInfo == |
− | Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]].
| + | No input. Returns an output [[#GameCardErrorInfo]]. |
| | | |
− | == OpenSaveDataImporter2 == | + | == GetGameCardErrorReportInfo == |
− | Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
| + | No input. Returns an output [[#GameCardErrorReportInfo]]. |
| | | |
− | == OpenSaveDataExporterWithKey == | + | == GetGameCardDeviceId == |
− | Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]]. | + | Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output. |
| | | |
− | == OpenSaveDataImporterWithKey == | + | == ChallengeCardExistence == |
− | Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | + | Takes a type-0x6 output buffer, two type-0x5 input buffers and an input [[#GameCardHandle]]. No output. |
| | | |
− | = ISaveDataExporter =
| + | [9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]]. |
− | This is "nn::fssrv::sf::ISaveDataExporter".
| |
| | | |
− | This was added with [[4.0.0]].
| + | == GetGameCardCompatibilityType == |
| + | Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardCompatibilityType]]. |
| | | |
− | {| class="wikitable" border="1"
| + | == GetGameCardAsicCertificate == |
− | |-
| + | Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output. |
− | ! Cmd || Name
| |
− | |-
| |
− | | 0 || [[#GetSaveDataInfo]]
| |
− | |-
| |
− | | 1 || [[#GetRestSize]]
| |
− | |-
| |
− | | 16 || [[#Pull]]
| |
− | |-
| |
− | | 17 || [[#PullInitialData]]
| |
− | |}
| |
| | | |
− | == GetSaveDataInfo == | + | == GetGameCardCardHeader == |
− | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer.
| + | Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output. |
| | | |
− | The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw.
| + | == SetGameCardSessionCreationDelay == |
| + | Takes two input bools and an input u32. No output. |
| | | |
− | == GetRestSize == | + | == GetGameCardApplicationIdList == |
− | No input, returns an output u64.
| + | Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. Returns an output u16. |
| | | |
− | == Pull == | + | == SetSpeedEmulationMode == |
− | Takes a type-0x6 output buffer, returns an output u64. | + | Takes an input [[#SpeedEmulationMode]]. No output. |
| | | |
− | == PullInitialData == | + | == GetSpeedEmulationMode == |
− | No input/output, takes a type-0x6 output buffer. | + | No input. Returns an output [[#SpeedEmulationMode]]. |
| | | |
− | = ISaveDataImporter = | + | == SetApplicationStorageSpeed == |
− | This is "nn::fssrv::sf::ISaveDataImporter".
| + | Takes an input s32. No output. |
| | | |
− | This was added with [[4.0.0]].
| + | == SuspendSdmmcControl == |
| + | No input/output. |
| + | |
| + | == ResumeSdmmcControl == |
| + | No input/output. |
| + | |
| + | == 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 = |
| + | This is "nn::fssrv::sf::IEventNotifier". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,194: |
Line 1,313: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#GetSaveDataInfo]] | + | | 0 || [[#GetEventHandle]] |
− | |-
| |
− | | 1 || [[#GetRestSize]]
| |
− | |-
| |
− | | 16 || [[#Push]]
| |
− | |-
| |
− | | 17 || [[#Finalize]]
| |
| |} | | |} |
| | | |
− | == GetSaveDataInfo == | + | == GetEventHandle == |
− | No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer. | + | No input, returns an output Event handle. With official sw the EventClearMode is user-specified. |
| | | |
− | The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw.
| + | = ISaveDataTransferManager = |
| + | This is "nn::fssrv::sf::ISaveDataTransferManager". |
| | | |
− | == GetRestSize ==
| + | This was added with [[4.0.0]]. |
− | No input, returns an output u64.
| |
| | | |
− | == Push ==
| + | {| class="wikitable" border="1" |
− | No input/output, takes a type-0x5 input buffer.
| |
− | | |
− | == Finalize ==
| |
− | No input/output.
| |
− | | |
− | = ISaveDataTransferManagerWithDivision =
| |
− | This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision".
| |
− | | |
− | This was added with [[5.0.0]].
| |
− | | |
− | {| class="wikitable" border="1" | |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
Line 1,228: |
Line 1,330: |
| | 0 || [[#GetChallenge]] | | | 0 || [[#GetChallenge]] |
| |- | | |- |
− | | 16 || [[#SetKeySeedPackage]] | + | | 16 || [[#SetToken]] |
| |- | | |- |
| | 32 || [[#OpenSaveDataExporter]] | | | 32 || [[#OpenSaveDataExporter]] |
| |- | | |- |
− | | 33 || [[#OpenSaveDataExporterForDiffExport]]
| + | | 64 || [[#OpenSaveDataImporter]] |
− | |-
| |
− | | 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]]
| |
− | |-
| |
− | |rowspan="2"| 64 || [5.0.0-5.1.0] OpenSaveDataImporter
| |
− | |-
| |
− | | [6.0.0+] [[#OpenSaveDataImporterDeprecated]]
| |
− | |-
| |
− | | 65 || [[#OpenSaveDataImporterForDiffImport]]
| |
− | |-
| |
− | | 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]]
| |
− | |-
| |
− | | 67 || [6.0.0+] [[#OpenSaveDataImporter]]
| |
− | |-
| |
− | | 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]]
| |
− | |-
| |
− | | 69 || [6.0.0+] [[#CancelSuspendingImport]]
| |
| |} | | |} |
| | | |
| == GetChallenge == | | == GetChallenge == |
− | No input/output, takes a type-0x6 output buffer containing the '''Challenge'''. | + | No input/output, takes a type-0x6 output buffer. |
| | | |
− | == SetKeySeedPackage == | + | == SetToken == |
− | No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. | + | No input/output, takes a type-0x5 input buffer. |
| | | |
| == OpenSaveDataExporter == | | == OpenSaveDataExporter == |
− | Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. | + | Takes an input u8 [[#SaveDataSpaceId]] and u64, returns an [[#ISaveDataExporter]]. |
− | | |
− | == OpenSaveDataExporterForDiffExport ==
| |
− | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]].
| |
− | | |
− | == OpenSaveDataExporterByContext ==
| |
− | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]].
| |
− | | |
− | == OpenSaveDataImporterDeprecated ==
| |
− | Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]].
| |
− | | |
− | == OpenSaveDataImporterForDiffImport ==
| |
− | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]].
| |
− | | |
− | == OpenSaveDataImporterForDuplicateDiffImport ==
| |
− | Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
| |
| | | |
| == OpenSaveDataImporter == | | == OpenSaveDataImporter == |
− | Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | + | Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]]. |
| | | |
− | == OpenSaveDataImporterByContext == | + | = ISaveDataTransferManagerForSaveDataRepair = |
− | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
| + | This is "nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair". |
| | | |
− | == CancelSuspendingImport ==
| + | This was added with [[9.0.0]]. |
− | Takes an input u64 and a 0x10-byte struct, no output.
| |
| | | |
− | = ISaveDataDivisionExporter =
| + | {| class="wikitable" border="1" |
− | This is "nn::fssrv::sf::ISaveDataDivisionExporter".
| + | |- |
− | | |
− | This was added with [[5.0.0]].
| |
− | | |
− | {| class="wikitable" border="1" | |
− | |- | |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#SetDivisionCount]] | + | | 0 || [[#GetChallenge]] |
| |- | | |- |
− | | 1 || [6.0.0+] [[#GetSaveDataInfo]] | + | | 16 || [[#SetKeyPackage]] |
| |- | | |- |
− | | 16 || [[#OpenSaveDataDiffChunkIterator]] | + | | 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]] |
| |- | | |- |
− | | 48 || [[#OpenSaveDataChunkExporter]] | + | | 81 || [[#PrepareOpenSaveDataImporter]] |
| |- | | |- |
− | | 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]] | + | | 90 || [[#OpenSaveDataImporter]] |
| |- | | |- |
− | | 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]] | + | | 91 || [[#OpenSaveDataImporter2]] |
| |- | | |- |
− | | 66 || [6.0.0+] [[#CancelExport]] | + | | 100 || [[#OpenSaveDataExporterWithKey]] |
| |- | | |- |
− | | 67 || [6.0.0+] [[#SuspendExport]] | + | | 110 || [[#OpenSaveDataImporterWithKey]] |
− | |-
| + | |} |
− | | 70 || [6.0.0+] [[#GetKeySeed]]
| + | |
− | |-
| + | == SetKeyPackage == |
− | | 71 || [6.0.0+] [[#GetInitialDataMac]]
| + | No input/output, takes a type-0x5 input buffer. |
− | |-
| + | |
− | | 72 || [6.0.0+] [[#FinalizeExport]]
| + | == 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]]. |
| + | |
| + | [17.0.0+] Now only takes 0x18-bytes of input and an additional type-0x5 input buffer. |
| + | |
| + | = ISaveDataMover = |
| + | This is "nn::fssrv::sf::ISaveDataMover". |
| + | |
| + | This was added with [[10.0.0]]. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]] | + | ! Cmd || Name |
| |- | | |- |
− | | 80 || [6.0.0+] [[#GetImportInitialDataAad]] | + | | 8 || [[#Register]] |
| |- | | |- |
− | | 81 || [6.0.0+] [[#SetExportInitialDataAad]] | + | | 16 || [[#Process]] |
| |- | | |- |
− | | 96 || [6.0.0+] [[#GetReportInfo]] | + | | 18 || [[#Cancel]] |
| |} | | |} |
| | | |
− | == SetDivisionCount == | + | == Register == |
− | Takes an input u32, no output. | + | Takes an input u64, no output. |
| | | |
− | == OpenSaveDataChunkExporter == | + | == Process == |
− | Takes an input u32, returns an [[#ISaveDataChunkExporter]]. | + | Takes an input u64, returns an output u64. |
| | | |
− | == FinalizeFullExport == | + | == Cancel == |
− | No input, returns two 0x10-byte output structs.
| |
− | | |
− | == FinalizeDiffExport ==
| |
− | No input, returns an output 0x10-byte struct.
| |
− | | |
− | == CancelExport ==
| |
| No input/output. | | No input/output. |
| | | |
− | == SuspendExport == | + | = ISaveDataTransferManagerForRepair = |
− | No input/output, takes a type-0x6 output buffer.
| + | This is "nn::fssrv::sf::ISaveDataTransferManagerForRepair". |
− | | |
− | == GetKeySeed ==
| |
− | No input, returns an output 0x10-byte struct.
| |
| | | |
− | == GetInitialDataMac ==
| + | This was added with [[11.0.0]]. |
− | 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]]. | |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,363: |
Line 1,432: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [6.0.0+] [[#GetSaveDataInfo]] | + | | 80 || [[#OpenSaveDataExporter]] |
| |- | | |- |
− | | 16 || [[#OpenSaveDataDiffChunkIterator]] | + | | 90 || [[#OpenSaveDataImporter]] |
− | |- | + | |} |
− | | 32 || [[#InitializeImport]]
| + | |
| + | == OpenSaveDataExporter == |
| + | Takes a total of 0x10-bytes of input, returns an [[#ISaveDataDivisionExporter]]. |
| + | |
| + | == OpenSaveDataImporter == |
| + | Takes 1-byte of input, a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | = ISaveDataExporter = |
| + | This is "nn::fssrv::sf::ISaveDataExporter". |
| + | |
| + | This was added with [[4.0.0]]. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 33 || [[#FinalizeImport]] | + | ! Cmd || Name |
| |- | | |- |
− | | 34 || [6.0.0+] [[#CancelImport]] | + | | 0 || [[#GetSaveDataInfo]] |
| |- | | |- |
− | | 35 || [6.0.0+] [[#GetImportContext]] | + | | 1 || [[#GetRestSize]] |
| |- | | |- |
− | | 36 || [6.0.0+] [[#SuspendImport]] | + | | 16 || [[#Pull]] |
| |- | | |- |
− | | 48 || [[#OpenSaveDataChunkImporter]] | + | | 17 || [[#PullInitialData]] |
− | |-
| |
− | | 64 || [6.0.0+] [[#GetImportInitialDataAad]]
| |
− | |-
| |
− | | 80 || [6.0.0+] [[#GetReportInfo]]
| |
| |} | | |} |
| | | |
| == GetSaveDataInfo == | | == GetSaveDataInfo == |
− | No input/output, takes a type-0x6 output buffer. | + | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. |
| | | |
− | == OpenSaveDataDiffChunkIterator ==
| + | The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw. |
− | No input, returns an [[#ISaveDataChunkIterator]].
| |
| | | |
− | == InitializeImport == | + | == GetRestSize == |
| No input, returns an output u64. | | No input, returns an output u64. |
| | | |
− | == FinalizeImport == | + | == Pull == |
− | No input/output.
| + | Takes a type-0x6 output buffer, returns an output u64. |
| | | |
− | == CancelImport == | + | == PullInitialData == |
− | No input/output.
| |
− | | |
− | == GetImportContext ==
| |
| No input/output, takes a type-0x6 output buffer. | | No input/output, takes a type-0x6 output buffer. |
| | | |
− | == SuspendImport == | + | = ISaveDataImporter = |
− | No input/output.
| + | This is "nn::fssrv::sf::ISaveDataImporter". |
| | | |
− | == OpenSaveDataChunkImporter ==
| + | This was added with [[4.0.0]]. |
− | Takes an input u32, returns an [[#ISaveDataChunkImporter]].
| |
− | | |
− | == GetImportInitialDataAad ==
| |
− | No input, returns an output 0x20-byte struct.
| |
− | | |
− | == GetReportInfo ==
| |
− | No input, returns an output 0x20-byte struct.
| |
− | | |
− | = ISaveDataChunkIterator =
| |
− | This is "nn::fssrv::sf::ISaveDataChunkIterator".
| |
− | | |
− | This was added with [[5.0.0]]. | |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,423: |
Line 1,484: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Next]] | + | | 0 || [[#GetSaveDataInfo]] |
| |- | | |- |
− | | 1 || [[#IsEnd]] | + | | 1 || [[#GetRestSize]] |
| |- | | |- |
− | | 16 || [[#GetId]] | + | | 16 || [[#Push]] |
| + | |- |
| + | | 17 || [[#Finalize]] |
| |} | | |} |
| | | |
− | == Next == | + | == GetSaveDataInfo == |
− | No input/output. | + | No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer. |
| + | |
| + | The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw. |
| + | |
| + | == GetRestSize == |
| + | No input, returns an output u64. |
| | | |
− | == IsEnd == | + | == Push == |
− | No input, returns an output u8. | + | No input/output, takes a type-0x5 input buffer. |
| | | |
− | == GetId == | + | == Finalize == |
− | No input, returns an output u32. | + | No input/output. |
| | | |
− | = ISaveDataChunkExporter = | + | = ISaveDataTransferManagerWithDivision = |
− | This is "nn::fssrv::sf::ISaveDataChunkExporter". | + | This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision". |
| | | |
| This was added with [[5.0.0]]. | | This was added with [[5.0.0]]. |
Line 1,448: |
Line 1,516: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Pull]] | + | | 0 || [[#GetChallenge]] |
| + | |- |
| + | | 8 || [18.0.0+] SetMode |
| + | |- |
| + | | 9 || [18.0.0+] SetAttribute |
| |- | | |- |
− | | 16 || [6.0.0+] [[#GetRestRawDataSize]] | + | | 16 || [[#SetKeySeedPackage]] |
− | |} | + | |- |
| + | | 32 || [[#OpenSaveDataExporter]] |
| + | |- |
| + | | 33 || [[#OpenSaveDataExporterForDiffExport]] |
| + | |- |
| + | | 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]] |
| + | |- |
| + | | 63 || [17.0.0+] OpenSaveDataImporter |
| + | |- |
| + | | 64 || [6.0.0-17.0.1] [[#OpenSaveDataImporterDeprecated]] ([5.0.0-5.1.0] OpenSaveDataImporter) |
| + | |- |
| + | | 65 || [5.0.0-17.0.1] [[#OpenSaveDataImporterForDiffImport]] |
| + | |- |
| + | | 66 || [6.0.0-17.0.1] [[#OpenSaveDataImporterForDuplicateDiffImport]] |
| + | |- |
| + | | 67 || [6.0.0-16.1.0] [[#OpenSaveDataImporter]] |
| + | |- |
| + | | 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]] |
| + | |- |
| + | | 69 || [6.0.0+] [[#CancelSuspendingImport]] |
| + | |- |
| + | | 70 || [10.0.0+] CancelSuspendingImportByAttribute |
| + | |- |
| + | | 80 || [11.0.0+] SwapSecondary |
| + | |} |
| | | |
− | == Pull == | + | == GetChallenge == |
− | Takes an input u64 and a type-0x6 output buffer, returns an output u64.
| + | No input/output, takes a type-0x6 output buffer containing the '''Challenge'''. |
| | | |
− | == GetRestRawDataSize == | + | == SetKeySeedPackage == |
− | No input, returns an output u64. | + | No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. |
| | | |
− | = ISaveDataChunkImporter = | + | == OpenSaveDataExporter == |
− | This is "nn::fssrv::sf::ISaveDataChunkImporter".
| + | Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. |
| | | |
− | This was added with [[5.0.0]].
| + | == OpenSaveDataExporterForDiffExport == |
| + | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]]. |
| + | |
| + | == OpenSaveDataExporterByContext == |
| + | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]. |
| + | |
| + | == OpenSaveDataImporterDeprecated == |
| + | Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | {| class="wikitable" border="1"
| + | == OpenSaveDataImporterForDiffImport == |
− | |-
| + | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]]. |
− | ! Cmd || Name
| |
− | |-
| |
− | | 0 || [[#Push]]
| |
− | |}
| |
| | | |
− | == Push == | + | == OpenSaveDataImporterForDuplicateDiffImport == |
− | Takes an input u64 and a type-0x5 input buffer, no output. | + | Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | = ISaveDataTransferProhibiter = | + | == OpenSaveDataImporter == |
− | This was added with [[6.0.0]].
| + | Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | This doesn't seem to handle any commands (?).
| + | == OpenSaveDataImporterByContext == |
| + | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | = IMultiCommitManager = | + | == CancelSuspendingImport == |
− | This was added with [[6.0.0]].
| + | Takes an input u64 and a 0x10-byte struct, no output. |
| | | |
− | {| class="wikitable" border="1" | + | = ISaveDataDivisionExporter = |
| + | This is "nn::fssrv::sf::ISaveDataDivisionExporter". |
| + | |
| + | This was added with [[5.0.0]]. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 1 || [[#Add]] | + | | 0 || [[#SetDivisionCount]] |
| |- | | |- |
− | | 2 || [[#Commit]] | + | | 1 || [6.0.0+] [[#ReadSaveDataExtraData]] |
− | |}
| |
− | | |
− | == Add ==
| |
− | Takes an input [[#IFilesystem]], no output.
| |
− | | |
− | == Commit ==
| |
− | No input/output.
| |
− | | |
− | = FileSystemType =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value || Name
| + | | 16 || [[#OpenSaveDataDiffChunkIterator]] |
| |- | | |- |
− | | 0 || Code | + | | 48 || [[#OpenSaveDataChunkExporter]] |
| |- | | |- |
− | | 1 || Data | + | | 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]] |
| |- | | |- |
− | | 2 || Logo | + | | 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]] |
| |- | | |- |
− | | 3 || ContentControl | + | | 66 || [6.0.0+] [[#CancelExport]] |
| |- | | |- |
− | | 4 || ContentManual | + | | 67 || [6.0.0+] [[#SuspendExport]] |
| |- | | |- |
− | | 5 || ContentMeta | + | | 70 || [6.0.0-17.0.1] [[#GetKeySeed]] |
| |- | | |- |
− | | 6 || ContentData | + | | 71 || [6.0.0+] [[#GetInitialDataMac]] |
| |- | | |- |
− | | 7 || ApplicationPackage | + | | 72 || [6.0.0+] [[#FinalizeExport]] |
| |- | | |- |
− | | 8 || [4.0.0+] RegisteredUpdate | + | | 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]] |
− | |}
| |
− | | |
− | = ContentType =
| |
− | This is "nn::fs::ContentType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value || Name
| + | | 74 || [18.0.0+] [[#GetKeySeed]] |
| |- | | |- |
− | | 0 || Meta | + | | 80 || [6.0.0+] [[#GetImportInitialDataAad]] |
| |- | | |- |
− | | 1 || Control | + | | 81 || [6.0.0+] [[#SetExportInitialDataAad]] |
| |- | | |- |
− | | 2 || Manual | + | | 96 || [6.0.0+] [[#GetReportInfo]] |
− | |-
| |
− | | 3 || Logo
| |
− | |-
| |
− | | 4 || Data
| |
| |} | | |} |
| | | |
− | = ContentStorageId = | + | == SetDivisionCount == |
− | This is "nn::fs::ContentStorageId".
| + | Takes an input u32, no output. |
| + | |
| + | == OpenSaveDataChunkExporter == |
| + | Takes an input u32, returns an [[#ISaveDataChunkExporter]]. |
| | | |
− | {| class="wikitable" border="1"
| + | == FinalizeFullExport == |
− | |-
| + | No input, returns two 0x10-byte output structs. |
− | ! Value || Name
| |
− | |-
| |
− | | 0 || System
| |
− | |-
| |
− | | 1 || User
| |
− | |-
| |
− | | 2 || SdCard
| |
− | |}
| |
| | | |
− | = SaveDataSpaceId = | + | == FinalizeDiffExport == |
− | This is "nn::fs::SaveDataSpaceId".
| + | No input, returns an output 0x10-byte struct. |
| | | |
− | {| class="wikitable" border="1"
| + | == CancelExport == |
− | |-
| + | No input/output. |
− | ! Value || Name
| |
− | |-
| |
− | | 0 || System
| |
− | |-
| |
− | | 1 || User
| |
− | |-
| |
− | | 2 || SdSystem
| |
− | |-
| |
− | | 3 || [3.0.0+] Temporary
| |
− | |-
| |
− | | 4 || [4.0.0+] SdUser
| |
− | |-
| |
− | | 100 || [3.0.0+] ProperSystem
| |
− | |-
| |
− | | 101 || [3.0.0+] SafeMode
| |
− | |}
| |
| | | |
− | Determines the storage where the savedata is stored.
| + | == 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". |
| | | |
− | = SaveDataType =
| + | This was added with [[5.0.0]]. |
− | This is "nn::fs::SaveDataType". | |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || System | + | | 0 || [6.0.0+] [[#ReadSaveDataExtraData]] |
| |- | | |- |
− | | 1 || Account | + | | 16 || [[#OpenSaveDataDiffChunkIterator]] |
| |- | | |- |
− | | 2 || Bcat | + | | 32 || [[#InitializeImport]] |
| |- | | |- |
− | | 3 || Device | + | | 33 || [[#FinalizeImport]] |
| |- | | |- |
− | | 4 || [3.0.0+] Temporary | + | | 34 || [6.0.0+] [[#CancelImport]] |
| |- | | |- |
− | | 5 || [3.0.0+] Cache | + | | 35 || [6.0.0+] [[#GetImportContext]] |
| + | |- |
| + | | 36 || [6.0.0+] [[#SuspendImport]] |
| |- | | |- |
− | | 6 || [4.0.0+] SystemBcat | + | | 37 || [11.0.0+] FinalizeImportWithoutSwap |
− | |}
| |
− | | |
− | = SaveDataRank =
| |
− | This is "nn::fs::SaveDataRank".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value || Name
| + | | 48 || [[#OpenSaveDataChunkImporter]] |
| |- | | |- |
− | | 0 || Primary | + | | 64 || [6.0.0+] [[#GetImportInitialDataAad]] |
| |- | | |- |
− | | 1 || Secondary | + | | 80 || [6.0.0+] [[#GetReportInfo]] |
| |} | | |} |
| | | |
− | = SaveDataEnumerateOption = | + | == ReadSaveDataExtraData == |
− | This is "nn::fs::SaveDataEnumerateOption".
| + | No input/output, takes a type-0x6 output buffer. |
| | | |
− | {| class="wikitable" border="1"
| + | == OpenSaveDataDiffChunkIterator == |
− | |-
| + | No input, returns an [[#ISaveDataChunkIterator]]. |
− | ! Value || Name
| |
− | |-
| |
− | | 1 || AllRank
| |
− | |}
| |
| | | |
− | = SaveDataFlags = | + | == InitializeImport == |
− | This is "nn::fs::SaveDataFlags". | + | No input, returns an output u64. |
| + | |
| + | == FinalizeImport == |
| + | No input/output. |
| + | |
| + | == CancelImport == |
| + | No input/output. |
| + | |
| + | == GetImportContext == |
| + | No input/output, takes a type-0x6 output buffer. |
| + | |
| + | == SuspendImport == |
| + | No input/output. |
| + | |
| + | == OpenSaveDataChunkImporter == |
| + | Takes an input u32, returns an [[#ISaveDataChunkImporter]]. |
| + | |
| + | == GetImportInitialDataAad == |
| + | No input, returns an output 0x20-byte struct. |
| + | |
| + | == GetReportInfo == |
| + | No input, returns an output 0x20-byte struct. |
| + | |
| + | = ISaveDataChunkIterator = |
| + | This is "nn::fssrv::sf::ISaveDataChunkIterator". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| |- | | |- |
− | | 1 || KeepAfterResettingSystemSaveData | + | | 0 || [[#Next]] |
| |- | | |- |
− | | 2 || KeepAfterRefurbishment | + | | 1 || [[#IsEnd]] |
| |- | | |- |
− | | 4 || KeepAfterResettingSystemSaveDataWithoutUserSaveData | + | | 16 || [[#GetId]] |
− | |-
| |
− | | 8 || NeedsSecureDelete
| |
| |} | | |} |
| | | |
− | = SaveDataMetaType = | + | == Next == |
− | This is "nn::fs::SaveDataMetaType". | + | No input/output. |
| + | |
| + | == IsEnd == |
| + | No input, returns an output u8. |
| + | |
| + | == GetId == |
| + | No input, returns an output u32. |
| + | |
| + | = ISaveDataChunkExporter = |
| + | This is "nn::fssrv::sf::ISaveDataChunkExporter". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || None | + | | 0 || [[#Pull]] |
| |- | | |- |
− | | 1 || Thumbnail | + | | 16 || [6.0.0+] [[#GetRestRawDataSize]] |
− | |-
| |
− | | 2 || ExtensionContext
| |
| |} | | |} |
| | | |
− | = ImageDirectoryId = | + | == Pull == |
− | This is "nn::fs::ImageDirectoryId". | + | 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]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || Nand | + | | 0 || [[#Push]] |
− | |-
| |
− | | 1 || SdCard
| |
| |} | | |} |
| | | |
− | = CloudBackupWorkStorageId = | + | == Push == |
− | This is "nn::fs::CloudBackupWorkStorageId". | + | Takes an input u64 and a type-0x5 input buffer, no output. |
| + | |
| + | = ISaveDataTransferProhibiter = |
| + | This is "nn::fssrv::sf::ISaveDataTransferProhibiter". |
| + | |
| + | This was added with [6.0.0+]. |
| + | |
| + | This doesn't seem to handle any commands (?). |
| + | |
| + | = IMultiCommitManager = |
| + | This is "nn::fssrv::sf::IMultiCommitManager". |
| + | |
| + | This was added with [6.0.0+]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || Nand | + | | 1 || [[#Add]] |
| |- | | |- |
− | | 1 || SdCard | + | | 2 || [[#Commit]] |
| |} | | |} |
| | | |
− | = CustomStorageId = | + | == Add == |
− | This is "nn::fs::CustomStorageId". | + | Takes an input [[#IFilesystem]], no output. |
| + | |
| + | == Commit == |
| + | No input/output. |
| + | |
| + | = IWiper = |
| + | This is "nn::fssrv::sf::IWiper". |
| + | |
| + | This was added with [[10.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || System | + | | 0 || [[#Startup|Startup]] |
| |- | | |- |
− | | 1 || SdCard | + | | 16 || [[#Process_2|Process]] |
| |} | | |} |
| | | |
− | = Priority = | + | == Startup == |
− | This is "nn::fs::Priority". | + | No input. Returns an u64. |
| + | |
| + | == Process == |
| + | No input. Returns an u64. |
| + | |
| + | = IStorageDeviceManager = |
| + | This is "nn::fssrv::storage::sf::IStorageDeviceManager". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| + | |- |
| + | | N/A || IsInserted |
| + | |- |
| + | | N/A || IsHandleValid |
| + | |- |
| + | | N/A || OpenDetectionEvent |
| + | |- |
| + | | N/A || OpenOperator |
| |- | | |- |
− | | 0 || Realtime | + | | N/A || OpenDevice |
| |- | | |- |
− | | 1 || Normal | + | | N/A || OpenStorage |
| |- | | |- |
− | | 2 || Low | + | | N/A || Invalidate |
| |} | | |} |
| | | |
− | = PriorityRaw = | + | = IStorageDeviceOperator = |
− | This is "nn::fs::PriorityRaw". | + | This is "nn::fssrv::storage::sf::IStorageDeviceOperator". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| + | |- |
| + | | N/A || Operate |
| + | |- |
| + | | N/A || OperateIn |
| |- | | |- |
− | | 0 || Realtime | + | | N/A || OperateOut |
| |- | | |- |
− | | 1 || Normal | + | | N/A || OperateOut2 |
| |- | | |- |
− | | 2 || Low | + | | N/A || OperateInOut |
| |- | | |- |
− | | 3 || Background | + | | N/A || OperateIn2Out |
| |} | | |} |
| | | |
− | = AbortSpecifier = | + | = IStorageDevice = |
− | This is "nn::fs::AbortSpecifier". | + | This is "nn::fssrv::storage::sf::IStorageDevice". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value || Name | + | ! Cmd || Name |
| + | |- |
| + | | N/A || GetHandle |
| |- | | |- |
− | | 0 || Default | + | | N/A || IsHandleValid |
| |- | | |- |
− | | 1 || Abort | + | | N/A || OpenOperator |
| |- | | |- |
− | | 2 || ReturnResult | + | | N/A || Read |
− | |}
| |
− | | |
− | = OperationId =
| |
− | This is "nn::fs::OperationId".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value || Name
| + | | N/A || Write |
| |- | | |- |
− | | 0 || Clear | + | | N/A || Flush |
| |- | | |- |
− | | 1 || ClearSignature | + | | N/A || SetSize |
| |- | | |- |
− | | 2 || InvalidateCache | + | | N/A || GetSize |
| |- | | |- |
− | | 3 || QueryRange | + | | N/A || OperateRange |
| |} | | |} |
| | | |
− | = MountHostOption = | + | = FileSystemProxyType = |
− | This is "nn::fs::MountHostOption". | + | This is "nn::fs::FileSystemProxyType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,754: |
Line 1,898: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 1 || PseudoCaseSensitive | + | | 0 || Code |
| + | |- |
| + | | 1 || Rom |
| + | |- |
| + | | 2 || Logo |
| + | |- |
| + | | 3 || Control |
| + | |- |
| + | | 4 || Manual |
| + | |- |
| + | | 5 || Meta |
| + | |- |
| + | | 6 || Data |
| + | |- |
| + | | 7 || Package |
| + | |- |
| + | | 8 || [4.0.0+] RegisteredUpdate |
| |} | | |} |
| | | |
− | = BisPartitionId = | + | = ContentType = |
− | This is "nn::fs::BisPartitionId". | + | This is "nn::fs::ContentType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,764: |
Line 1,924: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || BootPartition1Root | + | | 0 || Meta |
| |- | | |- |
− | | 10 || BootPartition2Root | + | | 1 || Control |
| |- | | |- |
− | | 20 || UserDataRoot | + | | 2 || Manual |
| |- | | |- |
− | | 21 || BootConfigAndPackage2Part1 | + | | 3 || Logo |
| |- | | |- |
− | | 22 || BootConfigAndPackage2Part2 | + | | 4 || Data |
| + | |} |
| + | |
| + | = ContentAttributes = |
| + | This is "nn::fs::ContentAttributes". |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 23 || BootConfigAndPackage2Part3 | + | ! Value || Name |
| |- | | |- |
− | | 24 || BootConfigAndPackage2Part4 | + | | 0 || None |
| |- | | |- |
− | | 25 || BootConfigAndPackage2Part5 | + | | 15 || All |
| + | |} |
| + | |
| + | = ContentStorageId = |
| + | This is "nn::fs::ContentStorageId". |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 26 || BootConfigAndPackage2Part6 | + | ! Value || Name |
| |- | | |- |
− | | 27 || CalibrationBinary | + | | 0 || System |
| |- | | |- |
− | | 28 || CalibrationFile | + | | 1 || User |
| |- | | |- |
− | | 29 || SafeMode | + | | 2 || SdCard |
| |- | | |- |
− | | 30 || User | + | | 3 || [16.0.0+] System0 |
− | |-
| |
− | | 31 || System
| |
− | |-
| |
− | | 32 || SystemProperEncryption
| |
− | |-
| |
− | | 33 || SystemProperPartition
| |
− | |-
| |
− | | 34 || SignedSystemPartitionOnSafeMode
| |
| |} | | |} |
| | | |
− | = MmcSpeedMode = | + | = SaveDataSpaceId = |
− | This is "nn::fs::MmcSpeedMode". | + | This is "nn::fs::SaveDataSpaceId". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,806: |
Line 1,970: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || Identification | + | | 0 || System |
| |- | | |- |
− | | 1 || LegacySpeed | + | | 1 || User |
| + | |- |
| + | | 2 || SdSystem |
| |- | | |- |
− | | 2 || HighSpeed | + | | 3 || [3.0.0+] Temporary |
| |- | | |- |
− | | 3 || Hs200 | + | | 4 || [4.0.0+] SdUser |
| |- | | |- |
− | | 4 || Hs400 | + | | 100 || [3.0.0+] ProperSystem |
| |- | | |- |
− | | 5 || Unknown | + | | 101 || [3.0.0+] SafeMode |
| |} | | |} |
| | | |
− | = MmcPartition = | + | Determines the storage where the savedata is stored. |
− | This is "nn::fs::MmcPartition". | + | |
| + | = SaveDataType = |
| + | This is "nn::fs::SaveDataType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,826: |
Line 1,994: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || UserData | + | | 0 || System |
| + | |- |
| + | | 1 || Account |
| + | |- |
| + | | 2 || Bcat |
| + | |- |
| + | | 3 || Device |
| + | |- |
| + | | 4 || [3.0.0+] Temporary |
| |- | | |- |
− | | 1 || BootPartition1 | + | | 5 || [3.0.0+] Cache |
| |- | | |- |
− | | 2 || BootPartition2 | + | | 6 || [4.0.0+] SystemBcat |
| |} | | |} |
| | | |
− | = GameCardPartition = | + | = SaveDataRank = |
− | This is "nn::fs::GameCardPartition". | + | This is "nn::fs::SaveDataRank". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,840: |
Line 2,016: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || Update | + | | 0 || Primary |
| |- | | |- |
− | | 1 || Normal | + | | 1 || Secondary |
− | |-
| |
− | | 2 || Secure
| |
− | |-
| |
− | | 3 || [4.0.0+] Logo
| |
| |} | | |} |
| | | |
− | = GameCardPartitionRaw = | + | = SaveDataEnumerateOption = |
− | This is "nn::fs::GameCardPartitionRaw". | + | This is "nn::fs::SaveDataEnumerateOption". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,856: |
Line 2,028: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 0 || NormalReadOnly
| + | | 1 || AllRank |
− | |-
| |
− | | 1 || SecureReadOnly | |
− | |-
| |
− | | 2 || RootWriteOnly
| |
| |} | | |} |
| | | |
− | = GameCardAttribute = | + | = SaveDataFlags = |
− | This is "nn::fs::GameCardAttribute". | + | This is "nn::fs::SaveDataFlags". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,870: |
Line 2,038: |
| ! Value || Name | | ! Value || Name |
| |- | | |- |
− | | 1 || AutoBootFlag | + | | 1 || KeepAfterResettingSystemSaveData |
| |- | | |- |
− | | 2 || HistoryEraseFlag | + | | 2 || KeepAfterRefurbishment |
| |- | | |- |
− | | 4 || RepairToolFlag | + | | 4 || KeepAfterResettingSystemSaveDataWithoutUserSaveData |
− | |} | + | |- |
| + | | 8 || NeedsSecureDelete |
| + | |} |
| + | |
| + | = SaveDataMetaType = |
| + | This is "nn::fs::SaveDataMetaType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || None |
| + | |- |
| + | | 1 || Thumbnail |
| + | |- |
| + | | 2 || ExtensionContext |
| + | |} |
| + | |
| + | = 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 || System |
| + | |- |
| + | | 1 || SdCard |
| + | |} |
| + | |
| + | = Priority = |
| + | This is "nn::fs::Priority". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Realtime |
| + | |- |
| + | | 1 || Normal |
| + | |- |
| + | | 2 || Low |
| + | |} |
| + | |
| + | = PriorityRaw = |
| + | This is "nn::fs::PriorityRaw". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Realtime |
| + | |- |
| + | | 1 || Normal |
| + | |- |
| + | | 2 || Low |
| + | |- |
| + | | 3 || Background |
| + | |} |
| + | |
| + | = AbortSpecifier = |
| + | This is "nn::fs::AbortSpecifier". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Default |
| + | |- |
| + | | 1 || Abort |
| + | |- |
| + | | 2 || ReturnResult |
| + | |} |
| + | |
| + | = OperationId = |
| + | This is "nn::fs::OperationId". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Clear |
| + | |- |
| + | | 1 || ClearSignature |
| + | |- |
| + | | 2 || InvalidateCache |
| + | |- |
| + | | 3 || QueryRange |
| + | |} |
| + | |
| + | = MountHostOption = |
| + | This is "nn::fs::MountHostOption". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 1 || PseudoCaseSensitive |
| + | |} |
| + | |
| + | = BisPartitionId = |
| + | This is "nn::fs::BisPartitionId". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || BootPartition1Root |
| + | |- |
| + | | 10 || BootPartition2Root |
| + | |- |
| + | | 20 || UserDataRoot |
| + | |- |
| + | | 21 || BootConfigAndPackage2Part1 |
| + | |- |
| + | | 22 || BootConfigAndPackage2Part2 |
| + | |- |
| + | | 23 || BootConfigAndPackage2Part3 |
| + | |- |
| + | | 24 || BootConfigAndPackage2Part4 |
| + | |- |
| + | | 25 || BootConfigAndPackage2Part5 |
| + | |- |
| + | | 26 || BootConfigAndPackage2Part6 |
| + | |- |
| + | | 27 || CalibrationBinary |
| + | |- |
| + | | 28 || CalibrationFile |
| + | |- |
| + | | 29 || SafeMode |
| + | |- |
| + | | 30 || User |
| + | |- |
| + | | 31 || System |
| + | |- |
| + | | 32 || SystemProperEncryption |
| + | |- |
| + | | 33 || SystemProperPartition |
| + | |- |
| + | | 34 || SignedSystemPartitionOnSafeMode |
| + | |- |
| + | | 35 || [16.0.0+] DeviceTreeBlob |
| + | |- |
| + | | 36 || [16.0.0+] System0 |
| + | |} |
| + | |
| + | = SdCardSpeedMode = |
| + | This is "nn::fs::SdCardSpeedMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Identification |
| + | |- |
| + | | 1 || DefaultSpeed |
| + | |- |
| + | | 2 || HighSpeed |
| + | |- |
| + | | 3 || Sdr12 |
| + | |- |
| + | | 4 || Sdr25 |
| + | |- |
| + | | 5 || Sdr50 |
| + | |- |
| + | | 6 || Sdr104 |
| + | |- |
| + | | 7 || Ddr50 |
| + | |- |
| + | | 8 || Unknown |
| + | |} |
| + | |
| + | = MmcSpeedMode = |
| + | This is "nn::fs::MmcSpeedMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Identification |
| + | |- |
| + | | 1 || LegacySpeed |
| + | |- |
| + | | 2 || HighSpeed |
| + | |- |
| + | | 3 || Hs200 |
| + | |- |
| + | | 4 || Hs400 |
| + | |- |
| + | | 5 || Unknown |
| + | |} |
| + | |
| + | = MmcPartition = |
| + | This is "nn::fs::MmcPartition". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || UserData |
| + | |- |
| + | | 1 || BootPartition1 |
| + | |- |
| + | | 2 || BootPartition2 |
| + | |} |
| + | |
| + | = HostControllerStatus = |
| + | This is "nn::sdcard::HostControllerStatus". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0xC |
| + | | |
| + | |} |
| + | |
| + | = MemoryReportInfo = |
| + | This is "nn::fs::MemoryReportInfo". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x8 |
| + | | PooledBufferFreeSizePeak |
| + | |- |
| + | | 0x8 |
| + | | 0x8 |
| + | | PooledBufferRetriedCount |
| + | |- |
| + | | 0x10 |
| + | | 0x8 |
| + | | PooledBufferReduceAllocationCount |
| + | |- |
| + | | 0x18 |
| + | | 0x8 |
| + | | BufferManagerFreeSizePeak |
| + | |- |
| + | | 0x20 |
| + | | 0x8 |
| + | | BufferManagerRetriedCount |
| + | |- |
| + | | 0x28 |
| + | | 0x8 |
| + | | ExpHeapFreeSizePeak |
| + | |- |
| + | | 0x30 |
| + | | 0x8 |
| + | | BufferPoolFreeSizePeak |
| + | |- |
| + | | 0x38 |
| + | | 0x8 |
| + | | PatrolReadAllocateBufferSuccessCount |
| + | |- |
| + | | 0x40 |
| + | | 0x8 |
| + | | PatrolReadAllocateBufferFailureCount |
| + | |- |
| + | | 0x48 |
| + | | 0x8 |
| + | | BufferManagerTotalAllocatableSizePeak |
| + | |- |
| + | | 0x50 |
| + | | 0x8 |
| + | | BufferPoolAllocateSizeMax |
| + | |- |
| + | | 0x58 |
| + | | 0x8 |
| + | | PooledBufferFailedIdealAllocationCountOnAsyncAccess |
| + | |- |
| + | | 0x60 |
| + | | 0x20 |
| + | | Reserved |
| + | |} |
| + | |
| + | = StorageErrorInfo = |
| + | This is "nn::fs::StorageErrorInfo". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | NumActivationFailures |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | NumActivationErrorCorrections |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | NumReadWriteFailures |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | NumReadWriteErrorCorrections |
| + | |} |
| + | |
| + | = GameCardErrorInfo = |
| + | This is "nn::fs::GameCardErrorInfo". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x2 |
| + | | GameCardCrcErrorCount |
| + | |- |
| + | | 0x2 |
| + | | 0x2 |
| + | | Reserved |
| + | |- |
| + | | 0x4 |
| + | | 0x2 |
| + | | AsicCrcErrorCount |
| + | |- |
| + | | 0x6 |
| + | | 0x2 |
| + | | Reserved |
| + | |- |
| + | | 0x8 |
| + | | 0x2 |
| + | | RefreshCount |
| + | |- |
| + | | 0xA |
| + | | 0x2 |
| + | | Reserved |
| + | |- |
| + | | 0xC |
| + | | 0x2 |
| + | | ReadRetryCount |
| + | |- |
| + | | 0xE |
| + | | 0x2 |
| + | | TimeoutRetryErrorCount |
| + | |} |
| + | |
| + | = GameCardErrorReportInfo = |
| + | This is "nn::fs::GameCardErrorReportInfo". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x10 |
| + | | [[#GameCardErrorInfo|ErrorInfo]] |
| + | |- |
| + | | 0x10 |
| + | | 0x2 |
| + | | AsicReinitializeFailureDetail |
| + | |- |
| + | | 0x12 |
| + | | 0x2 |
| + | | InsertionCount |
| + | |- |
| + | | 0x14 |
| + | | 0x2 |
| + | | RemovalCount |
| + | |- |
| + | | 0x16 |
| + | | 0x2 |
| + | | AsicReinitializeCount |
| + | |- |
| + | | 0x18 |
| + | | 0x4 |
| + | | AsicInitializeCount |
| + | |- |
| + | | 0x1C |
| + | | 0x2 |
| + | | AsicReinitializeFailureCount |
| + | |- |
| + | | 0x1E |
| + | | 0x2 |
| + | | AwakenFailureCount |
| + | |- |
| + | | 0x20 |
| + | | 0x2 |
| + | | Reserved |
| + | |- |
| + | | 0x22 |
| + | | 0x2 |
| + | | RefreshCount |
| + | |- |
| + | | 0x24 |
| + | | 0x4 |
| + | | LastReadErrorPageAddress |
| + | |- |
| + | | 0x28 |
| + | | 0x4 |
| + | | LastReadErrorPageCount |
| + | |- |
| + | | 0x2C |
| + | | 0x4 |
| + | | AwakenCount |
| + | |- |
| + | | 0x30 |
| + | | 0x4 |
| + | | ReadCountFromInsert |
| + | |- |
| + | | 0x34 |
| + | | 0x4 |
| + | | ReadCountFromAwaken |
| + | |- |
| + | | 0x38 |
| + | | 0x8 |
| + | | Reserved |
| + | |} |
| + | |
| + | = GameCardHandle = |
| + | This is "nn::fs::GameCardHandle". This is an u32. |
| + | |
| + | = GameCardPartition = |
| + | This is "nn::fs::GameCardPartition". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Update |
| + | |- |
| + | | 1 || Normal |
| + | |- |
| + | | 2 || Secure |
| + | |- |
| + | | 3 || [4.0.0+] Logo |
| + | |} |
| + | |
| + | = GameCardPartitionRaw = |
| + | This is "nn::fs::GameCardPartitionRaw". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || NormalReadOnly |
| + | |- |
| + | | 1 || SecureReadOnly |
| + | |- |
| + | | 2 || RootWriteOnly |
| + | |} |
| + | |
| + | = GameCardAttribute = |
| + | This is "nn::fs::GameCardAttribute". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 1 || AutoBootFlag |
| + | |- |
| + | | 2 || HistoryEraseFlag |
| + | |- |
| + | | 4 || [4.0.0+] RepairToolFlag |
| + | |- |
| + | | 8 || [9.0.0+] DifferentRegionCupToTerraDeviceFlag |
| + | |- |
| + | | 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag |
| + | |} |
| + | |
| + | = GameCardAttribute2 = |
| + | This is "nn::fs::GameCardAttribute2". |
| + | |
| + | = GameCardSize = |
| + | This is "nn::fs::GameCardSize". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 1 || Size1GB |
| + | |- |
| + | | 2 || Size2GB |
| + | |- |
| + | | 4 || Size4GB |
| + | |- |
| + | | 8 || Size8GB |
| + | |- |
| + | | 16 || Size16GB |
| + | |- |
| + | | 32 || Size32GB |
| + | |} |
| + | |
| + | = GameCardClockRate = |
| + | This is "nn::fs::GameCardClockRate". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 25 || ClockRate25MHz |
| + | |- |
| + | | 50 || ClockRate50MHz |
| + | |} |
| + | |
| + | = GameCardCompatibilityType = |
| + | This is "nn::fs::GameCardCompatibilityType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Global |
| + | |- |
| + | | 1 || China |
| + | |} |
| + | |
| + | = GameCardUpdatePartitionInfo = |
| + | This is "nn::fs::GameCardUpdatePartitionInfo". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Version |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Reserved |
| + | |- |
| + | | 0x8 |
| + | | 0x8 |
| + | | Id |
| + | |} |
| + | |
| + | = GameCardIdSet = |
| + | This is "nn::gc::GameCardIdSet". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | [[#CardId1|Id1]] |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | [[#CardId2|Id2]] |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | [[#CardId3|Id3]] |
| + | |} |
| + | |
| + | = CardId1 = |
| + | This is "nn::gc::detail::CardId1". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x1 |
| + | | [[#MakerCodeForCardId1|MakerCode]] |
| + | |- |
| + | | 0x1 |
| + | | 0x1 |
| + | | [[#MemoryCapacity|MemoryCapacity]] |
| + | |- |
| + | | 0x2 |
| + | | 0x1 |
| + | | Reserved |
| + | |- |
| + | | 0x3 |
| + | | 0x1 |
| + | | [[#MemoryType|MemoryType]] |
| + | |} |
| + | |
| + | = CardId2 = |
| + | This is "nn::gc::detail::CardId2". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x1 |
| + | | [[#CardSecurityNumber|CardSecurityNumber]] |
| + | |- |
| + | | 0x1 |
| + | | 0x1 |
| + | | [[#CardType|CardType]] |
| + | |- |
| + | | 0x2 |
| + | | 0x2 |
| + | | Reserved |
| + | |} |
| + | |
| + | = CardId3 = |
| + | This is "nn::gc::detail::CardId3". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Reserved |
| + | |} |
| + | |
| + | = MakerCodeForCardId1 = |
| + | This is "nn::gc::detail::MakerCodeForCardId1". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0xC2 || MegaChips |
| + | |- |
| + | | 0xAE || Lapis |
| + | |- |
| + | | 0x36 || |
| + | |} |
| + | |
| + | = MemoryCapacity = |
| + | This is "nn::gc::detail::MemoryCapacity". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0xFA || 1GB |
| + | |- |
| + | | 0xF8 || 2GB |
| + | |- |
| + | | 0xF0 || 4GB |
| + | |- |
| + | | 0xE0 || 8GB |
| + | |- |
| + | | 0xE1 || 16GB |
| + | |- |
| + | | 0xE2 || 32GB |
| + | |} |
| + | |
| + | = MemoryType = |
| + | This is "nn::gc::detail::MemoryType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0x1 || T1RomFast |
| + | |- |
| + | | 0x2 || T2RomFast |
| + | |- |
| + | | 0x9 || T1NandFast |
| + | |- |
| + | | 0xA || T2NandFast |
| + | |- |
| + | | 0x21 || T1RomLate |
| + | |- |
| + | | 0x22 || T2RomLate |
| + | |- |
| + | | 0x29 || T1NandLate |
| + | |- |
| + | | 0x2A || T2NandLate |
| + | |} |
| + | |
| + | = CardSecurityNumber = |
| + | This is "nn::gc::detail::CardSecurityNumber". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || 0 |
| + | |- |
| + | | 1 || 1 |
| + | |- |
| + | | 2 || 2 |
| + | |- |
| + | | 3 || 3 |
| + | |- |
| + | | 4 || 4 |
| + | |} |
| + | |
| + | = CardType = |
| + | This is "nn::gc::detail::CardType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Rom |
| + | |- |
| + | | 1 || WritableDevT1 |
| + | |- |
| + | | 2 || WritableProdT1 |
| + | |- |
| + | | 3 || WritableDevT2 |
| + | |- |
| + | | 4 || WritableProdT2 |
| + | |} |
| + | |
| + | = RmaInformation = |
| + | This is "nn::gc::RmaInformation". This is a 0x200-byte struct. |
| + | |
| + | = GameCardCardHeader = |
| + | This is a 0x600-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x100 |
| + | | [[XCI#CardHeader|Signature]] |
| + | |- |
| + | | 0x100 |
| + | | 0x100 |
| + | | [[Lotus3#GetCardHeader|Header]] |
| + | |- |
| + | | 0x200 |
| + | | 0x400 |
| + | | [[XCI#NewCardHeaderCertArea|NewCardHeaderCertArea]] |
| + | |} |
| + | |
| + | = GameCardAsicProductionFirmware = |
| + | This is the [[Lotus3#AsicFirmware|firmware]] for reading production Gamecards. |
| + | |
| + | Embedded in "nn::gc::detail::EmbeddedDataHolder::g_FwReadBuffer" when in production mode. |
| + | |
| + | [4.0.0+] This firmware was updated to provide support for new Gamecards. |
| + | |
| + | [9.0.0+] This firmware was updated. |
| + | |
| + | [11.0.0+] This firmware was updated. |
| + | |
| + | [12.0.0+] This firmware was updated. |
| + | |
| + | [14.0.0+] This firmware was updated. |
| + | |
| + | = GameCardAsicDevelopmentFirmware = |
| + | This is the [[Lotus3#AsicFirmware|firmware]] for reading development Gamecards. |
| + | |
| + | Embedded in "nn::gc::detail::EmbeddedDataHolder::g_FwReadBuffer" when in development mode. |
| + | |
| + | [9.0.0+] This firmware was updated. |
| + | |
| + | [11.0.0+] This firmware was updated. |
| + | |
| + | [14.0.0+] This firmware was updated. |
| + | |
| + | = GameCardAsicWriterFirmware = |
| + | This is the [[Lotus3#AsicFirmware|firmware]] for writing development Gamecards. |
| | | |
− | = GameCardSize =
| + | Embedded in "nn::gc::detail::EmbeddedDataHolder::g_FwWriterBuffer". |
− | This is "nn::fs::GameCardSize".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Value || Name
| |
− | |-
| |
− | | 1 || Size1GB
| |
− | |-
| |
− | | 2 || Size2GB
| |
− | |-
| |
− | | 4 || Size4GB
| |
− | |-
| |
− | | 8 || Size8GB
| |
− | |-
| |
− | | 16 || Size16GB
| |
− | |-
| |
− | | 32 || Size32GB
| |
− | |}
| |
− | | |
− | = GameCardClockRate =
| |
− | This is "nn::fs::GameCardClockRate".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Value || Name
| |
− | |-
| |
− | | 25 || ClockRate25MHz
| |
− | |-
| |
− | | 50 || ClockRate50MHz
| |
− | |}
| |
| | | |
| = SimulatingDeviceType = | | = SimulatingDeviceType = |
Line 1,981: |
Line 2,917: |
| |} | | |} |
| | | |
− | = ContentPath = | + | = FspPath = |
− | These are the 0x300 paths to NCA files for the various filesystems FS can access, beginning with @. They're passed via X descriptors, and returned via various [[Location Resolver services|ncm/lr]] commands.
| + | This is "nn::fssrv::sf::FspPath". This is a 0x301-byte string. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 2,067: |
Line 3,003: |
| Total size is 0x40-bytes. | | Total size is 0x40-bytes. |
| | | |
− | For DeviceSaveData, this struct is all-zero except for the [[#SaveDataType]] field. | + | For DeviceSaveData, this struct is all-zero except for the [[#SaveDataType]] field (and optionally the ApplicationId if specified). |
| | | |
| = SaveDataCreationInfo = | | = SaveDataCreationInfo = |
Line 2,117: |
Line 3,053: |
| | | |
| = BcatSaveData = | | = BcatSaveData = |
− | This is accessed using the same commands for SaveData with the same input u8. The [[#SaveDataAttribute]] is the same as DeviceSaveData, except that the [[NCM_services#ApplicationId|ApplicationId]] field is set to <input ApplicationId>. See above regarding [[#SaveDataCreationInfo]]. | + | This is accessed using the same commands for SaveData with the same input u8. The [[#SaveDataAttribute]] is the same as DeviceSaveData (besides the SaveDataType), except that the [[NCM_services#ApplicationId|ApplicationId]] field is always set to <input ApplicationId> (unlike DeviceSaveData where it's optional). See above regarding [[#SaveDataCreationInfo]]. |
| | | |
| The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero. | | The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero. |
| + | |
| + | MountSystemBcatSaveData uses [[#OpenSaveDataFileSystemBySystemSaveDataId]] with [[#SaveDataSpaceId]] System. The [[#SaveDataAttribute]] is all-zero, except for the SaveDataType, and SystemSaveDataId is set to the input param. |
| | | |
| = SaveDataInfo = | | = SaveDataInfo = |