Filesystem services: Difference between revisions

No edit summary
 
(26 intermediate revisions by 3 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 || [16.0.0+] OpenFileSystemWithIdObsolete ([2.0.0-15.0.1] [[#OpenFileSystemWithId]])
| 8 || [16.0.0+] [[#OpenFileSystemWithIdObsolete]] ([2.0.0-15.0.1] OpenFileSystemWithId)
|-
|-
| 9 || [3.0.0+] OpenDataFileSystemByProgramId
| 9 || [3.0.0+] OpenDataFileSystemByProgramId
|-
|-
| 10 || [16.0.0+] OpenFileSystemWithId
| 10 || [16.0.0+] [[#OpenFileSystemWithId]]
|-
|-
| 11 || [[#OpenBisFileSystem]]
| 11 || [[#OpenBisFileSystem]]
Line 103: Line 113:
|-
|-
| 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute
| 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute
|-
| 29 || [19.0.0+] IsInitializationMode
|-
|-
| 30 || [[#OpenGameCardStorage]]
| 30 || [[#OpenGameCardStorage]]
Line 119: Line 131:
|-
|-
| 37 || [14.0.0+] CreateSaveDataFileSystemWithCreationInfo2
| 37 || [14.0.0+] CreateSaveDataFileSystemWithCreationInfo2
|-
| 38 || [20.0.0+] DetachSdCard
|-
|-
| 51 || [[#OpenSaveDataFileSystem]]
| 51 || [[#OpenSaveDataFileSystem]]
Line 203: 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 253: 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 269: 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 308: Line 330:
| 1019 || [13.0.0+] UnsetDebugOption
| 1019 || [13.0.0+] UnsetDebugOption
|-
|-
| 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey
| 1020 || [18.0.0+] OpenMemoryStressor
|-
| 1100 || [4.0.0-17.0.1] OverrideSaveDataTransferTokenSignVerificationKey
|-
| 1101 || [18.0.0+] OverrideSaveDataTransferKeyForTest
|-
|-
| 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset
| 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset
Line 423: Line 449:
| [6.0.0+] 0x2B || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]]
| [6.0.0+] 0x2B || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]]
|-
|-
| [7.0.0+] 0x2C || CanOpenSaveDataInternalStorage || 0x8000000000000000 || RW || [[#OpenSaveDataInternalStorageFileSystem]]
| [7.0.0+] 0x2C || CanOpenSaveDataInternalStorage || [-19.0.0] 0x8000000000000000 [20.0.0+] 0x8000000000000020 || RW || [[#OpenSaveDataInternalStorageFileSystem]]
|-
|-
| [7.0.0+] 0x2D || CanMountTemporaryDirectory || 0xC000000000000000 || RW ||  
| [7.0.0+] 0x2D || CanMountTemporaryDirectory || 0xC000000000000000 || RW ||  
Line 441: Line 467:
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc
|-
|-
| 0x2 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate
| [20.0.0+] 0x2 || || 0x8000100000000080 ||
|-
|-
| 0x3 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet
| [-19.0.0] 0x2 [20.0.0+] 0x3 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate
|-
|-
| 0x4 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver
| [-19.0.0] 0x3 [20.0.0+] 0x4 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet
|-
|-
| 0x5 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo
| [-19.0.0] 0x4 [20.0.0+] 0x5 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver
|-
|-
| 0x6 || CanGetGameCardAsicCertificate || 0x8000000000000200 || GetGameCardAsicCertificate
| [-19.0.0] 0x5 [20.0.0+] 0x6 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo
|-
|-
| 0x7 || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]]
| [-19.0.0] 0x6 [20.0.0+] 0x7 || CanGetGameCardAsicCertificate || 0x8000000000000200 || GetGameCardAsicCertificate
|-
|-
| 0x8 || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
| [20.0.0+] 0x8 || || 0x8000100000000080 ||
|-
|-
| 0x9 || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId
| [20.0.0+] 0x9 || || 0x8000100000000080 ||
|-
|-
| 0xA || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId
| [20.0.0+] 0xA || || 0x8000080000000000 ||
|-
|-
| 0xB || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
| [20.0.0+] 0xB || || 0x8000000000000010 ||
|-
|-
| 0xC || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
| [20.0.0+] 0xC || || 0x8000100000000080 ||
|-
|-
| 0xD || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
| [-19.0.0] 0x7 [20.0.0+] 0xD || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]]
|-
|-
| 0xE || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]]
| [-19.0.0] 0x8 [20.0.0+] 0xE || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
|-
|-
| 0xF || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile
| [-19.0.0] 0x9 [20.0.0+] 0xF || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId
|-
|-
| 0x10 || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference
| [-19.0.0] 0xA [20.0.0+] 0x10 || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId
|-
|-
| 0x11 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]]
| [-19.0.0] 0xB [20.0.0+] 0x11 || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion
|-
|-
| 0x12 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]]
| [-19.0.0] 0xC [20.0.0+] 0x12 || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
|-
|-
| 0x13 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode
| [-19.0.0] 0xD [20.0.0+] 0x13 || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]
|-
|-
| 0x14 || CanDebug || 0xC000000000000000 ||  
| [-19.0.0] 0xE [20.0.0+] 0x14 || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]]
|-
|-
| 0x15 || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles
| [-19.0.0] 0xF [20.0.0+] 0x15 || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile
|-
|-
| [2.0.0+] 0x16 || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
| [-19.0.0] 0x10 [20.0.0+] 0x16 || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference
|-
|-
| [2.0.0+] 0x17 || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
| [-19.0.0] 0x11 [20.0.0+] 0x17 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]]
|-
|-
| [2.0.0+] 0x18 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId
| [-19.0.0] 0x12 [20.0.0+] 0x18 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]]
|-
|-
| [2.0.0+] 0x19 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]]
| [-19.0.0] 0x13 [20.0.0+] 0x19 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode
|-
|-
| [2.0.0+] 0x1A || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem
| [20.0.0+] 0x1A || || 0x8000000400080000 ||
|-
|-
| [3.0.0+] 0x1B || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath
| [20.0.0+] 0x1B || || 0x8000000400080000 ||
|-
|-
| [3.0.0+] 0x1C || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey
| [-19.0.0] 0x14 [20.0.0+] 0x1C || CanDebug || 0xC000000000000000 ||  
|-
|-
| [4.0.0+] 0x1D || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]]
| [-19.0.0] 0x15 [20.0.0+] 0x1D || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles
|-
|-
| [4.0.0+] 0x1E || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x16 [20.0.0+] 0x1E || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
|-
|-
| [4.0.0+] 0x1F || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x17 [20.0.0+] 0x1F || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId
|-
|-
| [4.0.0+] 0x20 || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x18 [20.0.0+] 0x20 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId
|-
|-
| [5.0.0+] 0x21 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
| [2.0.0-19.0.0] 0x19 [20.0.0+] 0x21 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]]
|-
|-
| [5.0.0+] 0x22 || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem
| [2.0.0-19.0.0] 0x1A [20.0.0+] 0x22 || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem
|-
|-
| [5.0.0+] 0x23 || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem
| [3.0.0-19.0.0] 0x1B [20.0.0+] 0x23 || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath
|-
|-
| [5.0.0+] 0x24 || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem
| [3.0.0-19.0.0] 0x1C [20.0.0+] 0x24 || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey
|-
|-
| [5.0.0+] 0x25 || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition
| [4.0.0-19.0.0] 0x1D [20.0.0+] 0x25 || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]]
|-
|-
| [5.0.0+] 0x26 || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]]
| [4.0.0-19.0.0] 0x1E [20.0.0+] 0x26 || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [5.0.0+] 0x27 || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]]
| [4.0.0-19.0.0] 0x1F [20.0.0+] 0x27 || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [5.0.0+] 0x28 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair
| [4.0.0-19.0.0] 0x20 [20.0.0+] 0x28 || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [5.0.0+] 0x29 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair
| [5.0.0-19.0.0] 0x21 [20.0.0+] 0x29 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask
|-
|-
| [5.0.0+] 0x2A || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]]
| [5.0.0-19.0.0] 0x22 [20.0.0+] 0x2A || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem
|-
|-
| [5.0.0+] 0x2B || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]]
| [5.0.0-19.0.0] 0x23 [20.0.0+] 0x2B || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem
|-
|-
| [5.0.0+] 0x2C || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]]
| [5.0.0-19.0.0] 0x24 [20.0.0+] 0x2C || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem
|-
|-
| [5.0.0+] 0x2D || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]]
| [5.0.0-19.0.0] 0x25 [20.0.0+] 0x2D || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition
|-
|-
| [5.0.0+] 0x2E || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol
| [5.0.0-19.0.0] 0x26 [20.0.0+] 0x2E || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]]
|-
|-
| [5.0.0+] 0x2F || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey
| [5.0.0-19.0.0] 0x27 [20.0.0+] 0x2F || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]]
|-
|-
| [5.1.0+] 0x30 || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]]
| [5.0.0-19.0.0] 0x28 [20.0.0+] 0x30 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair
|-
|-
| [6.0.0+] 0x31 || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]]
| [5.0.0-19.0.0] 0x29 [20.0.0+] 0x31 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair
|-
|-
| [6.0.0+] 0x32 || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier
| [5.0.0-19.0.0] 0x2A [20.0.0+] 0x32 || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]]
|-
|-
| [6.0.0+] 0x33 || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent
| [5.0.0-19.0.0] 0x2B [20.0.0+] 0x33 || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]]
|-
|-
| [6.0.0+] 0x34 || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]]
| [5.0.0-19.0.0] 0x2C [20.0.0+] 0x34 || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]]
|-
|-
| [6.0.0+] 0x35 || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent
| [5.0.0-19.0.0] 0x2D [20.0.0+] 0x35 || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]]
|-
|-
| [6.0.0+] 0x36 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected
| [5.0.0-19.0.0] 0x2E [20.0.0+] 0x36 || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol
|-
|-
| [6.0.0+] 0x37 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure
| [5.0.0-19.0.0] 0x2F [20.0.0+] 0x37 || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey
|-
|-
| [6.0.0+] 0x38 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure
| [5.1.0-19.0.0] 0x30 [20.0.0+] 0x38 || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]]
|-
|-
| [8.0.0+] 0x39 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize
| [20.0.0+] 0x39 || || 0x8000000000200000 ||
|-
|-
| [9.0.0+] 0x3A || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]]
| [6.0.0-19.0.0] 0x31 [20.0.0+] 0x3A || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]]
|-
|-
| [9.0.0+] 0x3B || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility
| [20.0.0+] 0x3B || CanOpenGameCardAwakenReadyEventNotifier || 0x8000000080000110 || OpenGameCardAwakenReadyEventNotifier
|-
|-
| [9.0.0+] 0x3C || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent
| [6.0.0-19.0.0] 0x32 [20.0.0+] 0x3C || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier
|-
|-
| [9.0.0+] 0x3D || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]]
| [6.0.0-19.0.0] 0x33 [20.0.0+] 0x3D || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent
|-
|-
| [9.0.0+] 0x3E || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo
| [6.0.0-19.0.0] 0x34 [20.0.0+] 0x3E || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]]
|-
|-
| [9.0.0+] 0x3F || CanChallengeCardExistence || 0x8000000000000010 || ChallengeCardExistence
| [6.0.0-19.0.0] 0x35 [20.0.0+] 0x3F || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent
|-
|-
| [9.0.0+] 0x40 || CanCreateOwnSaveData || 0x8000000800000000 || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt
| [6.0.0-19.0.0] 0x36 [20.0.0+] 0x40 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected
|-
|-
| [9.0.0+] 0x41 || CanDeleteOwnSaveData || 0x8000000800000000 || [[#DeleteSaveDataFileSystem]]
| [6.0.0-19.0.0] 0x37 [20.0.0+] 0x41 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure
|-
|-
| [10.0.0+] 0x42 || CanReadOwnSaveDataFileSystemExtraData || 0x8000000800000000 || [[#ReadSaveDataFileSystemExtraData]]
| [6.0.0-19.0.0] 0x38 [20.0.0+] 0x42 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure
|-
|-
| [10.0.0+] 0x43 || CanExtendOwnSaveData || 0x8000000800000000 || ExtendSaveDataFileSystem
| [8.0.0-19.0.0] 0x39 [20.0.0+] 0x43 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize
|-
|-
| [10.2.0+] 0x44 || CanOpenOwnSaveDataTransferProhibiter || 0x8000000800000000 || [[#OpenSaveDataTransferProhibiter]]
| [9.0.0-19.0.0] 0x3A [20.0.0+] 0x44 || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]]
|-
|-
| [11.0.0+] 0x45 || CanFindOwnSaveDataWithFilter || 0x8000000800000000 || [[#FindSaveDataWithFilter]]
| [20.0.0+] 0x45 ||   || 0x8000000000200000 ||
|-
|-
| [13.0.0+] 0x46 || CanOpenSaveDataTransferManagerForRepair || 0x8000000000000020 || [[#OpenSaveDataTransferManagerForRepair]]
| [9.0.0-19.0.0] 0x3B [20.0.0+] 0x46 || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility
|-
|-
| [13.0.0+] 0x47 || CanSetDebugConfiguration || 0x8000000000000000 || SetDebugOption, UnsetDebugOption
| [9.0.0-19.0.0] 0x3C [20.0.0+] 0x47 || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent
|-
|-
| [15.0.0+] 0x48 || CanOpenDataStorageByPath || 0x8000000000000000 || OpenDataStorageByPath
| [9.0.0-19.0.0] 0x3D [20.0.0+] 0x48 || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]]
|-
|-
| [17.0.0+] 0x49 || CanNotifyErrorContextServiceReady || 0x8000004000000000 || NotifyErrorContextServiceReady
| [9.0.0-19.0.0] 0x3E [20.0.0+] 0x49 || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo
|-
|-
| [17.0.0+] 0x4A || CanGetProgramId || 0x8000000008000000 || GetProgramId
| [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 603: Line 657:
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 617: Line 671:


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 732: Line 791:


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 1,042: Line 1,103:
| 5 || [2.0.0+] [[#GetAndClearSdCardErrorInfo]]
| 5 || [2.0.0+] [[#GetAndClearSdCardErrorInfo]]
|-
|-
| 6 || [17.0.0+] GetSdCardHostControllerStatus
| 6 || [17.0.0+] [[#GetSdCardHostControllerStatus]]
|-
| 7 || [20.0.0+] SetSdCardActivationMode
|-
| 8 || [20.0.0+] TryGetSdCardInfo
|-
|-
| 100 || [[#GetMmcCid]]
| 100 || [[#GetMmcCid]]
Line 1,062: Line 1,127:
| 116 || [4.0.0+] [[#ResumeMmcPatrol]]
| 116 || [4.0.0+] [[#ResumeMmcPatrol]]
|-
|-
| 117 || [17.0.0+] EraseMmcWithRange
| 117 || [17.0.0+] [[#EraseMmcWithRange]]
|-
| 118 || [20.0.0+] MarkBeforeEraseMmcPartitionUserData
|-
| 119 || [20.0.0+] CheckAfterEraseMmcPartitionUserData
|-
|-
| 200 || [[#IsGameCardInserted]]
| 200 || [[#IsGameCardInserted]]
Line 1,106: Line 1,175:
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]]
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]]
|-
|-
| 221 || [17.0.0+] GetGameCardAsicCertificate
| 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]]
| 300 || [[#SetSpeedEmulationMode]]
|-
|-
| 301 || [[#GetSpeedEmulationMode]]
| 301 || [[#GetSpeedEmulationMode]]
|-
| 302 || [18.0.0+] [[#SetApplicationStorageSpeed]]
|-
| 303 || [20.0.0+] SetGameCardClockRateForSpeedEmulation
|-
| 304 || [20.0.0+] ClearGameCardClockRateForSpeedEmulation
|-
|-
| 400 || [5.0.0+] [[#SuspendSdmmcControl]]
| 400 || [5.0.0+] [[#SuspendSdmmcControl]]
Line 1,140: Line 1,225:
== GetAndClearSdCardErrorInfo ==
== GetAndClearSdCardErrorInfo ==
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.
Takes a type-0x6 output buffer '''LogBuffer''' and an input s64 '''LogBufferSize'''. Returns an output [[#StorageErrorInfo]] and an output s64 '''LogSize'''.
== GetSdCardHostControllerStatus ==
No input. Returns an output [[#HostControllerStatus]].


== GetMmcCid ==
== GetMmcCid ==
Line 1,167: Line 1,255:
== ResumeMmcPatrol ==
== ResumeMmcPatrol ==
No input/output.
No input/output.
== EraseMmcWithRange ==
Takes an input [[#MmcPartition]] and two input u64s. No output.


== IsGameCardInserted ==
== IsGameCardInserted ==
Line 1,188: Line 1,279:
== GetGameCardDeviceCertificate ==
== GetGameCardDeviceCertificate ==
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
[19.0.0+] Now returns an output s64 '''OutSize''' which can be 0x200 or 0x400.


== GetGameCardAsicInfo ==
== GetGameCardAsicInfo ==
Line 1,232: Line 1,325:
== GetGameCardCompatibilityType ==
== GetGameCardCompatibilityType ==
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardCompatibilityType]].
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardCompatibilityType]].
== GetGameCardAsicCertificate ==
Takes a type-0x6 output buffer and an input s64 '''BufferSize'''. No output.
== GetGameCardCardHeader ==
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. No output.
== SetGameCardSessionCreationDelay ==
Takes two input bools and an input u32. No output.
== GetGameCardApplicationIdList ==
Takes a type-0x6 output buffer, an input s64 '''BufferSize''' and an input [[#GameCardHandle]]. Returns an output u16.


== SetSpeedEmulationMode ==
== SetSpeedEmulationMode ==
Line 1,238: Line 1,343:
== GetSpeedEmulationMode ==
== GetSpeedEmulationMode ==
No input. Returns an output [[#SpeedEmulationMode]].
No input. Returns an output [[#SpeedEmulationMode]].
== SetApplicationStorageSpeed ==
Takes an input s32. No output.


== SuspendSdmmcControl ==
== SuspendSdmmcControl ==
Line 1,465: Line 1,573:
|-
|-
| 0 || [[#GetChallenge]]
| 0 || [[#GetChallenge]]
|-
| 8 || [18.0.0+] SetMode
|-
| 9 || [18.0.0+] SetAttribute
|-
|-
| 16 || [[#SetKeySeedPackage]]
| 16 || [[#SetKeySeedPackage]]
|-
| 17 || [20.0.0+] SetLocalKeySeedPackage
|-
|-
| 32 || [[#OpenSaveDataExporter]]
| 32 || [[#OpenSaveDataExporter]]
Line 1,476: Line 1,590:
| 63 || [17.0.0+] OpenSaveDataImporter
| 63 || [17.0.0+] OpenSaveDataImporter
|-
|-
| 64 || [6.0.0+] [[#OpenSaveDataImporterDeprecated]] ([5.0.0-5.1.0] OpenSaveDataImporter)
| 64 || [6.0.0-17.0.1] [[#OpenSaveDataImporterDeprecated]] ([5.0.0-5.1.0] OpenSaveDataImporter)
|-
|-
| 65 || [[#OpenSaveDataImporterForDiffImport]]
| 65 || [5.0.0-17.0.1] [[#OpenSaveDataImporterForDiffImport]]
|-
|-
| 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]]
| 66 || [6.0.0-17.0.1] [[#OpenSaveDataImporterForDuplicateDiffImport]]
|-
|-
| 67 || [6.0.0-16.1.0] [[#OpenSaveDataImporter]]
| 67 || [6.0.0-16.1.0] [[#OpenSaveDataImporter]]
Line 1,488: Line 1,602:
| 69 || [6.0.0+] [[#CancelSuspendingImport]]
| 69 || [6.0.0+] [[#CancelSuspendingImport]]
|-
|-
| 70 || [10.0.0+] DecryptAndVerifyInitialData
| 70 || [10.0.0+] CancelSuspendingImportByAttribute
|-
|-
| 80 || [11.0.0+] DecryptoAndVerifyPortContext
| 80 || [11.0.0+] SwapSecondary
|}
|}


Line 1,537: Line 1,651:
| 0 || [[#SetDivisionCount]]
| 0 || [[#SetDivisionCount]]
|-
|-
| 1 || [6.0.0+] [[#GetSaveDataInfo]]
| 1 || [6.0.0+] [[#ReadSaveDataExtraData]]
|-
|-
| 16 || [[#OpenSaveDataDiffChunkIterator]]
| 16 || [[#OpenSaveDataDiffChunkIterator]]
Line 1,551: Line 1,665:
| 67 || [6.0.0+] [[#SuspendExport]]
| 67 || [6.0.0+] [[#SuspendExport]]
|-
|-
| 70 || [6.0.0+] [[#GetKeySeed]]
| 70 || [6.0.0-17.0.1] [[#GetKeySeed]]
|-
|-
| 71 || [6.0.0+] [[#GetInitialDataMac]]
| 71 || [6.0.0+] [[#GetInitialDataMac]]
Line 1,558: Line 1,672:
|-
|-
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]]
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]]
|-
| 74 || [18.0.0+] [[#GetKeySeed]]
|-
| 75 || [20.0.0+] GetLocalKeySeedPackage
|-
|-
| 80 || [6.0.0+] [[#GetImportInitialDataAad]]
| 80 || [6.0.0+] [[#GetImportInitialDataAad]]
Line 1,605: Line 1,723:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [6.0.0+] [[#GetSaveDataInfo]]
| 0 || [6.0.0+] [[#ReadSaveDataExtraData]]
|-
|-
| 16 || [[#OpenSaveDataDiffChunkIterator]]
| 16 || [[#OpenSaveDataDiffChunkIterator]]
Line 1,628: Line 1,746:
|}
|}


== GetSaveDataInfo ==
== ReadSaveDataExtraData ==
No input/output, takes a type-0x6 output buffer.
No input/output, takes a type-0x6 output buffer.


Line 1,875: Line 1,993:
|-
|-
| 4 || Data
| 4 || Data
|}
= ContentAttributes =
This is "nn::fs::ContentAttributes".
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || None
|-
| 15 || All
|}
|}


Line 2,201: Line 2,331:
|-
|-
| 2 || BootPartition2
| 2 || BootPartition2
|}
= HostControllerStatus =
This is "nn::sdcard::HostControllerStatus".
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0xC
|
|}
|}


Line 2,457: Line 2,601:
| 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag
| 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag
|}
|}
= GameCardAttribute2 =
This is "nn::fs::GameCardAttribute2".


= GameCardSize =
= GameCardSize =
Line 2,522: Line 2,669:
| 0x8
| 0x8
| Id
| 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]]
|}
|}


Line 2,535: Line 2,704:
| 0x0
| 0x0
| 0x1
| 0x1
| MakerCode
| [[#MakerCodeForCardId1|MakerCode]]
|-
|-
| 0x1
| 0x1
| 0x1
| 0x1
| MemoryCapacity
| [[#MemoryCapacity|MemoryCapacity]]
|-
|-
| 0x2
| 0x2
Line 2,547: Line 2,716:
| 0x3
| 0x3
| 0x1
| 0x1
| MemoryType
| [[#MemoryType|MemoryType]]
|}
|}


Line 2,561: Line 2,730:
| 0x0
| 0x0
| 0x1
| 0x1
| CardSecurityNumber
| [[#CardSecurityNumber|CardSecurityNumber]]
|-
|-
| 0x1
| 0x1
| 0x1
| 0x1
| CardType
| [[#CardType|CardType]]
|-
|-
| 0x2
| 0x2
Line 2,586: Line 2,755:
|}
|}


= GameCardIdSet =
= MakerCodeForCardId1 =
This is "nn::gc::GameCardIdSet".
This is "nn::gc::detail::MakerCodeForCardId1".
 
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! Value || Name
! Size
! Description
|-
|-
| 0x0
| 0xC2 || MegaChips
| 0x4
| [[#CardId1|Id1]]
|-
|-
| 0x4
| 0xAE || Lapis
| 0x4
| [[#CardId2|Id2]]
|-
|-
| 0x8
| 0x36 ||  
| 0x4
| [[#CardId3|Id3]]
|}
|}


= RmaInformation =
= MemoryCapacity =
This is "nn::gc::RmaInformation". This is a 0x200-byte struct.
This is "nn::gc::detail::MemoryCapacity".
 
= SimulatingDeviceType =
This is "nn::fs::SimulatingDeviceType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 2,618: Line 2,776:
! Value || Name
! Value || Name
|-
|-
| 0 || eMMC
| 0xFA || 1GB
|-
| 0xF8 || 2GB
|-
| 0xF0 || 4GB
|-
| 0xE0 || 8GB
|-
|-
| 1 || SdCard
| 0xE1 || 16GB
|-
|-
| 2 || GameCard
| 0xE2 || 32GB
|}
|}


= SimulatingDeviceDetectionMode =
= MemoryType =
This is "nn::fs::SimulatingDeviceDetectionMode".
This is "nn::gc::detail::MemoryType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 2,632: Line 2,796:
! Value || Name
! Value || Name
|-
|-
| 0 || NoSimulation
| 0x1 || T1RomFast
|-
| 0x2 || T2RomFast
|-
| 0x9 || T1NandFast
|-
|-
| 1 || DeviceAttached
| 0xA || T2NandFast
|-
|-
| 2 || DeviceRemoved
| 0x21 || T1RomLate
|}
|-
 
| 0x22 || T2RomLate
= SimulatingDeviceAccessFailureEventType =
|-
This is "nn::fs::SimulatingDeviceAccessFailureEventType".
| 0x29 || T1NandLate
 
|-
{| class="wikitable" border="1"
| 0x2A || T2NandLate
|-
|}
! Value || Name
 
|-
= CardSecurityNumber =
| 0 || None
This is "nn::gc::detail::CardSecurityNumber".
|-
 
| 1 || AccessTimeoutFailure
{| class="wikitable" border="1"
|-
|-
| 2 || AccessFailure
! Value || Name
|-
|-
| 3 || DataCorruption
| 0 || 0
|}
|-
 
| 1 || 1
= SimulatingDeviceTargetOperation =
|-
This is "nn::fs::SimulatingDeviceTargetOperation".
| 2 || 2
 
|-
{| class="wikitable" border="1"
| 3 || 3
|-
|-
! Value || Name
| 4 || 4
|-
|}
| 1 || Read
 
|-
= CardType =
| 2 || Write
This is "nn::gc::detail::CardType".
|}
 
 
{| class="wikitable" border="1"
= SpeedEmulationMode =
|-
This is "nn::fs::SpeedEmulationMode".
! Value || Name
 
|-
{| class="wikitable" border="1"
| 0 || Rom
|-
|-
! Value || Name
| 1 || WritableDevT1
|-
|-
| 0 || None
| 2 || WritableProdT1
|-
|-
| 1 || Faster
| 3 || WritableDevT2
|-
|-
| 2 || Slower
| 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
|-
| 2 || DeviceRemoved
|}
 
= SimulatingDeviceAccessFailureEventType =
This is "nn::fs::SimulatingDeviceAccessFailureEventType".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || None
|-
| 1 || AccessTimeoutFailure
|-
| 2 || AccessFailure
|-
| 3 || DataCorruption
|}
 
= SimulatingDeviceTargetOperation =
This is "nn::fs::SimulatingDeviceTargetOperation".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 1 || Read
|-
| 2 || Write
|}
 
= SpeedEmulationMode =
This is "nn::fs::SpeedEmulationMode".
 
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || None
|-
| 1 || Faster
|-
| 2 || Slower
|-
|-
| 3 || Random
| 3 || Random
|}
|}


= 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,886: Line 3,180:
= 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]]