Filesystem services: Difference between revisions
Simplify tables by listing only the latest state and add new values |
|||
(44 intermediate revisions by 4 users not shown) | |||
Line 14: | Line 14: | ||
== OpenCodeFileSystem == | == OpenCodeFileSystem == | ||
Takes | Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]]. | ||
[10.0.0+] | [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 [[# | Takes an input u64 ProcessId. Returns a bool (1 if the process id's [[#FspPath]] ends in ".nca"). | ||
== SetCurrentProcess == | == SetCurrentProcess == | ||
Takes | Takes an input u64 ProcessId. No output. | ||
= fsp-pr = | = fsp-pr = | ||
Line 41: | Line 47: | ||
== RegisterProgram == | == RegisterProgram == | ||
Takes | 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 | Takes an input u64 ProcessId. No output. | ||
Removes registered FS permissions for that PID. | |||
== SetEnabledProgramVerification == | == SetEnabledProgramVerification == | ||
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] | | 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 | ||
|- | |||
| 651 || [S2] | |||
|- | |||
| 660 || [S2] | |||
|- | |- | ||
| 700 || [5.0.0+] [[#OpenAccessFailureDetectionEventNotifier]] | | 700 || [5.0.0+] [[#OpenAccessFailureDetectionEventNotifier]] | ||
Line 269: | Line 293: | ||
|- | |- | ||
| 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 334: | ||
| 1019 || [13.0.0+] UnsetDebugOption | | 1019 || [13.0.0+] UnsetDebugOption | ||
|- | |- | ||
| 1100 || [4.0.0+] | | 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 325: | Line 355: | ||
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 423: | Line 455: | ||
| [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 473: | ||
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc | | 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc | ||
|- | |- | ||
| 0x2 || | | [20.0.0+] 0x2 || || 0x8000100000000080 || | ||
|- | |- | ||
| 0x3 || | | [-19.0.0] 0x2 [20.0.0+] 0x3 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate | ||
|- | |- | ||
| 0x4 || | | [-19.0.0] 0x3 [20.0.0+] 0x4 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet | ||
|- | |- | ||
| 0x5 || | | [-19.0.0] 0x4 [20.0.0+] 0x5 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver | ||
|- | |- | ||
| 0x6 || | | [-19.0.0] 0x5 [20.0.0+] 0x6 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo | ||
|- | |- | ||
| 0x7 || | | [-19.0.0] 0x6 [20.0.0+] 0x7 || CanGetGameCardAsicCertificate || 0x8000000000000200 || GetGameCardAsicCertificate | ||
|- | |- | ||
| 0x8 || | | [20.0.0+] 0x8 || || 0x8000100000000080 || | ||
|- | |- | ||
| 0x9 || | | [20.0.0+] 0x9 || || 0x8000100000000080 || | ||
|- | |- | ||
| 0xA || | | [20.0.0+] 0xA || || 0x8000080000000000 || | ||
|- | |- | ||
| 0xB || | | [20.0.0+] 0xB || || 0x8000000000000010 || | ||
|- | |- | ||
| 0xC || | | [20.0.0+] 0xC || || 0x8000100000000080 || | ||
|- | |- | ||
| 0xD || | | [-19.0.0] 0x7 [20.0.0+] 0xD || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]] | ||
|- | |- | ||
| 0xE || | | [-19.0.0] 0x8 [20.0.0+] 0xE || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion | ||
|- | |- | ||
| 0xF || | | [-19.0.0] 0x9 [20.0.0+] 0xF || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId | ||
|- | |- | ||
| 0x10 || | | [-19.0.0] 0xA [20.0.0+] 0x10 || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId | ||
|- | |- | ||
| 0x11 || | | [-19.0.0] 0xB [20.0.0+] 0x11 || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion | ||
|- | |- | ||
| 0x12 || | | [-19.0.0] 0xC [20.0.0+] 0x12 || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | ||
|- | |- | ||
| 0x13 || | | [-19.0.0] 0xD [20.0.0+] 0x13 || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | ||
|- | |- | ||
| 0x14 || | | [-19.0.0] 0xE [20.0.0+] 0x14 || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]] | ||
|- | |- | ||
| 0x15 || | | [-19.0.0] 0xF [20.0.0+] 0x15 || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile | ||
|- | |- | ||
| [ | | [-19.0.0] 0x10 [20.0.0+] 0x16 || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference | ||
|- | |- | ||
| [ | | [-19.0.0] 0x11 [20.0.0+] 0x17 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]] | ||
|- | |- | ||
| [ | | [-19.0.0] 0x12 [20.0.0+] 0x18 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]] | ||
|- | |- | ||
| [ | | [-19.0.0] 0x13 [20.0.0+] 0x19 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode | ||
|- | |- | ||
| [ | | [20.0.0+] 0x1A || || 0x8000000400080000 || | ||
|- | |- | ||
| [ | | [20.0.0+] 0x1B || || 0x8000000400080000 || | ||
|- | |- | ||
| [ | | [-19.0.0] 0x14 [20.0.0+] 0x1C || CanDebug || 0xC000000000000000 || | ||
|- | |- | ||
| [ | | [-19.0.0] 0x15 [20.0.0+] 0x1D || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles | ||
|- | |- | ||
| [ | | [2.0.0-19.0.0] 0x16 [20.0.0+] 0x1E || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId | ||
|- | |- | ||
| [ | | [2.0.0-19.0.0] 0x17 [20.0.0+] 0x1F || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId | ||
|- | |- | ||
| [ | | [2.0.0-19.0.0] 0x18 [20.0.0+] 0x20 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId | ||
|- | |- | ||
| [ | | [2.0.0-19.0.0] 0x19 [20.0.0+] 0x21 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]] | ||
|- | |- | ||
| [ | | [2.0.0-19.0.0] 0x1A [20.0.0+] 0x22 || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem | ||
|- | |- | ||
| [ | | [3.0.0-19.0.0] 0x1B [20.0.0+] 0x23 || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath | ||
|- | |- | ||
| [ | | [3.0.0-19.0.0] 0x1C [20.0.0+] 0x24 || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey | ||
|- | |- | ||
| [ | | [4.0.0-19.0.0] 0x1D [20.0.0+] 0x25 || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]] | ||
|- | |- | ||
| [ | | [4.0.0-19.0.0] 0x1E [20.0.0+] 0x26 || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | ||
|- | |- | ||
| [ | | [4.0.0-19.0.0] 0x1F [20.0.0+] 0x27 || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | ||
|- | |- | ||
| [ | | [4.0.0-19.0.0] 0x20 [20.0.0+] 0x28 || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | ||
|- | |- | ||
| [5.0.0+] 0x29 || | | [5.0.0-19.0.0] 0x21 [20.0.0+] 0x29 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | ||
|- | |- | ||
| [5.0.0+] 0x2A || | | [5.0.0-19.0.0] 0x22 [20.0.0+] 0x2A || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem | ||
|- | |- | ||
| [5.0.0+] 0x2B || | | [5.0.0-19.0.0] 0x23 [20.0.0+] 0x2B || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem | ||
|- | |- | ||
| [5.0.0+] 0x2C || | | [5.0.0-19.0.0] 0x24 [20.0.0+] 0x2C || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem | ||
|- | |- | ||
| [5.0.0+] 0x2D || | | [5.0.0-19.0.0] 0x25 [20.0.0+] 0x2D || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition | ||
|- | |- | ||
| [5.0.0+] 0x2E || | | [5.0.0-19.0.0] 0x26 [20.0.0+] 0x2E || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]] | ||
|- | |- | ||
| [5.0.0+] 0x2F || | | [5.0.0-19.0.0] 0x27 [20.0.0+] 0x2F || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]] | ||
|- | |- | ||
| [5. | | [5.0.0-19.0.0] 0x28 [20.0.0+] 0x30 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair | ||
|- | |- | ||
| [ | | [5.0.0-19.0.0] 0x29 [20.0.0+] 0x31 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair | ||
|- | |- | ||
| [ | | [5.0.0-19.0.0] 0x2A [20.0.0+] 0x32 || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]] | ||
|- | |- | ||
| [ | | [5.0.0-19.0.0] 0x2B [20.0.0+] 0x33 || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]] | ||
|- | |- | ||
| [ | | [5.0.0-19.0.0] 0x2C [20.0.0+] 0x34 || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]] | ||
|- | |- | ||
| [ | | [5.0.0-19.0.0] 0x2D [20.0.0+] 0x35 || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]] | ||
|- | |- | ||
| [ | | [5.0.0-19.0.0] 0x2E [20.0.0+] 0x36 || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol | ||
|- | |- | ||
| [ | | [5.0.0-19.0.0] 0x2F [20.0.0+] 0x37 || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey | ||
|- | |- | ||
| [ | | [5.1.0-19.0.0] 0x30 [20.0.0+] 0x38 || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]] | ||
|- | |- | ||
| [ | | [20.0.0+] 0x39 || || 0x8000000000200000 || | ||
|- | |- | ||
| [ | | [6.0.0-19.0.0] 0x31 [20.0.0+] 0x3A || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]] | ||
|- | |- | ||
| [ | | [20.0.0+] 0x3B || CanOpenGameCardAwakenReadyEventNotifier || 0x8000000080000110 || OpenGameCardAwakenReadyEventNotifier | ||
|- | |- | ||
| [ | | [6.0.0-19.0.0] 0x32 [20.0.0+] 0x3C || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier | ||
|- | |- | ||
| [ | | [6.0.0-19.0.0] 0x33 [20.0.0+] 0x3D || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent | ||
|- | |- | ||
| [ | | [6.0.0-19.0.0] 0x34 [20.0.0+] 0x3E || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]] | ||
|- | |- | ||
| [ | | [6.0.0-19.0.0] 0x35 [20.0.0+] 0x3F || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent | ||
|- | |- | ||
| [ | | [6.0.0-19.0.0] 0x36 [20.0.0+] 0x40 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected | ||
|- | |- | ||
| [ | | [6.0.0-19.0.0] 0x37 [20.0.0+] 0x41 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure | ||
|- | |- | ||
| [ | | [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 | ||
|- | |- | ||
| [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 || CanGetContentStorageInfo || 0x8000000000000800 || | |||
|- | |||
| [20.0.0+] 0x56 || CanDetachSdCard || 0x8000000004000000 || | |||
|- | |||
| [20.0.0+] 0x57 || CanSetSdCardActivationMode || 0x8000000004000000 || | |||
|} | |} | ||
== OpenFileSystem == | == OpenFileSystem == | ||
Takes a type-0x19 input [[# | 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 | Takes an input u64 ProcessId. No output. | ||
== OpenFileSystemWithPatch == | == OpenFileSystemWithPatch == | ||
Takes an input [[#FileSystemProxyType]] and an | Takes an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]]. | ||
The [[#FileSystemProxyType]] must be '''Manual'''. | |||
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. | ||
== | == OpenFileSystemWithIdObsolete == | ||
Takes a type-0x19 input buffer, an [[#FileSystemProxyType]] and an | 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 677: | ||
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 | 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 797: | ||
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,109: | ||
| 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+] [S1] TryGetSdCardInfo | |||
|- | |- | ||
| 100 || [[#GetMmcCid]] | | 100 || [[#GetMmcCid]] | ||
Line 1,062: | Line 1,133: | ||
| 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 || [S1] [[#IsGameCardInserted]] | |||
|- | |||
| 201 || [S1] [[#EraseGameCard]] | |||
|- | |||
| 202 || [S1] [[#GetGameCardHandle]] | |||
|- | |||
| 203 || [S1] [[#GetGameCardUpdatePartitionInfo]] | |||
|- | |||
| 204 || [S1] [[#FinalizeGameCardDriver]] | |||
|- | |- | ||
| | | 205 || [S1] [[#GetGameCardAttribute]] | ||
|- | |- | ||
| | | 206 || [S1] [[#GetGameCardDeviceCertificate]] | ||
|- | |- | ||
| | | 207 || [S1] [[#GetGameCardAsicInfo]] | ||
|- | |- | ||
| | | 208 || [S1] [[#GetGameCardIdSet]] | ||
|- | |- | ||
| | | 209 || [S1] [[#WriteToGameCardDirectly]] | ||
|- | |- | ||
| | | 210 || [S1] [[#SetVerifyWriteEnalbleFlag]] | ||
|- | |- | ||
| | | 211 || [S1] [[#GetGameCardImageHash]] | ||
|- | |- | ||
| | | 212 || [S1] [2.0.0+] [[#GetGameCardDeviceIdForProdCard]] | ||
|- | |- | ||
| | | 213 || [S1] [2.0.0+] [[#EraseAndWriteParamDirectly]] | ||
|- | |- | ||
| | | 214 || [S1] [2.0.0+] [[#ReadParamDirectly]] | ||
|- | |- | ||
| | | 215 || [S1] [2.0.0+] [[#ForceEraseGameCard]] | ||
|- | |- | ||
| | | 216 || [S1] [2.0.0+] [[#GetGameCardErrorInfo]] | ||
|- | |- | ||
| | | 217 || [S1] [2.1.0+] [[#GetGameCardErrorReportInfo]] | ||
|- | |- | ||
| | | 218 || [S1] [3.0.0+] [[#GetGameCardDeviceId]] | ||
|- | |- | ||
| | | 219 || [S1] [8.0.0+] [[#ChallengeCardExistence]] | ||
|- | |- | ||
| | | 220 || [S1] [9.0.0+] [[#GetGameCardCompatibilityType]] | ||
|- | |- | ||
| | | 221 || [S1] [17.0.0+] [[#GetGameCardAsicCertificate]] | ||
|- | |- | ||
| | | 222 || [S1] [18.0.0+] [[#GetGameCardCardHeader]] | ||
|- | |- | ||
| | | 223 || [S1] [19.0.0+] [[#SetGameCardSessionCreationDelay]] | ||
|- | |- | ||
| | | 224 || [S1] [19.0.0+] [[#GetGameCardApplicationIdList]] | ||
|- | |- | ||
| | | 225 || [S1] [20.0.0+] RegisterGameCardConfigurationData | ||
|- | |- | ||
| | | 226 || [S1] [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,121: | Line 1,212: | ||
|- | |- | ||
| 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]] | | 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]] | ||
|- | |||
| 800 || [S2] [[#OpenStorageDeviceManager]] | |||
|} | |} | ||
Line 1,140: | Line 1,233: | ||
== 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,263: | ||
== 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,287: | ||
== 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,333: | ||
== 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,351: | ||
== 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,253: | Line 1,369: | ||
== ClearDeviceSimulationEvent == | == ClearDeviceSimulationEvent == | ||
Takes a total of 4-bytes of input. No output. | Takes a total of 4-bytes of input. No output. | ||
== OpenStorageDeviceManager == | |||
Takes a byte. Returns an [[#IStorageDeviceManager]]. | |||
= IEventNotifier = | = IEventNotifier = | ||
Line 1,465: | Line 1,584: | ||
|- | |- | ||
| 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,601: | ||
| 63 || [17.0.0+] OpenSaveDataImporter | | 63 || [17.0.0+] OpenSaveDataImporter | ||
|- | |- | ||
| 64 || [6.0.0 | | 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 | | 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,613: | ||
| 69 || [6.0.0+] [[#CancelSuspendingImport]] | | 69 || [6.0.0+] [[#CancelSuspendingImport]] | ||
|- | |- | ||
| 70 || [10.0.0+] | | 70 || [10.0.0+] CancelSuspendingImportByAttribute | ||
|- | |- | ||
| 80 || [11.0.0+] | | 80 || [11.0.0+] SwapSecondary | ||
|} | |} | ||
Line 1,537: | Line 1,662: | ||
| 0 || [[#SetDivisionCount]] | | 0 || [[#SetDivisionCount]] | ||
|- | |- | ||
| 1 || [6.0.0+] [[# | | 1 || [6.0.0+] [[#ReadSaveDataExtraData]] | ||
|- | |- | ||
| 16 || [[#OpenSaveDataDiffChunkIterator]] | | 16 || [[#OpenSaveDataDiffChunkIterator]] | ||
Line 1,551: | Line 1,676: | ||
| 67 || [6.0.0+] [[#SuspendExport]] | | 67 || [6.0.0+] [[#SuspendExport]] | ||
|- | |- | ||
| 70 || [6.0.0 | | 70 || [6.0.0-17.0.1] [[#GetKeySeed]] | ||
|- | |- | ||
| 71 || [6.0.0+] [[#GetInitialDataMac]] | | 71 || [6.0.0+] [[#GetInitialDataMac]] | ||
Line 1,558: | Line 1,683: | ||
|- | |- | ||
| 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,734: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [6.0.0+] [[# | | 0 || [6.0.0+] [[#ReadSaveDataExtraData]] | ||
|- | |- | ||
| 16 || [[#OpenSaveDataDiffChunkIterator]] | | 16 || [[#OpenSaveDataDiffChunkIterator]] | ||
Line 1,628: | Line 1,757: | ||
|} | |} | ||
== | == ReadSaveDataExtraData == | ||
No input/output, takes a type-0x6 output buffer. | No input/output, takes a type-0x6 output buffer. | ||
Line 1,766: | Line 1,895: | ||
= IStorageDeviceManager = | = IStorageDeviceManager = | ||
This is "nn::fssrv::storage::sf::IStorageDeviceManager". | [S2] This is "nn::fssrv::storage::sf::IStorageDeviceManager". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,772: | Line 1,901: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || IsInserted | ||
|- | |||
| 1 || IsHandleValid | |||
|- | |- | ||
| | | 2 || [[#OpenDetectionEvent]] | ||
|- | |- | ||
| | | 3 || Returns an [[#IEventNotifier]]. | ||
|- | |- | ||
| | | 10 || [[#OpenOperator]] | ||
|- | |- | ||
| | | 20 || [[#OpenDevice]] | ||
|- | |- | ||
| | | 21 || [[#OpenStorage]] | ||
|- | |- | ||
| | | 34 || Invalidate | ||
|} | |} | ||
== OpenDetectionEvent == | |||
Returns an [[#IEventNotifier]]. | |||
== OpenOperator == | |||
Returns an [[#IStorageDeviceOperator]]. | |||
== OpenDevice == | |||
Returns an [[#IStorageDevice]]. | |||
== OpenStorage == | |||
Returns an [[#IStorage]]. | |||
= IStorageDeviceOperator = | = IStorageDeviceOperator = | ||
This is "nn::fssrv::storage::sf::IStorageDeviceOperator". | [S2] This is "nn::fssrv::storage::sf::IStorageDeviceOperator". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,794: | Line 1,936: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || Operate | ||
|- | |- | ||
| | | 1 || OperateIn | ||
|- | |- | ||
| | | 10 || OperateOut | ||
|- | |- | ||
| | | 11 || OperateOut2 | ||
|- | |- | ||
| | | 20 || OperateInOut | ||
|- | |- | ||
| | | 21 || OperateIn2Out | ||
|} | |} | ||
= IStorageDevice = | = IStorageDevice = | ||
This is "nn::fssrv::storage::sf::IStorageDevice". | [S2] This is "nn::fssrv::storage::sf::IStorageDevice". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,814: | Line 1,956: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || GetHandle | ||
|- | |- | ||
| | | 1 || IsHandleValid | ||
|- | |- | ||
| | | 10 || OpenOperator | ||
|- | |- | ||
| | | 20 || Read | ||
|- | |- | ||
| | | 21 || Write | ||
|- | |- | ||
| | | 22 || Flush | ||
|- | |- | ||
| | | 23 || SetSize | ||
|- | |- | ||
| | | 24 || GetSize | ||
|- | |- | ||
| | | 25 || OperateRange | ||
|} | |} | ||
= FileSystemProxyType = | = FileSystemProxyType = | ||
This is "nn::fs::FileSystemProxyType". | This is "nn::fs::FileSystemProxyType". | ||
sdknso converts the input [[#ContentType|ContentType]] to a FileSystemProxyType, for use with the cmd input. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,875: | Line 2,019: | ||
|- | |- | ||
| 4 || Data | | 4 || Data | ||
|} | |||
= ContentAttributes = | |||
This is "nn::fs::ContentAttributes". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Name | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || [S2] | |||
|- | |||
| 15 || All | |||
|} | |} | ||
Line 2,203: | Line 2,361: | ||
|} | |} | ||
= | = HostControllerStatus = | ||
This is "nn:: | This is "nn::sdcard::HostControllerStatus". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,213: | Line 2,371: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| 0xC | | 0xC | ||
| | | | ||
|} | |} | ||
= | = MemoryReportInfo = | ||
This is "nn::fs:: | This is "nn::fs::MemoryReportInfo". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,239: | Line 2,385: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | 0x8 | ||
| | | PooledBufferFreeSizePeak | ||
|- | |- | ||
| | | 0x8 | ||
| | | 0x8 | ||
| | | PooledBufferRetriedCount | ||
|- | |- | ||
| 0x10 | |||
| 0x8 | | 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:: | This is "nn::fs::StorageErrorInfo". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Offset | ||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x0 | ||
| 0x4 | |||
| NumActivationFailures | |||
|- | |- | ||
| | | 0x4 | ||
| 0x4 | |||
| NumActivationErrorCorrections | |||
|- | |- | ||
| | | 0x8 | ||
| 0x4 | |||
| NumReadWriteFailures | |||
|- | |- | ||
| | | 0xC | ||
| | | 0x4 | ||
| | | NumReadWriteErrorCorrections | ||
|} | |} | ||
= | = GameCardErrorInfo = | ||
This is "nn::fs:: | This is "nn::fs::GameCardErrorInfo". | ||
{| class="wikitable" border="1" | {| 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:: | This is "nn::fs::GameCardErrorReportInfo". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,363: | Line 2,515: | ||
|- | |- | ||
| 0x0 | | 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 | | 0x2 | ||
| Reserved | | Reserved | ||
|- | |- | ||
| | | 0x22 | ||
| | | 0x2 | ||
| | | RefreshCount | ||
| | |- | ||
| 0x24 | |||
| 0x4 | |||
| LastReadErrorPageAddress | |||
|- | |||
| 0x28 | |||
| 0x4 | |||
| LastReadErrorPageCount | |||
|- | |- | ||
| 0x2C | |||
| 0x4 | |||
| AwakenCount | |||
|- | |- | ||
| | | 0x30 | ||
| | | 0x4 | ||
| | | ReadCountFromInsert | ||
|- | |- | ||
| | | 0x34 | ||
| | | 0x4 | ||
| | | ReadCountFromAwaken | ||
|- | |- | ||
| | | 0x38 | ||
| | | 0x8 | ||
| Reserved | | Reserved | ||
|} | |} | ||
= | = GameCardHandle = | ||
This is "nn:: | This is "nn::fs::GameCardHandle". This is an u32. | ||
= GameCardPartition = | |||
This is "nn::fs::GameCardPartition". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value || Name | ||
|- | |- | ||
| 0x0 | | 0 || Update | ||
| 0x4 | |- | ||
| Reserved | | 1 || Normal | ||
|} | |- | ||
| 2 || Secure | |||
= GameCardIdSet = | |- | ||
This is "nn::gc::GameCardIdSet". | | 3 || [4.0.0+] Logo | ||
|} | |||
{| class="wikitable" border="1" | |||
|- | = GameCardPartitionRaw = | ||
! Offset | This is "nn::fs::GameCardPartitionRaw". | ||
! Size | |||
! Description | {| class="wikitable" border="1" | ||
|- | |- | ||
| 0x0 | ! Value || Name | ||
| 0x4 | |- | ||
| [[#CardId1|Id1]] | | 0 || NormalReadOnly | ||
|- | |- | ||
| 0x4 | | 1 || SecureReadOnly | ||
| 0x4 | |- | ||
| [[#CardId2|Id2]] | | 2 || RootWriteOnly | ||
|- | |} | ||
| 0x8 | |||
| 0x4 | = GameCardAttribute = | ||
| [[#CardId3|Id3]] | This is "nn::fs::GameCardAttribute". | ||
|} | |||
{| class="wikitable" border="1" | |||
= RmaInformation = | |- | ||
This is "nn::gc::RmaInformation". This is a 0x200-byte struct. | ! Value || Name | ||
|- | |||
= SimulatingDeviceType = | | 1 || AutoBootFlag | ||
This is "nn::fs::SimulatingDeviceType". | |- | ||
| 2 || HistoryEraseFlag | |||
{| class="wikitable" border="1" | |- | ||
|- | | 4 || [4.0.0+] RepairToolFlag | ||
! Value || Name | |- | ||
|- | | 8 || [9.0.0+] DifferentRegionCupToTerraDeviceFlag | ||
| 0 || eMMC | |- | ||
|- | | 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag | ||
| 1 || SdCard | |} | ||
|- | |||
| 2 || GameCard | = 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 | |||
|} | |} | ||
Line 2,534: | Line 3,005: | ||
|} | |} | ||
= | = FspPath = | ||
This is "nn::fssrv::sf::FspPath". This is a 0x301-byte string. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,737: | Line 3,208: | ||
= 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]] |