Filesystem services: Difference between revisions

Ootulp (talk | contribs)
 
(59 intermediate revisions by 6 users not shown)
Line 14: Line 14:


== OpenCodeFileSystem ==
== OpenCodeFileSystem ==
Takes an [[NCM_services#ProgramId|ProgramId]] and a [[#ContentPath]]. Returns an [[#IFileSystem]].
Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].


[10.0.0+] This now takes an additional type-0x1A output buffer.
[10.0.0+] Now takes an additional type-0x1A output buffer.
 
[16.0.0+] Now takes an additional input [[#ContentAttributes]].
 
[17.0.0+] Now takes a type-0x6 output buffer instead of a type-0x1A output buffer.
 
[20.0.0+] Now no longer takes a type-0x19 input buffer containing a [[#FspPath]] and instead takes an input [[NCM_services#StorageId|StorageId]].


== 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 41: Line 47:


== RegisterProgram ==
== RegisterProgram ==
Takes a [[NCM_services#StorageId|StorageId]], an u64 ProcessId, a [[NCM_services#ProgramId|ProgramId]], a 0x1C type-A buffer for the [[NPDM#FS_Access_Header| FS Access Header]], and a 0x2C type-A buffer for the [[NPDM#FS_Access_Control| FS Access Control]]
Takes an input [[NCM_services#StorageId|StorageId]], an input u64 ProcessId, an input [[NCM_services#ProgramId|ProgramId]], a type-0x5 input buffer containing an [[NPDM#ACID|ACID]] [[NPDM#FsAccessControl|FsAccessControl]], and a type-0x5 input buffer containing an [[NPDM#ACI0|ACI0]] [[NPDM#FsAccessControl|FsAccessControl]].


Final FS permissions are stored as (ACI0_perms & ACID_perms). Will panic(svcBreak) when buffer sizes from ipc-rawdata are invalid.
Final FS permissions are stored as (ACI0_perms & ACID_perms). Will panic(svcBreak) when buffer sizes from ipc-rawdata are invalid.
[20.0.0+] Now takes an additional input [[#FsAccessControlRestrictionMode]].


== UnregisterProgram ==
== UnregisterProgram ==
Takes a pid. Removes registered FS permissions for that PID.
Takes an input u64 ProcessId. No output.
 
Removes registered FS permissions for that PID.


== SetEnabledProgramVerification ==
== SetEnabledProgramVerification ==
Seems to sets a global flag to inputval & 1.
Takes an input bool. No output.


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.
Line 70: Line 80:
| 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 101: Line 113:
|-
|-
| 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute
| 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute
|-
| 29 || [19.0.0+] IsInitializationMode
|-
|-
| 30 || [[#OpenGameCardStorage]]
| 30 || [[#OpenGameCardStorage]]
Line 115: Line 129:
|-
|-
| 36 || [9.0.0+] OpenHostFileSystemWithOption
| 36 || [9.0.0+] OpenHostFileSystemWithOption
|-
| 37 || [14.0.0+] CreateSaveDataFileSystemWithCreationInfo2
|-
| 38 || [20.0.0+] DetachSdCard
|-
|-
| 51 || [[#OpenSaveDataFileSystem]]
| 51 || [[#OpenSaveDataFileSystem]]
Line 163: Line 181:
|-
|-
| 86 || [10.0.0+] [[#OpenSaveDataMover]]
| 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]]
Line 183: Line 207:
|-
|-
| 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 189: Line 217:
|-
|-
| 501 || [[#OpenGameCardDetectionEventNotifier]]
| 501 || [[#OpenGameCardDetectionEventNotifier]]
|-
| 502 || [20.0.0+] OpenSdCardAwakenReadyEventNotifier
|-
| 503 || [19.0.0+] OpenGameCardAwakenReadyEventNotifier
|-
|-
| 510 || [5.0.0+] OpenSystemDataUpdateEventNotifier
| 510 || [5.0.0+] OpenSystemDataUpdateEventNotifier
Line 214: Line 246:
| 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 231: Line 263:
|-
|-
| 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 237: Line 271:
|-
|-
| 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 253: Line 289:
|-
|-
| 810 || [7.0.0+] RegisterProgramIndexMapInfo
| 810 || [7.0.0+] RegisterProgramIndexMapInfo
|-
| 820 || [19.0.0+] GetContentStorageInfoIndex
|-
|-
| 1000 || [1.0.0-9.2.0] SetBisRootForHost
| 1000 || [1.0.0-9.2.0] SetBisRootForHost
Line 282: Line 320:
| 1013 || [9.0.0+] UnsetSaveDataRootPath
| 1013 || [9.0.0+] UnsetSaveDataRootPath
|-
|-
| 1014 || [10.0.0+] OutputMultiProgramTagAccessLog
| 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
|-
|-
| 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey
| 1101 || [18.0.0+] OverrideSaveDataTransferKeyForTest
|-
|-
| 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset
| 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset
Line 291: Line 341:
|-
|-
| 1300 || [10.0.0+] [[#OpenBisWiper]]
| 1300 || [10.0.0+] [[#OpenBisWiper]]
|-
| 1400 || [15.0.0+] NotifyErrorContextServiceReady
|}
|}


Line 299: Line 351:


Note that the functions check whether or not at least one bit is set in the mask. This means that, you don't need to set 0xFFFFFFFFFFFFFFFF to get all permissions: it suffices to set 0x8000000000000000.
Note that the functions check whether or not at least one bit is set in the mask. This means that, you don't need to set 0xFFFFFFFFFFFFFFFF to get all permissions: it suffices to set 0x8000000000000000.
If nn::spl::IsDebugMode() is disabled (retail behavior), the FS sysmodule masks the permission descriptor with 0x3FFFFFFFFFFFFFFF upon process registration.


If the code were to request an invalid input type, panic. But this never happens.
If the code were to request an invalid input type, panic. But this never happens.
Line 307: Line 361:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! AccessibilityType || Mask || Name || Value || Used by
! AccessibilityType || Name || Mask || Permission || Used by
|-
| 0x0 || CanMountLogo || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
|-
| 0x1 || CanMountContentMeta || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
|-
|-
| 0x0 || 0x8000000000000801 || CanMountLogo || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
| 0x2 || CanMountContentControl || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
|-
|-
| 0x1 || 0x8000000000000801 || CanMountContentMeta || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
| 0x3 || CanMountContentManual || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
|-
|-
| 0x2 || 0x8000000000000801 || CanMountContentControl || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
| 0x4 || CanMountContentData || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
|-
|-
| 0x3 || 0x8000000000000801 || CanMountContentManual || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
| 0x5 || CanMountApplicationPackage || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
|-
|-
| 0x4 || 0x8000000000000801 || CanMountContentData || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
| 0x6 || CanMountSaveDataStorage || 0x8000000000000000 || RW ||
|-
|-
| 0x5 || 0x8000000000000801 || CanMountApplicationPackage || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]
| 0x7 || CanMountContentStorage || 0x8000000000000800 || RW || [[#OpenContentStorageFileSystem]]
|-
|-
| 0x6 || 0x8000000000000000 || CanMountSaveDataStorage || 3 ||
| 0x8 || CanMountImageAndVideoStorage ||0x8000000000001000 || RW || [[#OpenImageDirectoryFileSystem]]
|-
|-
| 0x7 || 0x8000000000000800 || CanMountContentStorage || 3 || [[#OpenContentStorageFileSystem]]
| 0x9 || CanMountCustomStorage0 || 0x8000000000000000 || RW || OpenCustomStorageFileSystem
|-
|-
| 0x8 || 0x8000000000001000 || CanMountImageAndVideoStorage || 3 || [[#OpenImageDirectoryFileSystem]]
| 0xA || CanMountBisCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisFileSystem]]
|-
|-
| 0x9 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanMountCloudBackupWorkStorage || 3 || OpenCloudBackupWorkStorageFileSystem
| 0xB || CanMountBisSafeMode || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
|-
|-
| 0xA || 0x8000000000000000<br/>([7.0.0-7.0.1] 0x4000000000000000)<br/>([6.0.0-6.2.0] 0x8000000000000084)<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanMountCustomStorage0 || 3 || OpenCustomStorageFileSystem
| 0xC || CanMountBisUser || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]
|-
|-
| 0xB || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000008080) || CanMountBisCalibrationFile || 3 || [[#OpenBisFileSystem]]
| 0xD || CanMountBisSystem || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]
|-
|-
| 0xC || 0x8000000000000080<br/>([1.0.0-6.2.0] 0x8000000000008080) || CanMountBisSafeMode || 3 || [[#OpenBisFileSystem]]
| 0xE || CanMountBisSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
|-
|-
| 0xD || 0x8000000000008080<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanMountBisUser || 3 || [[#OpenBisFileSystem]]
| 0xF || CanMountBisSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]
|-
|-
| 0xE || 0x8000000000008080<br/>([3.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanMountBisSystem || 3 || [[#OpenBisFileSystem]]
| 0x10 || CanMountSdCard || 0xC000000000200000 || RW || [[#OpenSdCardFileSystem]]
|-
|-
| 0xF || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000000010) || CanMountBisSystemProperEncryption || 3 || [[#OpenBisFileSystem]]
| 0x11 || CanMountGameCard || 0x8000000000000010 || R- || [[#OpenGameCardFileSystem]]
|-
|-
| 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]]
| 0x12 || CanMountDeviceSaveData || 0x8000000000040020 || RW || [[#OpenSaveDataFileSystem]]
|-
|-
| 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]]
| 0x13 || CanMountSystemSaveData || 0x8000000000000028 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
|-
|-
| 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]]
| 0x14 || CanMountOthersSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystem]]
|-
|-
| 0x13 || 0x8000000000040020<br/>([6.0.0-6.2.0] 0x8000000000000028)<br/>([1.0.0-5.1.0] 0x8000000000000020) || CanMountDeviceSaveData || 3 || [[#OpenSaveDataFileSystem]]
| 0x15 || CanMountOthersSystemSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
|-
|-
| 0x14 || 0x8000000000000028<br/>([3.0.0-6.2.0] 0x8000000000000020)<br/>([1.0.0-2.3.0] 0x8000000000010082) || CanMountSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
| 0x16 || CanOpenBisPartitionBootPartition1Root || 0x8000000000010082 || RW || [[#OpenBisStorage]]
|-
|-
| 0x15 || 0x8000000000000020<br/>([3.0.0-5.1.0] 0x8000000000010082)<br/>([1.0.0-2.3.0] 0x8000000000010080) || CanMountOthersSaveData || 3 || [[#OpenSaveDataFileSystem]]
| 0x17 || CanOpenBisPartitionBootPartition2Root || 0x8000000000010080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x16 || 0x8000000000000020<br/>([6.0.0-6.2.0] 0x8000000000010082)<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanMountOthersSystemSaveData || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]]
| 0x18 || CanOpenBisPartitionUserDataRoot || 0x8000000000000080 || 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]]
| 0x19 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x18 || 0x8000000000010080<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000010080) || CanOpenBisPartitionBootPartition2Root || 3 || [[#OpenBisStorage]]
| 0x1A || CanOpenBisPartitionBootConfigAndPackage2Part2 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x19 || 0x8000000000000080<br/>([6.0.0-6.2.0] 0x8000000000010080) || CanOpenBisPartitionUserDataRoot || 3 || [[#OpenBisStorage]]
| 0x1B || CanOpenBisPartitionBootConfigAndPackage2Part3 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x1A || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 3 || [[#OpenBisStorage]]
| 0x1C || CanOpenBisPartitionBootConfigAndPackage2Part4 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x1B || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part2 || 3 || [[#OpenBisStorage]]
| 0x1D || CanOpenBisPartitionBootConfigAndPackage2Part5 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x1C || 0x8000000000010080 || CanOpenBisPartitionBootConfigAndPackage2Part3 || 3 || [[#OpenBisStorage]]
| 0x1E || CanOpenBisPartitionBootConfigAndPackage2Part6 || 0x8000000000010080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x1D || 0x8000000000010080<br/>([1.0.0-2.3.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part4 || 3 || [[#OpenBisStorage]]
| 0x1F || CanOpenBisPartitionCalibrationBinary || 0x8000000000000084 || RW || [[#OpenBisStorage]]
|-
|-
| 0x1E || 0x8000000000010080<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanOpenBisPartitionBootConfigAndPackage2Part5 || 3 || [[#OpenBisStorage]]
| 0x20 || CanOpenBisPartitionCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisStorage]]
|-
|-
| 0x1F || 0x8000000000010080<br/>([6.0.0-6.2.0] 0x8000000000000084)<br/>([1.0.0-2.3.0] 0x8000000000000080) || CanOpenBisPartitionBootConfigAndPackage2Part6 || 3 || [[#OpenBisStorage]]
| 0x21 || CanOpenBisPartitionSafeMode || 0x8000000000000080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x20 || 0x8000000000000084<br/>([1.0.0-5.1.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationBinary || 3 || [[#OpenBisStorage]]
| 0x22 || CanOpenBisPartitionUser || 0x8000000000000080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x21 || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080) || CanOpenBisPartitionCalibrationFile || 3 || [[#OpenBisStorage]]
| 0x23 || CanOpenBisPartitionSystem || 0x8000000000000080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x22 || 0x8000000000000080 || CanOpenBisPartitionSafeMode || 3 || [[#OpenBisStorage]]
| 0x24 || CanOpenBisPartitionSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x23 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0xC000000000200000) || CanOpenBisPartitionUser || 3 || [[#OpenBisStorage]]
| 0x25 || CanOpenBisPartitionSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x24 || 0x8000000000000080<br/>([1.0.0-2.3.0] 0x8000000000000100) || CanOpenBisPartitionSystem || 3 || [[#OpenBisStorage]]
| 0x26 || CanOpenBisPartitionDeviceTreeBlob || 0x8000002000000080 || RW || [[#OpenBisStorage]]
|-
|-
| 0x25 || 0x8000000000000080<br/>([3.0.0-5.1.0] 0xC000000000200000)<br/>([1.0.0-2.3.0] 0x8000000000100008) || CanOpenBisPartitionSystemProperEncryption || 3 || [[#OpenBisStorage]]
| [3.0.0+] 0x27 || CanOpenSdCardStorage || 0xC000000000200000 || RW ||  
|-
|-
| 0x26 || 0x8000000000000080<br/>([6.0.0-6.2.0] 0xC000000000200000)<br/>([3.0.0-5.1.0] 0x8000000000000100)<br/>([1.0.0-2.3.0] 0xC000000000400000) || CanOpenBisPartitionSystemProperPartition || 3 || [[#OpenBisStorage]]
| [3.0.0+] 0x28 || CanOpenGameCardStorage || 0x8000000000000100 || RW || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1)
|-
|-
| [3.0.0+] 0x27 || 0xC000000000200000<br/>([6.0.0-6.2.0] 0x8000000000000100)<br/>([3.0.0-5.1.0] 0x8000000000100008) || CanOpenSdCardStorage || ||
| [4.0.0+] 0x29 || CanMountSystemDataPrivate || 0x8000000000100008 || R- || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]]
|-
|-
| [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)
| [5.0.0+] 0x2A || CanMountHost || 0xC000000000400000 || RW || [[#OpenHostFileSystem]]
|-
|-
| [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]]
| [6.0.0+] 0x2B || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]]
|-
|-
| [5.0.0+] 0x2A || 0xC000000000400000<br/>([6.0.0-6.2.0] 0x8000000000010000)<br/>([5.0.0-5.1.0] 0x8000000000000000) || CanMountHost || 3 || [[#OpenHostFileSystem]]
| [7.0.0+] 0x2C || CanOpenSaveDataInternalStorage || [-19.0.0] 0x8000000000000000 [20.0.0+] 0x8000000000000020 || RW || [[#OpenSaveDataInternalStorageFileSystem]]
|-
|-
| [6.0.0+] 0x2B || 0x8000000000010000<br/>([6.0.0-6.2.0] 0x8000000000000000) || CanMountRegisteredUpdatePartition || 1 || [[#OpenRegisteredUpdatePartition]]
| [7.0.0+] 0x2D || CanMountTemporaryDirectory || 0xC000000000000000 || RW ||  
|-
|-
| [7.0.0+] 0x2C || 0x8000000000000000 || CanOpenSaveDataInternalStorage || 3 || [[#OpenSaveDataInternalStorageFileSystem]]
| [11.0.0+] 0x2E || CanMountAllBaseFilesystem || 0x8000000000000000 || RW || OpenBaseFileSystem
|-
|-
| [7.0.0+] 0x2D || 0x0000000000000000 || CanNotMountCustomStorage || 3 || OpenCustomStorageFileSystem
| [15.0.0+] 0x2F || CanNotMount || 0x0000000000000000 || -- || OpenCustomStorageFileSystem
|}
|}


Line 405: Line 463:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! OperationType || Mask || Name || Used by
! OperationType || Name || Mask || Used by
|-
| 0x0 || CanInvalidateBisCache || 0x8000000000000080 || [[#InvalidateBisCache]]
|-
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc
|-
|-
| 0x0 || 0x8000000000000080 || CanInvalidateBisCache || [[#InvalidateBisCache]]
| [20.0.0+] 0x2 || || 0x8000100000000080 ||
|-
|-
| 0x1 || 0x8000000000000080 || CanEraseMmc || EraseMmc
| [-19.0.0] 0x2 [20.0.0+] 0x3 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate
|-
|-
| 0x2 || 0x8000000000000010 || CanGetGameCardDeviceCertificate || GetGameCardDeviceCertificate
| [-19.0.0] 0x3 [20.0.0+] 0x4 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet
|-
|-
| 0x3 || 0x8000000000000010 || CanGetGameCardIdSet || GetGameCardIdSet
| [-19.0.0] 0x4 [20.0.0+] 0x5 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver
|-
|-
| 0x4 || 0x8000000000000200 || CanFinalizeGameCardDriver || FinalizeGameCardDriver
| [-19.0.0] 0x5 [20.0.0+] 0x6 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo
|-
|-
| 0x5 || 0x8000000000000200 || CanGetGameCardAsicInfo || GetGameCardAsicInfo
| [-19.0.0] 0x6 [20.0.0+] 0x7 || CanGetGameCardAsicCertificate || 0x8000000000000200 || GetGameCardAsicCertificate
|-
|-
| 0x6 || 0x8000000000002020 || CanCreateSaveData || [[#CreateSaveDataFileSystem]]
| [20.0.0+] 0x8 || || 0x8000100000000080 ||
|-
|-
| 0x7 || 0x8000000000000060 || CanDeleteSaveData || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
| [20.0.0+] 0x9 || || 0x8000100000000080 ||
|-
|-
| 0x8 || 0x8000000000000028 || CanCreateSystemSaveData || CreateSaveDataFileSystemBySystemSaveDataId
| [20.0.0+] 0xA || || 0x8000080000000000 ||
|-
|-
| 0x9 || 0x8000000000000020 || CanCreateOthersSystemSaveData || CreateSaveDataFileSystemBySystemSaveDataId
| [20.0.0+] 0xB || || 0x8000000000000010 ||
|-
|-
| 0xA || 0x8000000000004028 || CanDeleteSystemSaveData || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
| [20.0.0+] 0xC || || 0x8000100000000080 ||
|-
|-
| 0xB || 0x8000000000000060 || CanOpenSaveDataInfoReader || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
| [-19.0.0] 0x7 [20.0.0+] 0xD || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]]
|-
|-
| 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
| [-19.0.0] 0x8 [20.0.0+] 0xE || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
|-
|-
| 0xD || 0x8000000000000040<br/>([1.0.0-5.1.0] 0x8000000000020000) || CanOpenSaveDataInfoReaderForInternal || [[#OpenSaveDataInfoReaderWithFilter]]
| [-19.0.0] 0x9 [20.0.0+] 0xF || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId
|-
|-
| 0xE || 0x8000000000020000<br/>([1.0.0-5.1.0] 0x8000000000000400) || CanOpenSaveDataMetaFile || OpenSaveDataMetaFile
| [-19.0.0] 0xA [20.0.0+] 0x10 || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId
|-
|-
| 0xF || 0x8000000000000400<br/>([1.0.0-5.1.0] 0x8000000000004060) || CanSetCurrentPosixTime || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference
| [-19.0.0] 0xB [20.0.0+] 0x11 || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
|-
|-
| 0x10 || 0x8000000000004060<br/>([1.0.0-5.1.0] 0x8000000000080000) || CanReadSaveDataFileSystemExtraData || [[#ReadSaveDataFileSystemExtraData]]
| [-19.0.0] 0xC [20.0.0+] 0x12 || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
|-
|-
| 0x11 || 0x8000000000080000 || CanSetGlobalAccessLogMode || [[#SetGlobalAccessLogMode]]
| [-19.0.0] 0xD [20.0.0+] 0x13 || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
|-
|-
| 0x12 || 0x8000000000080000<br/>([1.0.0-5.1.0] Invalid) || CanSetSpeedEmulationMode || SetSpeedEmulationMode
| [-19.0.0] 0xE [20.0.0+] 0x14 || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]]
|-
|-
| 0x13 || Invalid<br/>([1.0.0-5.1.0] 0xC000000000800000) || ||  
| [-19.0.0] 0xF [20.0.0+] 0x15 || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile
|-
|-
| 0x14 || 0xC000000000800000<br/>([1.0.0-5.1.0] 0xC000000001000000) || CanFillBis || CreatePaddingFile, DeleteAllPaddingFiles
| [-19.0.0] 0x10 [20.0.0+] 0x16 || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference
|-
|-
| 0x15 || 0xC000000001000000<br/>([5.0.0-5.1.0] 0x8000000001000060)<br/>([1.0.0-4.1.0] 0xC000000002000000) || CanCorruptSaveData || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
| [-19.0.0] 0x11 [20.0.0+] 0x17 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]]
|-
|-
| [2.0.0+] 0x16 || 0x8000000001000060<br/>([5.0.0-5.1.0] 0x8000000000000060)<br/>([2.0.0-4.1.0] 0x8000000004000000) || CanCorruptSystemSaveData || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
| [-19.0.0] 0x12 [20.0.0+] 0x18 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]]
|-
|-
| [2.0.0+] 0x17 || 0x8000000000000060<br/>([5.0.0-5.1.0] 0xC000000002000000)<br/>([2.0.0-4.1.0] 0x8000000008000000) || CanVerifySaveData || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId
| [-19.0.0] 0x13 [20.0.0+] 0x19 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode
|-
|-
| [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]]
| [20.0.0+] 0x1A || || 0x8000000400080000 ||
|-
|-
| [2.0.0+] 0x19 || 0x8000000004000000<br/>([5.0.0-5.1.0] 0x8000000008000000)<br/>([2.0.0-4.1.0] 0x8000000000000800) || CanFormatSdCard || FormatSdCardFileSystem
| [20.0.0+] 0x1B || || 0x8000000400080000 ||
|-
|-
| [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
| [-19.0.0] 0x14 [20.0.0+] 0x1C || CanDebug || 0xC000000000000000 ||  
|-
|-
| [3.0.0+] 0x1B || 0x8000000010000000<br/>([5.0.0-5.1.0] 0x8000000000000800)<br/>([3.0.0-4.1.0] 0x8000000000002020) || CanRegisterExternalKey || RegisterExternalKey, UnregisterAllExternalKey
| [-19.0.0] 0x15 [20.0.0+] 0x1D || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles
|-
|-
| [3.0.0+] 0x1C || 0x8000000000000800<br/>([5.0.0-5.1.0] 0x8000000000004020)<br/>([3.0.0-4.1.0] 0x8000000000000028) || CanSetEncryptionSeed || [[#SetSdCardEncryptionSeed]]
| [2.0.0-19.0.0] 0x16 [20.0.0+] 0x1E || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
|-
|-
| [4.0.0+] 0x1D || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000000)<br/>([4.0.0-4.1.0] 0x8000000020000000) || CanWriteSaveDataFileSystemExtraDataTimeStamp || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x17 [20.0.0+] 0x1F || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
|-
|-
| [4.0.0+] 0x1E || 0x8000000000004020<br/>([5.0.0-5.1.0] 0x8000000000002020)<br/>([4.0.0-4.1.0] 0x8000000040000000) || CanWriteSaveDataFileSystemExtraDataFlags || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x18 [20.0.0+] 0x20 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId
|-
|-
| [4.0.0+] 0x1F || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000028)<br/>([4.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataCommitId || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x19 [20.0.0+] 0x21 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]]
|-
|-
| [4.0.0+] 0x20 || 0x8000000000000000<br/>([5.0.0-5.1.0] 0x8000000020000000)<br/>([4.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataAll || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x1A [20.0.0+] 0x22 || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem
|-
|-
| [5.0.0+] 0x21 || 0x8000000000002020<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanExtendSaveData || ExtendSaveDataFileSystem
| [3.0.0-19.0.0] 0x1B [20.0.0+] 0x23 || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath
|-
|-
| [5.0.0+] 0x22 || 0x8000000000000028<br/>([1.0.0-5.1.0] 0x0000000080000002) || CanExtendSystemSaveData || ExtendSaveDataFileSystem
| [3.0.0-19.0.0] 0x1C [20.0.0+] 0x24 || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey
|-
|-
| [5.0.0+] 0x23 || 0x8000000020000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanRegisterUpdatePartition || RegisterUpdatePartition
| [4.0.0-19.0.0] 0x1D [20.0.0+] 0x25 || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]]
|-
|-
| [5.0.0+] 0x24 || 0x8000000040000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanOpenSaveDataTransferManager || [[#OpenSaveDataTransferManager]]
| [4.0.0-19.0.0] 0x1E [20.0.0+] 0x26 || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [5.0.0+] 0x25 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanOpenSaveDataTransferManagerVersion2 || [[#OpenSaveDataTransferManagerVersion2]]
| [4.0.0-19.0.0] 0x1F [20.0.0+] 0x27 || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [5.0.0+] 0x26 || 0x8000000200000000<br/>([6.0.0-8.1.0] 0x8000000200002000)<br/>([5.0.0-5.1.0] 0x8000000080000110) || CanOpenSaveDataTransferManagerForSaveDataRepair || OpenSaveDataTransferManagerForSaveDataRepair
| [4.0.0-19.0.0] 0x20 [20.0.0+] 0x28 || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [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-19.0.0] 0x21 [20.0.0+] 0x29 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [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-19.0.0] 0x22 [20.0.0+] 0x2A || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem
|-
|-
| [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-19.0.0] 0x23 [20.0.0+] 0x2B || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem
|-
|-
| [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-19.0.0] 0x24 [20.0.0+] 0x2C || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem
|-
|-
| [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-19.0.0] 0x25 [20.0.0+] 0x2D || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition
|-
|-
| [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-19.0.0] 0x26 [20.0.0+] 0x2E || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]]
|-
|-
| [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-19.0.0] 0x27 [20.0.0+] 0x2F || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]]
|-
|-
| [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-19.0.0] 0x28 [20.0.0+] 0x30 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair
|-
|-
| [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-19.0.0] 0x29 [20.0.0+] 0x31 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair
|-
|-
| [5.1.0+] 0x30 || 0x8000000100000000<br/>([5.1.0-6.0.0] 0x8000000080080000) || CanOpenAccessFailureDetectionEventNotifier || [[#OpenAccessFailureDetectionEventNotifier]]
| [5.0.0-19.0.0] 0x2A [20.0.0+] 0x32 || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]]
|-
|-
| [6.0.0+] 0x31 || 0x8000000100000000 || CanGetAccessFailureDetectionEvent || GetAccessFailureDetectionEvent
| [5.0.0-19.0.0] 0x2B [20.0.0+] 0x33 || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]]
|-
|-
| [6.0.0+] 0x32 || 0x8000000100000000 || CanIsAccessFailureDetected || IsAccessFailureDetected
| [5.0.0-19.0.0] 0x2C [20.0.0+] 0x34 || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]]
|-
|-
| [6.0.0+] 0x33 || 0x8000000100000000<br/>([6.0.0-8.1.0] 0x8000000040000000) || CanResolveAccessFailure || ResolveAccessFailure
| [5.0.0-19.0.0] 0x2D [20.0.0+] 0x35 || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]]
|-
|-
| [6.0.0+] 0x34 || 0x8000000100000000<br/>([6.0.0-8.1.0] 0x8000000200000020) || CanAbandonAccessFailure || AbandonAccessFailure
| [5.0.0-19.0.0] 0x2E [20.0.0+] 0x36 || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol
|-
|-
| [6.0.0+] 0x35 || 0x8000000040000000<br/>([6.0.0-8.1.0] 0x8000000000200000) || CanQuerySaveDataInternalStorageTotalSize || QuerySaveDataInternalStorageTotalSize
| [5.0.0-19.0.0] 0x2F [20.0.0+] 0x37 || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey
|-
|-
| [6.0.0+] 0x36 || 0x8000000200000020<br/>([6.0.0-8.1.0] 0x4000000000000000) || CanGetSaveDataCommitId || [[#GetSaveDataCommitId]]
| [5.1.0-19.0.0] 0x30 [20.0.0+] 0x38 || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]]
|-
|-
| [6.0.0+] 0x37 || 0x8000000000200000<br/>([7.0.0-8.1.0] 0x8000000000000000)<br/>([6.0.0-6.2.0] 0x8000000000080000) || CanSetSdCardAccessibility || SetSdCardAccessibility
| [20.0.0+] 0x39 || || 0x8000000000200000 ||
|-
|-
| [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-19.0.0] 0x31 [20.0.0+] 0x3A || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]]
|-
|-
| [8.0.0+] 0x39 || 0x8000000000000000<br/>([8.0.0-8.1.0] 0x8000000000000010) || CanCreateSaveDataWithHashSalt || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]]
| [20.0.0+] 0x3B || CanOpenGameCardAwakenReadyEventNotifier || 0x8000000080000110 || OpenGameCardAwakenReadyEventNotifier
|-
|-
| [9.0.0+] 0x3A || 0x8000000400000000 || CanRegisterProgramIndexMapInfo || RegisterProgramIndexMapInfo
| [6.0.0-19.0.0] 0x32 [20.0.0+] 0x3C || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier
|-
|-
| [9.0.0+] 0x3B || 0x8000000000000010 || CanChallengeCardExistence || ChallengeCardExistence
| [6.0.0-19.0.0] 0x33 [20.0.0+] 0x3D || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent
|-
|-
| [9.0.0+] 0x3C || 0x8000000800000000 || CanCreateOwnSaveData || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt
| [6.0.0-19.0.0] 0x34 [20.0.0+] 0x3E || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]]
|-
|-
| [9.0.0+] 0x3D || 0x8000000800000000 || CanReadOwnSaveDataFileSystemExtraData || [[#ReadSaveDataFileSystemExtraData]]
| [6.0.0-19.0.0] 0x35 [20.0.0+] 0x3F || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent
|-
|-
| [9.0.0+] 0x3E || 0x8000000800000000 || CanExtendOwnSaveData || ExtendSaveDataFileSystem
| [6.0.0-19.0.0] 0x36 [20.0.0+] 0x40 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected
|-
|-
| [9.0.0+] 0x3F || 0x8000000800000000 || CanOpenOwnSaveDataTransferProhibiter || [[#OpenSaveDataTransferProhibiter]]
| [6.0.0-19.0.0] 0x37 [20.0.0+] 0x41 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure
|-
|-
| [9.0.0+] 0x40 || 0x8000000800000000 || CanFindOwnSaveDataWithFilter || [[#FindSaveDataWithFilter]]
| [6.0.0-19.0.0] 0x38 [20.0.0+] 0x42 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure
|}
|-
| [8.0.0-19.0.0] 0x39 [20.0.0+] 0x43 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize
|-
| [9.0.0-19.0.0] 0x3A [20.0.0+] 0x44 || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]]
|-
| [20.0.0+] 0x45 ||  || 0x8000000000200000 ||
|-
| [9.0.0-19.0.0] 0x3B [20.0.0+] 0x46 || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility
|-
| [9.0.0-19.0.0] 0x3C [20.0.0+] 0x47 || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent
|-
| [9.0.0-19.0.0] 0x3D [20.0.0+] 0x48 || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]]
|-
| [9.0.0-19.0.0] 0x3E [20.0.0+] 0x49 || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo
|-
| [9.0.0-19.0.0] 0x3F [20.0.0+] 0x4A || CanChallengeCardExistence || 0x8000000000000010 || ChallengeCardExistence
|-
| [9.0.0-19.0.0] 0x40 [20.0.0+] 0x4B || CanCreateOwnSaveData || 0x8000000800000000 || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt
|-
| [9.0.0-19.0.0] 0x41 [20.0.0+] 0x4C || CanDeleteOwnSaveData || 0x8000000800000000 || [[#DeleteSaveDataFileSystem]]
|-
| [10.0.0-19.0.0] 0x42 [20.0.0+] 0x4D || CanReadOwnSaveDataFileSystemExtraData || 0x8000000800000000 || [[#ReadSaveDataFileSystemExtraData]]
|-
| [10.0.0-19.0.0] 0x43 [20.0.0+] 0x4E || CanExtendOwnSaveData || 0x8000000800000000 || ExtendSaveDataFileSystem
|-
| [10.2.0-19.0.0] 0x44 [20.0.0+] 0x4F || CanOpenOwnSaveDataTransferProhibiter || 0x8000000800000000 || [[#OpenSaveDataTransferProhibiter]]
|-
| [11.0.0-19.0.0] 0x45 [20.0.0+] 0x50 || CanFindOwnSaveDataWithFilter || 0x8000000800000000 || [[#FindSaveDataWithFilter]]
|-
| [13.0.0-19.0.0] 0x46 [20.0.0+] 0x51 || CanOpenSaveDataTransferManagerForRepair || 0x8000000000000020 || [[#OpenSaveDataTransferManagerForRepair]]
|-
| [13.0.0-19.0.0] 0x47 [20.0.0+] 0x52 || CanSetDebugConfiguration || 0x8000000000000000 || SetDebugOption, UnsetDebugOption
|-
| [15.0.0-19.0.0] 0x48 [20.0.0+] 0x53 || CanOpenDataStorageByPath || 0x8000000000000000 || OpenDataStorageByPath
|-
| [17.0.0-19.0.0] 0x49 [20.0.0+] 0x54|| CanNotifyErrorContextServiceReady || 0x8000004000000000 || NotifyErrorContextServiceReady
|-
| [17.0.0-19.0.0] 0x4A || CanGetProgramId || 0x8000000008000000 || GetProgramId, Removed in 20.0.0
|-
| [20.0.0+] 0x55 ||  || 0x8000000000000800 ||
|-
| [20.0.0+] 0x56 ||  || 0x8000000004000000 ||
|-
| [20.0.0+] 0x57 ||  || 0x8000000004000000 ||
|}


== OpenFileSystem ==
== OpenFileSystem ==
Takes a type-0x19 input [[#ContentPath]] and a [[#FileSystemProxyType]] 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 [[#FileSystemProxyType]] 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 [[#FileSystemProxyType]] (which must be '''Manual''') from u32_table[inparam].
Web-applet loads the [[#FileSystemProxyType]] (which must be '''Manual''') from u32_table[inparam].
Line 553: Line 659:
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 [[#FileSystemProxyType]] 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 '''Meta''' if the NCA type is 0.
The [[#IFileSystem]] must be '''Meta''' if the NCA type is 0.
Line 567: Line 673:


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 [[#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.
== 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 583: Line 694:


== 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 660: Line 771:


== OpenSaveDataMover ==
== OpenSaveDataMover ==
Takes a total of 0x10-bytes of input, a handle, returns an output [[#ISaveDataMover]].
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 679: Line 793:


Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives.
Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives.
[[NCA|PublicData]] is exempt from the [[#Permissions|permissions]] check.


== OpenDataFileSystemWithProgramIndex ==
== OpenDataFileSystemWithProgramIndex ==
Line 709: Line 825:
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 847: Line 963:
|-
|-
| 15 || [4.0.0+] QueryEntry
| 15 || [4.0.0+] QueryEntry
|-
| 16 || [15.0.0+] GetFileSystemAttribute
|}
|}


Line 949: Line 1,067:
|-
|-
| 5 || [4.0.0+] OperateRange
| 5 || [4.0.0+] OperateRange
|-
| 6 || [12.0.0+] OperateRangeWithBuffer
|}
|}


Line 973: Line 1,093:
! 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
| 7 || [20.0.0+] SetSdCardActivationMode
|-
|-
| 110 || EraseMmc
| 8 || [20.0.0+] TryGetSdCardInfo
|-
|-
| 111 || GetMmcPartitionSize
| 100 || [[#GetMmcCid]]
|-
|-
| 112 || [2.0.0+] GetMmcPatrolCount
| 101 || [[#GetMmcSpeedMode]]
|-
|-
| 113 || [2.0.0+] GetAndClearMmcErrorInfo
| 110 || [[#EraseMmc]]
|-
|-
| 114 || [2.0.0+] GetMmcExtendedCsd
| 111 || [[#GetMmcPartitionSize]]
|-
|-
| 115 || [4.0.0+] SuspendMmcPatrol
| 112 || [2.0.0+] [[#GetMmcPatrolCount]]
|-
|-
| 116 || [4.0.0+] ResumeMmcPatrol
| 113 || [2.0.0+] [[#GetAndClearMmcErrorInfo]]
|-
|-
| 200 || [[#IsGameCardInserted]]
| 114 || [2.0.0+] [[#GetMmcExtendedCsd]]
|-
|-
| 201 || EraseGameCard
| 115 || [4.0.0+] [[#SuspendMmcPatrol]]
|-
| 116 || [4.0.0+] [[#ResumeMmcPatrol]]
|-
| 117 || [17.0.0+] [[#EraseMmcWithRange]]
|-
| 118 || [20.0.0+] MarkBeforeEraseMmcPartitionUserData
|-
| 119 || [20.0.0+] CheckAfterEraseMmcPartitionUserData
|-
| 200 || [[#IsGameCardInserted]]
|-
| 201 || [[#EraseGameCard]]
|-
|-
| 202 || [[#GetGameCardHandle]]
| 202 || [[#GetGameCardHandle]]
Line 1,011: Line 1,143:
| 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,045: Line 1,177:
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]]
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]]
|-
|-
| 300 || SetSpeedEmulationMode
| 221 || [17.0.0+] [[#GetGameCardAsicCertificate]]
|-
| 222 || [18.0.0+] [[#GetGameCardCardHeader]]
|-
| 223 || [19.0.0+] [[#SetGameCardSessionCreationDelay]]
|-
| 224 || [19.0.0+] [[#GetGameCardApplicationIdList]]
|-
| 225 || [20.0.0+] RegisterGameCardConfigurationData
|-
| 226 || [20.0.0+] GetGameCardDetailedErrorReportInfo
|-
| 300 || [[#SetSpeedEmulationMode]]
|-
| 301 || [[#GetSpeedEmulationMode]]
|-
| 302 || [18.0.0+] [[#SetApplicationStorageSpeed]]
|-
| 303 || [20.0.0+] SetGameCardClockRateForSpeedEmulation
|-
|-
| 301 || GetSpeedEmulationMode
| 304 || [20.0.0+] ClearGameCardClockRateForSpeedEmulation
|-
|-
| 400 || [5.0.0+] SuspendSdmmcControl
| 400 || [5.0.0+] [[#SuspendSdmmcControl]]
|-
|-
| 401 || [5.0.0+] ResumeSdmmcControl
| 401 || [5.0.0+] [[#ResumeSdmmcControl]]
|-
|-
| 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]]
| 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]]
Line 1,060: Line 1,210:
|}
|}


== IsGameCardInserted ==
== IsSdCardInserted ==
No input, returns a bool.
No input. Returns an output bool.
 
== GetSdCardSpeedMode ==
No input. Returns an output [[#SdCardSpeedMode]].


== GetGameCardHandle ==
== GetSdCardCid ==
No input, returns an u32 '''GameCardHandle'''.
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.


== GetGameCardUpdatePartitionInfo ==
== GetSdCardUserAreaSize ==
Returns a [[NCM_services#ProgramId|ProgramId]] and the title-version for it.
No input. Returns an output s64 '''SdCardUserAreaSize'''.


* 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.
== GetSdCardProtectedAreaSize ==
* Output u64 with ARMS-gamecard: [[NCM_services#ProgramId|ProgramId]] 0100000000000816.
No input. Returns an output s64 '''SdCardProtectedAreaSize'''.


[[NS_Services|NS]] appears to only use this with [[NCM_services|NCM]] for checking whether a sysupdate is required.
== GetAndClearSdCardErrorInfo ==
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.


== GetGameCardDeviceCertificate ==
== GetSdCardHostControllerStatus ==
Takes a type-0x6 output buffer, an u32 '''GameCardHandle''' and an u64 '''DeviceCertificateBufferSize'''. No output.
No input. Returns an output [[#HostControllerStatus]].


== ChallengeCardExistence ==
== GetMmcCid ==
Takes a type-0x6 output buffer, two type-0x5 input buffers and an u32 '''GameCardHandle'''. No output.
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. 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]].
== GetMmcSpeedMode ==
No input. Returns an output [[#MmcSpeedMode]].


== GetGameCardCompatibilityType ==
== EraseMmc ==
Takes an u32 '''GameCardHandle''', returns an u8 '''CompatibilityType''' (0x00 = Global, 0x01 = China) from [[Gamecard_Format#Gamecard_Info|Gamecard Info]].
Takes an input [[#MmcPartition]]. No output.


== GetSdmmcConnectionStatus ==
== GetMmcPartitionSize ==
Takes a total of 4-bytes of input, returns a total of 8-bytes of output.
Takes an input [[#MmcPartition]]. Returns an output s64 '''MmcPartitionSize'''.


== SetDeviceSimulationEvent ==  
== GetMmcPatrolCount ==
Takes a total of 0x14-bytes of input, no output.
No input. Returns an output u32 '''MmcPatrolCount'''.


== ClearDeviceSimulationEvent ==
== GetAndClearMmcErrorInfo ==
Takes a total of 4-bytes of input, no output.
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.


= IEventNotifier =
== GetMmcExtendedCsd ==
This is "nn::fssrv::sf::IEventNotifier".
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.


{| class="wikitable" border="1"
== SuspendMmcPatrol ==
|-
No input/output.
! Cmd || Name
|-
| 0 || [[#GetEventHandle]]
|}


== GetEventHandle ==
== ResumeMmcPatrol ==
No input, returns an output Event handle. With official sw the EventClearMode is user-specified.
No input/output.


= ISaveDataTransferManager =
== EraseMmcWithRange ==
This is "nn::fssrv::sf::ISaveDataTransferManager".
Takes an input [[#MmcPartition]] and two input u64s. No output.


This was added with [[4.0.0]].
== IsGameCardInserted ==
No input. Returns an output bool.


{| class="wikitable" border="1"
== EraseGameCard ==
|-
Takes an input [[#GameCardSize]] and an input u64 '''NormalAreaSize'''. No output.
! Cmd || Name
|-
| 0 || [[#GetChallenge]]
|-
| 16 || [[#SetToken]]
|-
| 32 || [[#OpenSaveDataExporter]]
|-
| 64 || [[#OpenSaveDataImporter]]
|}


== GetChallenge ==
== GetGameCardHandle ==
No input/output, takes a type-0x6 output buffer.
No input. Returns an output [[#GameCardHandle]].


== SetToken ==
== GetGameCardUpdatePartitionInfo ==
No input/output, takes a type-0x5 input buffer.
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardUpdatePartitionInfo]].


== OpenSaveDataExporter ==
== FinalizeGameCardDriver ==
Takes an input u8 [[#SaveDataSpaceId]] and u64, returns an [[#ISaveDataExporter]].
No input/output.


== OpenSaveDataImporter ==
== GetGameCardAttribute ==
Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]].
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardAttribute]].


= ISaveDataTransferManagerForSaveDataRepair =
== GetGameCardDeviceCertificate ==
This is "nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair".
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.


This was added with [[9.0.0]].
[19.0.0+] Now returns an output s64 '''OutSize''' which can be 0x200 or 0x400.


{| class="wikitable" border="1"
== GetGameCardAsicInfo ==
|-
Takes a type-0x5 input buffer '''FwBuffer''', a type-0x6 output buffer containing [[#RmaInformation]] and two input s64s '''FwBufferSize''' and '''RmaInformationSize'''. No output.
! Cmd || Name
|-
| 0 || [[#GetChallenge]]
|-
| 16 || [[#SetKeyPackage]]
|-
| 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]]
|-
| 81 || [[#PrepareOpenSaveDataImporter]]
|-
| 90 || [[#OpenSaveDataImporter]]
|-
| 91 || [[#OpenSaveDataImporter2]]
|-
| 100 || [[#OpenSaveDataExporterWithKey]]
|-
| 110 || [[#OpenSaveDataImporterWithKey]]
|}


== SetKeyPackage ==
== GetGameCardIdSet ==
No input/output, takes a type-0x5 input buffer.
Takes a type-0x6 output buffer containing a [[#GameCardIdSet]] and an input s64 '''BufferSize'''. No output.


== OpenSaveDataExporterAndGetEncryptedKey ==
== WriteToGameCardDirectly ==
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 two input s64s '''Offset''' and '''BufferSize'''. No output.


== PrepareOpenSaveDataImporter ==
== SetVerifyWriteEnalbleFlag ==
Takes a type-0x1A output buffer to receive a RsaEncryptedKey.
Takes an input bool. No output.


== OpenSaveDataImporter ==
== GetGameCardImageHash ==
Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]].
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.


== OpenSaveDataImporter2 ==
== GetGameCardDeviceIdForProdCard ==
Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
Takes a type-0x5 input buffer '''CardHeaderForDev''', a type-0x6 output buffer and two input s64s '''CardHeaderForDevSize''' and '''BufferSize'''. No output.


== OpenSaveDataExporterWithKey ==
== EraseAndWriteParamDirectly ==
Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]].
Takes a type-0x5 input buffer and an input s64 '''BufferSize'''. No output.


== OpenSaveDataImporterWithKey ==
== ReadParamDirectly ==
Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.


= ISaveDataMover =
== ForceEraseGameCard ==
This is "nn::fssrv::sf::ISaveDataMover".
No input/output.


This was added with [[10.0.0]].
== GetGameCardErrorInfo ==
No input. Returns an output [[#GameCardErrorInfo]].


{| class="wikitable" border="1"
== GetGameCardErrorReportInfo ==
|-
No input. Returns an output [[#GameCardErrorReportInfo]].
! Cmd || Name
|-
| 8 || [[#Register]]
|-
| 16 || [[#Process]]
|-
| 18 || [[#Cancel]]
|}


== Register ==
== GetGameCardDeviceId ==
Takes an input u64, no output.
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.


== Process ==
== ChallengeCardExistence ==
Takes an input u64, returns an output u64.
Takes a type-0x6 output buffer, two type-0x5 input buffers and an input [[#GameCardHandle]]. No output.


== Cancel ==
[9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]].
No input/output.


= ISaveDataExporter =
== GetGameCardCompatibilityType ==
This is "nn::fssrv::sf::ISaveDataExporter".
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardCompatibilityType]].
 
== GetGameCardAsicCertificate ==
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.


This was added with [[4.0.0]].
== GetGameCardCardHeader ==
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.


{| class="wikitable" border="1"
== SetGameCardSessionCreationDelay ==
|-
Takes two input bools and an input u32. No output.
! Cmd || Name
|-
| 0 || [[#GetSaveDataInfo]]
|-
| 1 || [[#GetRestSize]]
|-
| 16 || [[#Pull]]
|-
| 17 || [[#PullInitialData]]
|}


== GetSaveDataInfo ==
== GetGameCardApplicationIdList ==
No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer.
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. Returns an output u16.


The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw.
== SetSpeedEmulationMode ==
Takes an input [[#SpeedEmulationMode]]. No output.


== GetRestSize ==
== GetSpeedEmulationMode ==
No input, returns an output u64.
No input. Returns an output [[#SpeedEmulationMode]].


== Pull ==
== SetApplicationStorageSpeed ==
Takes a type-0x6 output buffer, returns an output u64.
Takes an input s32. No output.


== PullInitialData ==
== SuspendSdmmcControl ==
No input/output, takes a type-0x6 output buffer.
No input/output.


= ISaveDataImporter =
== ResumeSdmmcControl ==
This is "nn::fssrv::sf::ISaveDataImporter".
No input/output.


This was added with [[4.0.0]].
== GetSdmmcConnectionStatus ==
Takes a total of 4-bytes of input. Returns a total of 8-bytes of output.


{| class="wikitable" border="1"
== 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"
|-
! 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
|-
|-
| 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]]
|-
| 70 || [10.0.0+] DecryptAndVerifyInitialData
|}
|}


== 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 =
This is "nn::fssrv::sf::ISaveDataDivisionExporter".
 
This was added with [[5.0.0]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,351: Line 1,416:
! 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]]
|-
| 71 || [6.0.0+] [[#GetInitialDataMac]]
|-
| 72 || [6.0.0+] [[#FinalizeExport]]
|-
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]]
|-
| 80 || [6.0.0+] [[#GetImportInitialDataAad]]
|-
| 81 || [6.0.0+] [[#SetExportInitialDataAad]]
|-
| 96 || [6.0.0+] [[#GetReportInfo]]
|}
|}


== SetDivisionCount ==
== SetKeyPackage ==
Takes an input u32, no output.
No input/output, takes a type-0x5 input buffer.


== OpenSaveDataChunkExporter ==
== OpenSaveDataExporterAndGetEncryptedKey ==
Takes an input u32, returns an [[#ISaveDataChunkExporter]].
Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]].


== FinalizeFullExport ==
== PrepareOpenSaveDataImporter ==
No input, returns two 0x10-byte output structs.
Takes a type-0x1A output buffer to receive a RsaEncryptedKey.


== FinalizeDiffExport ==
== OpenSaveDataImporter ==
No input, returns an output 0x10-byte struct.
Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]].


== CancelExport ==
== OpenSaveDataImporter2 ==
No input/output.
Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].


== SuspendExport ==
== OpenSaveDataExporterWithKey ==
No input/output, takes a type-0x6 output buffer.
Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]].


== GetKeySeed ==
== OpenSaveDataImporterWithKey ==
No input, returns an output 0x10-byte struct.
Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].


== GetInitialDataMac ==
[17.0.0+] Now only takes 0x18-bytes of input and an additional type-0x5 input buffer.
No input, returns an output 0x10-byte struct.


== FinalizeExport ==
= ISaveDataMover =
No input/output.
This is "nn::fssrv::sf::ISaveDataMover".


== SetExportInitialDataAad ==
This was added with [[10.0.0]].
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,421: Line 1,465:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [6.0.0+] [[#GetSaveDataInfo]]
| 8 || [[#Register]]
|-
|-
| 16 || [[#OpenSaveDataDiffChunkIterator]]
| 16 || [[#Process]]
|-
|-
| 32 || [[#InitializeImport]]
| 18 || [[#Cancel]]
|-
| 33 || [[#FinalizeImport]]
|-
| 34 || [6.0.0+] [[#CancelImport]]
|-
| 35 || [6.0.0+] [[#GetImportContext]]
|-
| 36 || [6.0.0+] [[#SuspendImport]]
|-
| 48 || [[#OpenSaveDataChunkImporter]]
|-
| 64 || [6.0.0+] [[#GetImportInitialDataAad]]
|-
| 80 || [6.0.0+] [[#GetReportInfo]]
|}
|}


== GetSaveDataInfo ==
== Register ==
No input/output, takes a type-0x6 output buffer.
Takes an input u64, no output.


== OpenSaveDataDiffChunkIterator ==
== Process ==
No input, returns an [[#ISaveDataChunkIterator]].
Takes an input u64, returns an output u64.


== InitializeImport ==
== Cancel ==
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.
No input/output.


== OpenSaveDataChunkImporter ==
= ISaveDataTransferManagerForRepair =
Takes an input u32, returns an [[#ISaveDataChunkImporter]].
This is "nn::fssrv::sf::ISaveDataTransferManagerForRepair".
 
== GetImportInitialDataAad ==
No input, returns an output 0x20-byte struct.
 
== GetReportInfo ==
No input, returns an output 0x20-byte struct.
 
= ISaveDataChunkIterator =
This is "nn::fssrv::sf::ISaveDataChunkIterator".


This was added with [[5.0.0]].
This was added with [[11.0.0]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,481: Line 1,490:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [[#Next]]
| 80 || [[#OpenSaveDataExporter]]
|-
|-
| 1 || [[#IsEnd]]
| 90 || [[#OpenSaveDataImporter]]
|-
| 16 || [[#GetId]]  
|}
|}


== Next ==
== OpenSaveDataExporter ==
No input/output.
Takes a total of 0x10-bytes of input, returns an [[#ISaveDataDivisionExporter]].


== IsEnd ==
== OpenSaveDataImporter ==
No input, returns an output u8.
Takes 1-byte of input, a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].


== GetId ==
= ISaveDataExporter =
No input, returns an output u32.
This is "nn::fssrv::sf::ISaveDataExporter".


= ISaveDataChunkExporter =
This was added with [[4.0.0]].
This is "nn::fssrv::sf::ISaveDataChunkExporter".
 
This was added with [[5.0.0]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,506: Line 1,510:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [[#Pull]]
| 0 || [[#GetSaveDataInfo]]
|-
| 1 || [[#GetRestSize]]
|-
| 16 || [[#Pull]]
|-
|-
| 16 || [6.0.0+] [[#GetRestRawDataSize]]
| 17 || [[#PullInitialData]]
|}
|}


== Pull ==
== GetSaveDataInfo ==
Takes an input u64 and a type-0x6 output buffer, returns an output u64.
No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer.
 
The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw.


== GetRestRawDataSize ==
== GetRestSize ==
No input, returns an output u64.
No input, returns an output u64.


= ISaveDataChunkImporter =
== Pull ==
This is "nn::fssrv::sf::ISaveDataChunkImporter".
Takes a type-0x6 output buffer, returns an output u64.
 
== PullInitialData ==
No input/output, takes a type-0x6 output buffer.
 
= ISaveDataImporter =
This is "nn::fssrv::sf::ISaveDataImporter".


This was added with [[5.0.0]].
This was added with [[4.0.0]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,526: Line 1,542:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [[#Push]]
| 0 || [[#GetSaveDataInfo]]
|-
| 1 || [[#GetRestSize]]
|-
| 16 || [[#Push]]
|-
| 17 || [[#Finalize]]
|}
|}


== Push ==
== GetSaveDataInfo ==
Takes an input u64 and a type-0x5 input buffer, no output.
No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer.


= ISaveDataTransferProhibiter =
The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw.
This was added with [[6.0.0]].


This doesn't seem to handle any commands (?).
== GetRestSize ==
No input, returns an output u64.


= IMultiCommitManager =
== Push ==
This was added with [[6.0.0]].
No input/output, takes a type-0x5 input buffer.


{| class="wikitable" border="1"
== Finalize ==
|-
! Cmd || Name
|-
| 1 || [[#Add]]
|-
| 2 || [[#Commit]]
|}
 
== Add ==
Takes an input [[#IFilesystem]], no output.
 
== Commit ==
No input/output.
No input/output.


= IWiper =
= ISaveDataTransferManagerWithDivision =
This is "nn::fs::IWiper".
This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision".


This was added with [[10.0.0]].
This was added with [[5.0.0]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,564: Line 1,574:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || Startup
| 0 || [[#GetChallenge]]
|-
|-
| 16 || Process
| 8 || [18.0.0+] SetMode
|}
 
= FileSystemProxyType =
This is "nn::fs::FileSystemProxyType".
 
{| class="wikitable" border="1"
|-
|-
! Value || Name
| 9 || [18.0.0+] SetAttribute
|-
|-
| 0 || Code
| 16 || [[#SetKeySeedPackage]]
|-
|-
| 1 || Rom
| 17 || [20.0.0+] SetLocalKeySeedPackage
|-
|-
| 2 || Logo
| 32 || [[#OpenSaveDataExporter]]
|-
|-
| 3 || Control
| 33 || [[#OpenSaveDataExporterForDiffExport]]
|-
|-
| 4 || Manual
| 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]]
|-
|-
| 5 || Meta
| 63 || [17.0.0+] OpenSaveDataImporter
|-
|-
| 6 || Data
| 64 || [6.0.0-17.0.1] [[#OpenSaveDataImporterDeprecated]] ([5.0.0-5.1.0] OpenSaveDataImporter)
|-
|-
| 7 || Package
| 65 || [5.0.0-17.0.1] [[#OpenSaveDataImporterForDiffImport]]
|-
|-
| 8 || [4.0.0+] RegisteredUpdate
| 66 || [6.0.0-17.0.1] [[#OpenSaveDataImporterForDuplicateDiffImport]]
|}
 
= ContentType =
This is "nn::fs::ContentType".
 
{| class="wikitable" border="1"
|-
|-
! Value || Name
| 67 || [6.0.0-16.1.0] [[#OpenSaveDataImporter]]
|-
|-
| 0 || Meta
| 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]]
|-
|-
| 1 || Control
| 69 || [6.0.0+] [[#CancelSuspendingImport]]
|-
| 2 || Manual
|-
|-
| 3 || Logo
| 70 || [10.0.0+] CancelSuspendingImportByAttribute
|-
|-
| 4 || Data
| 80 || [11.0.0+] SwapSecondary
|}
|}


= ContentStorageId =
== GetChallenge ==
This is "nn::fs::ContentStorageId".
No input/output, takes a type-0x6 output buffer containing the '''Challenge'''.
 
== SetKeySeedPackage ==
No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''.


{| class="wikitable" border="1"
== OpenSaveDataExporter ==
|-
Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]].
! Value || Name
|-
| 0 || System
|-
| 1 || User
|-
| 2 || SdCard
|}


= SaveDataSpaceId =
== OpenSaveDataExporterForDiffExport ==
This is "nn::fs::SaveDataSpaceId".
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]].


{| class="wikitable" border="1"
== OpenSaveDataExporterByContext ==
|-
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]].
! 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.
== 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 ==
Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
 
== OpenSaveDataImporterByContext ==
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].
 
== CancelSuspendingImport ==
Takes an input u64 and a 0x10-byte struct, no output.
 
= ISaveDataDivisionExporter =
This is "nn::fssrv::sf::ISaveDataDivisionExporter".


= 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 || [[#SetDivisionCount]]
|-
|-
| 1 || Account
| 1 || [6.0.0+] [[#ReadSaveDataExtraData]]
|-
|-
| 2 || Bcat
| 16 || [[#OpenSaveDataDiffChunkIterator]]
|-
|-
| 3 || Device
| 48 || [[#OpenSaveDataChunkExporter]]
|-
| 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]]
|-
| 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]]
|-
| 66 || [6.0.0+] [[#CancelExport]]
|-
|-
| 4 || [3.0.0+] Temporary
| 67 || [6.0.0+] [[#SuspendExport]]
|-
|-
| 5 || [3.0.0+] Cache
| 70 || [6.0.0-17.0.1] [[#GetKeySeed]]
|-
|-
| 6 || [4.0.0+] SystemBcat
| 71 || [6.0.0+] [[#GetInitialDataMac]]
|}
 
= SaveDataRank =
This is "nn::fs::SaveDataRank".
 
{| class="wikitable" border="1"
|-
|-
! Value || Name
| 72 || [6.0.0+] [[#FinalizeExport]]
|-
|-
| 0 || Primary
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]]
|-
|-
| 1 || Secondary
| 74 || [18.0.0+] [[#GetKeySeed]]
|}
 
= SaveDataEnumerateOption =
This is "nn::fs::SaveDataEnumerateOption".
 
{| class="wikitable" border="1"
|-
|-
! Value || Name
| 75 || [20.0.0+] GetLocalKeySeedPackage
|-
|-
| 1 || AllRank
| 80 || [6.0.0+] [[#GetImportInitialDataAad]]
|}
 
= SaveDataFlags =
This is "nn::fs::SaveDataFlags".
 
{| class="wikitable" border="1"
|-
|-
! Value || Name
| 81 || [6.0.0+] [[#SetExportInitialDataAad]]
|-
|-
| 1 || KeepAfterResettingSystemSaveData
| 96 || [6.0.0+] [[#GetReportInfo]]
|-
| 2 || KeepAfterRefurbishment
|-
| 4 || KeepAfterResettingSystemSaveDataWithoutUserSaveData
|-
| 8 || NeedsSecureDelete
|}
|}


= SaveDataMetaType =
== SetDivisionCount ==
This is "nn::fs::SaveDataMetaType".
Takes an input u32, no output.


{| class="wikitable" border="1"
== OpenSaveDataChunkExporter ==
|-
Takes an input u32, returns an [[#ISaveDataChunkExporter]].
! Value || Name
|-
| 0 || None
|-
| 1 || Thumbnail
|-
| 2 || ExtensionContext
|}


= ImageDirectoryId =
== FinalizeFullExport ==
This is "nn::fs::ImageDirectoryId".
No input, returns two 0x10-byte output structs.


{| class="wikitable" border="1"
== FinalizeDiffExport ==
|-
No input, returns an output 0x10-byte struct.
! Value || Name
|-
| 0 || Nand
|-
| 1 || SdCard
|}


= CloudBackupWorkStorageId =
== CancelExport ==
This is "nn::fs::CloudBackupWorkStorageId".
No input/output.


{| class="wikitable" border="1"
== SuspendExport ==
|-
No input/output, takes a type-0x6 output buffer.
! Value || Name
|-
| 0 || Nand
|-
| 1 || SdCard
|}


= CustomStorageId =
== GetKeySeed ==
This is "nn::fs::CustomStorageId".
No input, returns an output 0x10-byte struct.
 
== GetInitialDataMac ==
No input, returns an output 0x10-byte struct.
 
== FinalizeExport ==
No input/output.
 
== SetExportInitialDataAad ==
Takes an input 0x20-byte struct, no output.
 
= ISaveDataDivisionImporter =
This is "nn::fssrv::sf::ISaveDataDivisionImporter".
 
This was added with [[5.0.0]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Value || Name
! Cmd || Name
|-
|-
| 0 || System
| 0 || [6.0.0+] [[#ReadSaveDataExtraData]]
|-
|-
| 1 || SdCard
| 16 || [[#OpenSaveDataDiffChunkIterator]]
|}
 
= Priority =
This is "nn::fs::Priority".
 
{| class="wikitable" border="1"
|-
|-
! Value || Name
| 32 || [[#InitializeImport]]
|-
|-
| 0 || Realtime
| 33 || [[#FinalizeImport]]
|-
|-
| 1 || Normal
| 34 || [6.0.0+] [[#CancelImport]]
|-
|-
| 2 || Low
| 35 || [6.0.0+] [[#GetImportContext]]
|}
 
= PriorityRaw =
This is "nn::fs::PriorityRaw".
 
{| class="wikitable" border="1"
|-
|-
! Value || Name
| 36 || [6.0.0+] [[#SuspendImport]]
|-
|-
| 0 || Realtime
| 37 || [11.0.0+] FinalizeImportWithoutSwap
|-
|-
| 1 || Normal
| 48 || [[#OpenSaveDataChunkImporter]]
|-
|-
| 2 || Low
| 64 || [6.0.0+] [[#GetImportInitialDataAad]]
|-
|-
| 3 || Background
| 80 || [6.0.0+] [[#GetReportInfo]]
|}
|}


= AbortSpecifier =
== ReadSaveDataExtraData ==
This is "nn::fs::AbortSpecifier".
No input/output, takes a type-0x6 output buffer.


{| class="wikitable" border="1"
== OpenSaveDataDiffChunkIterator ==
|-
No input, returns an [[#ISaveDataChunkIterator]].
! Value || Name
|-
| 0 || Default
|-
| 1 || Abort
|-
| 2 || ReturnResult
|}


= OperationId =
== InitializeImport ==
This is "nn::fs::OperationId".
No input, returns an output u64.
 
== FinalizeImport ==
No input/output.


{| class="wikitable" border="1"
== CancelImport ==
|-
No input/output.
! Value || Name
|-
| 0 || Clear
|-
| 1 || ClearSignature
|-
| 2 || InvalidateCache
|-
| 3 || QueryRange
|}


= MountHostOption =
== GetImportContext ==
This is "nn::fs::MountHostOption".
No input/output, takes a type-0x6 output buffer.


{| class="wikitable" border="1"
== SuspendImport ==
|-
No input/output.
! Value || Name
|-
| 1 || PseudoCaseSensitive
|}


= BisPartitionId =
== OpenSaveDataChunkImporter ==
This is "nn::fs::BisPartitionId".
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
|-
|-
| 0 || BootPartition1Root
| 0 || [[#Next]]
|-
|-
| 10 || BootPartition2Root
| 1 || [[#IsEnd]]
|-
|-
| 20 || UserDataRoot
| 16 || [[#GetId]]
|-
|}
| 21 || BootConfigAndPackage2Part1
 
|-
== Next ==
| 22 || BootConfigAndPackage2Part2
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"
|-
|-
| 23 || BootConfigAndPackage2Part3
! Cmd || Name
|-
|-
| 24 || BootConfigAndPackage2Part4
| 0 || [[#Pull]]
|-
|-
| 25 || BootConfigAndPackage2Part5
| 16 || [6.0.0+] [[#GetRestRawDataSize]]
|}
 
== Pull ==
Takes an input u64 and a type-0x6 output buffer, returns an output u64.
 
== GetRestRawDataSize ==
No input, returns an output u64.
 
= ISaveDataChunkImporter =
This is "nn::fssrv::sf::ISaveDataChunkImporter".
 
This was added with [[5.0.0]].
 
{| class="wikitable" border="1"
|-
|-
| 26 || BootConfigAndPackage2Part6
! Cmd || Name
|-
|-
| 27 || CalibrationBinary
| 0 || [[#Push]]
|-
| 28 || CalibrationFile
|-
| 29 || SafeMode
|-
| 30 || User
|-
| 31 || System
|-
| 32 || SystemProperEncryption
|-
| 33 || SystemProperPartition
|-
| 34 || SignedSystemPartitionOnSafeMode
|}
|}


= MmcSpeedMode =
== Push ==
This is "nn::fs::MmcSpeedMode".
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 || Identification
| 1 || [[#Add]]
|-
|-
| 1 || LegacySpeed
| 2 || [[#Commit]]
|}
 
== Add ==
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"
|-
|-
| 2 || HighSpeed
! Cmd || Name
|-
| 3 || Hs200
|-
|-
| 4 || Hs400
| 0 || [[#Startup|Startup]]
|-
|-
| 5 || Unknown
| 16 || [[#Process_2|Process]]
|}
|}


= MmcPartition =
== Startup ==
This is "nn::fs::MmcPartition".
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
|-
|-
| 0 || UserData
| N/A || IsInserted
|-
|-
| 1 || BootPartition1
| N/A || IsHandleValid
|-
|-
| 2 || BootPartition2
| N/A || OpenDetectionEvent
|-
| N/A || OpenOperator
|-
| N/A || OpenDevice
|-
| N/A || OpenStorage
|-
| N/A || Invalidate
|}
|}


= GameCardPartition =
= IStorageDeviceOperator =
This is "nn::fs::GameCardPartition".
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 || Update
| N/A || OperateOut
|-
|-
| 1 || Normal
| N/A || OperateOut2
|-
|-
| 2 || Secure
| N/A || OperateInOut
|-
|-
| 3 || [4.0.0+] Logo
| N/A || OperateIn2Out
|}
|}


= GameCardPartitionRaw =
= IStorageDevice =
This is "nn::fs::GameCardPartitionRaw".
This is "nn::fssrv::storage::sf::IStorageDevice".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Value || Name
! Cmd || Name
|-
| N/A || GetHandle
|-
| N/A || IsHandleValid
|-
| N/A || OpenOperator
|-
| N/A || Read
|-
| N/A || Write
|-
| N/A || Flush
|-
|-
| 0 || NormalReadOnly
| N/A || SetSize
|-
|-
| 1 || SecureReadOnly
| N/A || GetSize
|-
|-
| 2 || RootWriteOnly
| N/A || OperateRange
|}
|}


= GameCardAttribute =
= FileSystemProxyType =
This is "nn::fs::GameCardAttribute".
This is "nn::fs::FileSystemProxyType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,944: Line 1,960:
! Value || Name
! Value || Name
|-
|-
| 1 || AutoBootFlag
| 0 || Code
|-
| 1 || Rom
|-
| 2 || Logo
|-
| 3 || Control
|-
| 4 || Manual
|-
|-
| 2 || HistoryEraseFlag
| 5 || Meta
|-
|-
| 4 || [4.0.0+] RepairToolFlag
| 6 || Data
|-
|-
| 8 || [9.0.0+] DifferentRegionCupToTerraDeviceFlag
| 7 || Package
|-
|-
| 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag
| 8 || [4.0.0+] RegisteredUpdate
|}
|}


= GameCardSize =
= ContentType =
This is "nn::fs::GameCardSize".
This is "nn::fs::ContentType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,962: Line 1,986:
! Value || Name
! Value || Name
|-
|-
| 1 || Size1GB
| 0 || Meta
|-
|-
| 2 || Size2GB
| 1 || Control
|-
|-
| 4 || Size4GB
| 2 || Manual
|-
|-
| 8 || Size8GB
| 3 || Logo
|-
|-
| 16 || Size16GB
| 4 || Data
|-
|}
| 32 || Size32GB
 
|}
= ContentAttributes =
 
This is "nn::fs::ContentAttributes".
= GameCardClockRate =
 
This is "nn::fs::GameCardClockRate".
{| class="wikitable" border="1"
 
|-
{| class="wikitable" border="1"
! Value || Name
|-
|-
! Value || Name
| 0 || None
|-
|-
| 25 || ClockRate25MHz
| 15 || All
|-
|}
| 50 || ClockRate50MHz
 
|}
= ContentStorageId =
 
This is "nn::fs::ContentStorageId".
= SimulatingDeviceType =
 
This is "nn::fs::SimulatingDeviceType".
{| class="wikitable" border="1"
 
|-
{| class="wikitable" border="1"
! Value || Name
|-
|-
! Value || Name
| 0 || System
|-
|-
| 0 || eMMC
| 1 || User
|-
|-
| 1 || SdCard
| 2 || SdCard
|-
|-
| 2 || GameCard
| 3 || [16.0.0+] System0
|}
|}
 
 
= SimulatingDeviceDetectionMode =
= SaveDataSpaceId =
This is "nn::fs::SimulatingDeviceDetectionMode".
This is "nn::fs::SaveDataSpaceId".
 
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Value || Name
! Value || Name
|-
|-
| 0 || NoSimulation
| 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.
 
= SaveDataType =
This is "nn::fs::SaveDataType".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || System
|-
| 1 || Account
|-
| 2 || Bcat
|-
| 3 || Device
|-
| 4 || [3.0.0+] Temporary
|-
| 5 || [3.0.0+] Cache
|-
| 6 || [4.0.0+] SystemBcat
|}
 
= SaveDataRank =
This is "nn::fs::SaveDataRank".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || Primary
|-
| 1 || Secondary
|}
 
= SaveDataEnumerateOption =
This is "nn::fs::SaveDataEnumerateOption".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 1 || AllRank
|}
 
= SaveDataFlags =
This is "nn::fs::SaveDataFlags".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 1 || KeepAfterResettingSystemSaveData
|-
| 2 || KeepAfterRefurbishment
|-
| 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.
 
Embedded in "nn::gc::detail::EmbeddedDataHolder::g_FwWriterBuffer".
 
= SimulatingDeviceType =
This is "nn::fs::SimulatingDeviceType".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || eMMC
|-
| 1 || SdCard
|-
| 2 || GameCard
|}
 
= SimulatingDeviceDetectionMode =
This is "nn::fs::SimulatingDeviceDetectionMode".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || NoSimulation
|-
|-
| 1 || DeviceAttached
| 1 || DeviceAttached
Line 2,059: Line 2,979:
|}
|}


= 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,262: Line 3,182:
= InitialDataVersion2 =
= InitialDataVersion2 =
This is a 0x8210-byte struct used by [[#ISaveDataTransferManagerWithDivision]].
This is a 0x8210-byte struct used by [[#ISaveDataTransferManagerWithDivision]].
= FsAccessControlRestrictionMode =
This is "nn::fs::FsAccessControlRestrictionMode".
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 ||
|}


[[Category:Services]]
[[Category:Services]]