Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 124 additions & 2 deletions nx/include/switch/services/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ typedef enum {
FsSaveDataMetaType_ExtensionContext = 2,
} FsSaveDataMetaType;

typedef enum {
typedef enum FsGameCardAttribute : u8 {
FsGameCardAttribute_AutoBootFlag = BIT(0), ///< Causes the cartridge to automatically start on bootup
FsGameCardAttribute_HistoryEraseFlag = BIT(1), ///< Causes NS to throw an error on attempt to load the cartridge
FsGameCardAttribute_RepairToolFlag = BIT(2), ///< [4.0.0+] Indicates that this gamecard is a repair tool.
Expand All @@ -261,6 +261,57 @@ typedef enum {
FsGameCardPartition_Logo = 3, ///< [4.0.0+]
} FsGameCardPartition;

typedef enum {
FsMmcPartition_UserData = 0,
FsMmcPartition_BootPartition1 = 1,
FsMmcPartition_BootPartition2 = 2,
} FsMmcPartition;

typedef enum {
FsGameCardClockRate_ClockRate25MHz = 25,
FsGameCardClockRate_ClockRate50MHz = 50,
} FsGameCardClockRate;

typedef enum {
FsGameCardSize_Size1GB = 1,
FsGameCardSize_Size2GB = 2,
FsGameCardSize_Size4GB = 4,
FsGameCardSize_Size8GB = 8,
FsGameCardSize_Size16GB = 16,
FsGameCardSize_Size32GB = 32,
} FsGameCardSize;

typedef enum {
FsSpeedEmulationMode_None = 0,
FsSpeedEmulationMode_Faster = 1,
FsSpeedEmulationMode_Slower = 2,
FsSpeedEmulationMode_Random = 3,
} FsSpeedEmulationMode;

typedef enum {
FsSimulatingDeviceType_Mmc = 0,
FsSimulatingDeviceType_SdCard = 1,
FsSimulatingDeviceType_GameCard = 2,
} FsSimulatingDeviceType;

typedef enum {
FsSimulatingDeviceDetectionMode_NoSimulation = 0,
FsSimulatingDeviceDetectionMode_DeviceAttached = 1,
FsSimulatingDeviceDetectionMode_DeviceRemoved = 2,
} FsSimulatingDeviceDetectionMode;

typedef enum {
FsSimulatingDeviceAccessFailureEventType_None = 0,
FsSimulatingDeviceAccessFailureEventType_AccessTimeoutFailure = 1,
FsSimulatingDeviceAccessFailureEventType_AccessFailure = 2,
FsSimulatingDeviceAccessFailureEventType_DataCorruption = 3,
} FsSimulatingDeviceAccessFailureEventType;

typedef enum {
FsSimulatingDeviceTargetOperation_Read = 1,
FsSimulatingDeviceTargetOperation_Write = 2,
} FsSimulatingDeviceTargetOperation;

typedef struct {
u32 value;
} FsGameCardHandle;
Expand All @@ -271,6 +322,27 @@ typedef struct {
u64 id;
} FsGameCardUpdatePartitionInfo;

typedef struct {
u8 data[0xC];
} FsHostControllerStatus;

typedef struct {
u8 data[0x8];
} FsSdmmcConnectionStatus;

typedef enum {
FsSdCardActivationMode_Normal = 0, ///< Normal activation mode.
FsSdCardActivationMode_Override = 1, ///< Override activation mode.
} FsSdCardActivationMode;

typedef struct {
u32 device_type; ///< \ref FsSimulatingDeviceType
u32 detection_mode; ///< \ref FsSimulatingDeviceDetectionMode
u32 access_failure_event; ///< \ref FsSimulatingDeviceAccessFailureEventType
u32 target_operation; ///< \ref FsSimulatingDeviceTargetOperation
u32 access_failure_result;
} FsDeviceSimulationEvent;

typedef struct {
u32 aes_ctr_key_type; ///< Contains bitflags describing how data is AES encrypted.
u32 speed_emulation_type; ///< Contains bitflags describing how data is emulated.
Expand Down Expand Up @@ -386,6 +458,18 @@ typedef struct {
u32 num_read_write_error_corrections;
} FsStorageErrorInfo;

/// FsGameCardErrorInfo
typedef struct {
u16 game_card_crc_error_num;
u16 reserved1;
u16 asic_crc_error_num;
u16 reserved2;
u16 refresh_num;
u16 reserved3;
u16 retry_limit_out_num;
u16 timeout_retry_num;
} FsGameCardErrorInfo;

/// FatFatError
typedef struct {
s32 error;
Expand Down Expand Up @@ -676,18 +760,56 @@ Result fsDeviceOperatorGetSdCardCid(FsDeviceOperator* d, void* dst, size_t dst_s
Result fsDeviceOperatorGetSdCardUserAreaSize(FsDeviceOperator* d, s64* out);
Result fsDeviceOperatorGetSdCardProtectedAreaSize(FsDeviceOperator* d, s64* out);
Result fsDeviceOperatorGetAndClearSdCardErrorInfo(FsDeviceOperator* d, FsStorageErrorInfo* out, s64 *out_log_size, void *dst, size_t dst_size, s64 size);
Result fsDeviceOperatorGetSdCardHostControllerStatus(FsDeviceOperator* d, FsHostControllerStatus* out); ///< [17.0.0+]
Result fsDeviceOperatorSetSdCardActivationMode(FsDeviceOperator* d, FsSdCardActivationMode mode); ///< [20.0.0+]
Result fsDeviceOperatorTryGetSdCardInfo(FsDeviceOperator* d, void* out, size_t out_size, s64 size); ///< [20.0.0+]
Result fsDeviceOperatorGetMmcCid(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
Result fsDeviceOperatorGetMmcSpeedMode(FsDeviceOperator* d, s64* out);
Result fsDeviceOperatorEraseMmc(FsDeviceOperator* d, FsMmcPartition partition);
Result fsDeviceOperatorGetMmcPartitionSize(FsDeviceOperator* d, FsMmcPartition partition, s64* out);
Result fsDeviceOperatorGetMmcPatrolCount(FsDeviceOperator* d, u32* out);
Result fsDeviceOperatorGetAndClearMmcErrorInfo(FsDeviceOperator* d, FsStorageErrorInfo* out, s64 *out_log_size, void *dst, size_t dst_size, s64 size);
Result fsDeviceOperatorGetMmcExtendedCsd(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
Result fsDeviceOperatorSuspendMmcPatrol(FsDeviceOperator* d); ///< [4.0.0+]
Result fsDeviceOperatorResumeMmcPatrol(FsDeviceOperator* d); ///< [4.0.0+]
Result fsDeviceOperatorEraseMmcWithRange(FsDeviceOperator* d, FsMmcPartition partition, s64 offset, s64 size); ///< [17.0.0+]
Result fsDeviceOperatorMarkBeforeEraseMmcPartitionUserData(FsDeviceOperator* d); ///< [20.0.0+]
Result fsDeviceOperatorCheckAfterEraseMmcPartitionUserData(FsDeviceOperator* d); ///< [20.0.0+]
Result fsDeviceOperatorIsGameCardInserted(FsDeviceOperator* d, bool* out);
Result fsDeviceOperatorEraseGameCard(FsDeviceOperator* d, FsGameCardSize size, u64 normal_area_size);
Result fsDeviceOperatorGetGameCardHandle(FsDeviceOperator* d, FsGameCardHandle* out);
Result fsDeviceOperatorGetGameCardUpdatePartitionInfo(FsDeviceOperator* d, const FsGameCardHandle* handle, FsGameCardUpdatePartitionInfo* out);
Result fsDeviceOperatorGetGameCardAttribute(FsDeviceOperator* d, const FsGameCardHandle* handle, u8 *out);
Result fsDeviceOperatorFinalizeGameCardDriver(FsDeviceOperator* d);
Result fsDeviceOperatorGetGameCardAttribute(FsDeviceOperator* d, const FsGameCardHandle* handle, FsGameCardAttribute *out);
Result fsDeviceOperatorGetGameCardDeviceCertificate(FsDeviceOperator* d, const FsGameCardHandle* handle, void* dst, size_t dst_size, s64* out_size, s64 size);
Result fsDeviceOperatorGetGameCardAsicInfo(FsDeviceOperator* d, const void* fw, size_t fw_size, s64 fw_buffer_size, void* rma, size_t rma_size, s64 rma_info_size);
Result fsDeviceOperatorGetGameCardIdSet(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
Result fsDeviceOperatorWriteToGameCardDirectly(FsDeviceOperator* d, void* dst, size_t dst_size, s64 offset, s64 size);
Result fsDeviceOperatorSetVerifyWriteEnableFlag(FsDeviceOperator* d, bool flag);
Result fsDeviceOperatorGetGameCardImageHash(FsDeviceOperator* d, const FsGameCardHandle* handle, void* dst, size_t dst_size, s64 size);
Result fsDeviceOperatorGetGameCardDeviceIdForProdCard(FsDeviceOperator* d, const void* card_header, size_t card_header_size, s64 card_header_buffer_size, void* dst, size_t dst_size, s64 size); ///< [2.0.0+]
Result fsDeviceOperatorEraseAndWriteParamDirectly(FsDeviceOperator* d, const void* buf, size_t buf_size, s64 size); ///< [2.0.0+]
Result fsDeviceOperatorReadParamDirectly(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size); ///< [2.0.0+]
Result fsDeviceOperatorForceEraseGameCard(FsDeviceOperator* d); ///< [2.0.0+]
Result fsDeviceOperatorGetGameCardErrorInfo(FsDeviceOperator* d, FsGameCardErrorInfo* out); ///< [2.0.0+]
Result fsDeviceOperatorGetGameCardErrorReportInfo(FsDeviceOperator* d, FsGameCardErrorReportInfo* out);
Result fsDeviceOperatorGetGameCardDeviceId(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
Result fsDeviceOperatorChallengeCardExistence(FsDeviceOperator* d, const FsGameCardHandle* handle, void* dst, size_t dst_size, void* seed, size_t seed_size, void* value, size_t value_size);
Result fsDeviceOperatorGetGameCardCompatibilityType(FsDeviceOperator* d, const FsGameCardHandle* handle, u8 *out); ///< [9.0.0+]
Result fsDeviceOperatorGetGameCardAsicCertificate(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size); ///< [17.0.0+]
Result fsDeviceOperatorGetGameCardCardHeader(FsDeviceOperator* d, const FsGameCardHandle* handle, void* dst, size_t dst_size, s64 size); ///< [18.0.0+]
Result fsDeviceOperatorSetGameCardSessionCreationDelay(FsDeviceOperator* d, bool flag0, bool flag1, u32 delay); ///< [19.0.0+]
Result fsDeviceOperatorGetGameCardApplicationIdList(FsDeviceOperator* d, const FsGameCardHandle* handle, u64* buf, size_t buf_size, s64 size, u16* out_count); ///< [19.0.0+]
Result fsDeviceOperatorRegisterGameCardConfigurationData(FsDeviceOperator* d, const void* buf, size_t buf_size, s64 size); ///< [20.0.0+]
Result fsDeviceOperatorGetGameCardDetailedErrorReportInfo(FsDeviceOperator* d, void* out, size_t out_size, s64 size); ///< [20.0.0+]
Result fsDeviceOperatorSetSpeedEmulationMode(FsDeviceOperator* d, FsSpeedEmulationMode mode);
Result fsDeviceOperatorGetSpeedEmulationMode(FsDeviceOperator* d, FsSpeedEmulationMode* out);
Result fsDeviceOperatorSetApplicationStorageSpeed(FsDeviceOperator* d, s32 speed); ///< [18.0.0+]
Result fsDeviceOperatorSetGameCardClockRateForSpeedEmulation(FsDeviceOperator* d, s32 clock_rate); ///< [20.0.0+]
Result fsDeviceOperatorClearGameCardClockRateForSpeedEmulation(FsDeviceOperator* d); ///< [20.0.0+]
Result fsDeviceOperatorSuspendSdmmcControl(FsDeviceOperator* d); ///< [5.0.0+]
Result fsDeviceOperatorResumeSdmmcControl(FsDeviceOperator* d); ///< [5.0.0+]
Result fsDeviceOperatorGetSdmmcConnectionStatus(FsDeviceOperator* d, u32 input, FsSdmmcConnectionStatus* out); ///< [6.0.0+]
Result fsDeviceOperatorSetDeviceSimulationEvent(FsDeviceOperator* d, const FsDeviceSimulationEvent* event); ///< [6.0.0+]
Result fsDeviceOperatorClearDeviceSimulationEvent(FsDeviceOperator* d, FsSimulatingDeviceType device_type); ///< [6.0.0+]
void fsDeviceOperatorClose(FsDeviceOperator* d);
Loading