From 2fb3d8826192d08c1261e0f6821a2167909b4f29 Mon Sep 17 00:00:00 2001 From: Alex Barney Date: Sat, 29 Jan 2022 19:41:19 -0700 Subject: [PATCH] Ensure SdCardService and MmcService are updated for 13.1.0 --- src/LibHac/FsSrv/Storage/MmcService.cs | 28 ++++++++++++++++++----- src/LibHac/FsSrv/Storage/SdCardService.cs | 9 +++++--- src/LibHac/SdmmcSrv/SdmmcSrvEnums.cs | 28 +++++++++++------------ 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/LibHac/FsSrv/Storage/MmcService.cs b/src/LibHac/FsSrv/Storage/MmcService.cs index b1d03c5b..dcb6b291 100644 --- a/src/LibHac/FsSrv/Storage/MmcService.cs +++ b/src/LibHac/FsSrv/Storage/MmcService.cs @@ -11,13 +11,29 @@ using IStorageSf = LibHac.FsSrv.Sf.IStorage; namespace LibHac.FsSrv.Storage; +/// +/// Contains global MMC-storage-related functions. +/// +/// Based on FS 13.1.0 (nnSdk 13.4.0) +public static class MmcServiceGlobalMethods +{ + public static Result GetAndClearPatrolReadAllocateBufferCount(this FileSystemServer fsSrv, out long successCount, + out long failureCount) + { + return fsSrv.Storage.GetAndClearPatrolReadAllocateBufferCount(out successCount, out failureCount); + } +} + +/// +/// Contains functions for interacting with the MMC storage device. +/// +/// Based on FS 13.1.0 (nnSdk 13.4.0) internal static class MmcService { private static int MakeOperationId(MmcManagerOperationIdValue operation) => (int)operation; private static int MakeOperationId(MmcOperationIdValue operation) => (int)operation; - private static Result GetMmcManager(this StorageService service, - ref SharedRef outManager) + private static Result GetMmcManager(this StorageService service, ref SharedRef outManager) { return service.CreateStorageDeviceManager(ref outManager, StorageDevicePortId.Mmc); } @@ -146,7 +162,7 @@ internal static class MmcService public static Result EraseMmc(this StorageService service, MmcPartition partition) { using var mmcOperator = new SharedRef(); - Result rc = service.GetMmcOperator(ref mmcOperator.Ref(), MmcPartition.UserData); + Result rc = service.GetMmcOperator(ref mmcOperator.Ref(), partition); if (rc.IsFailure()) return rc; return mmcOperator.Get.Operate(MakeOperationId(MmcOperationIdValue.Erase)); @@ -157,7 +173,7 @@ internal static class MmcService UnsafeHelpers.SkipParamInit(out size); using var mmcOperator = new SharedRef(); - Result rc = service.GetMmcOperator(ref mmcOperator.Ref(), MmcPartition.UserData); + Result rc = service.GetMmcOperator(ref mmcOperator.Ref(), partition); if (rc.IsFailure()) return rc; int operationId = MakeOperationId(MmcOperationIdValue.GetPartitionSize); @@ -242,7 +258,7 @@ internal static class MmcService return mmcOperator.Get.OperateOut2(out _, successCountBuffer, out _, failureCountBuffer, operationId); } - public static Result SuspendSdmmcControl(this StorageService service) + public static Result SuspendMmcControl(this StorageService service) { using var mmcOperator = new SharedRef(); Result rc = service.GetMmcManagerOperator(ref mmcOperator.Ref()); @@ -259,4 +275,4 @@ internal static class MmcService return mmcOperator.Get.Operate(MakeOperationId(MmcManagerOperationIdValue.ResumeControl)); } -} +} \ No newline at end of file diff --git a/src/LibHac/FsSrv/Storage/SdCardService.cs b/src/LibHac/FsSrv/Storage/SdCardService.cs index d4e2b442..b0a63431 100644 --- a/src/LibHac/FsSrv/Storage/SdCardService.cs +++ b/src/LibHac/FsSrv/Storage/SdCardService.cs @@ -14,13 +14,16 @@ using IStorageSf = LibHac.FsSrv.Sf.IStorage; namespace LibHac.FsSrv.Storage; +/// +/// Contains functions for interacting with the SD card storage device. +/// +/// Based on FS 13.1.0 (nnSdk 13.4.0) internal static class SdCardService { private static int MakeOperationId(SdCardManagerOperationIdValue operation) => (int)operation; private static int MakeOperationId(SdCardOperationIdValue operation) => (int)operation; - private static Result GetSdCardManager(this StorageService service, - ref SharedRef outManager) + private static Result GetSdCardManager(this StorageService service, ref SharedRef outManager) { return service.CreateStorageDeviceManager(ref outManager, StorageDevicePortId.SdCard); } @@ -280,4 +283,4 @@ internal static class SdCardService return sdCardOperator.Get.Operate(MakeOperationId(SdCardManagerOperationIdValue.ResumeControl)); } -} +} \ No newline at end of file diff --git a/src/LibHac/SdmmcSrv/SdmmcSrvEnums.cs b/src/LibHac/SdmmcSrv/SdmmcSrvEnums.cs index 16d27086..0732ec66 100644 --- a/src/LibHac/SdmmcSrv/SdmmcSrvEnums.cs +++ b/src/LibHac/SdmmcSrv/SdmmcSrvEnums.cs @@ -10,23 +10,23 @@ public enum SdCardManagerOperationIdValue public enum SdCardOperationIdValue { - GetSpeedMode = 0x1, - GetCid = 0x2, - GetUserAreaNumSectors = 0x3, - GetUserAreaSize = 0x4, - GetProtectedAreaNumSectors = 0x5, - GetProtectedAreaSize = 0x6 + GetSpeedMode = 1, + GetCid = 2, + GetUserAreaNumSectors = 3, + GetUserAreaSize = 4, + GetProtectedAreaNumSectors = 5, + GetProtectedAreaSize = 6 } public enum MmcManagerOperationIdValue { - GetAndClearErrorInfo = 0x1, - SuspendControl = 0x2, - ResumeControl = 0x3, - GetAndClearPatrolReadAllocateBufferCount = 0x4, - GetPatrolCount = 0x5, - SuspendPatrol = 0x6, - ResumePatrol = 0x7 + GetAndClearErrorInfo = 1, + SuspendControl = 2, + ResumeControl = 3, + GetAndClearPatrolReadAllocateBufferCount = 4, + GetPatrolCount = 5, + SuspendPatrol = 6, + ResumePatrol = 7 } public enum MmcOperationIdValue @@ -36,4 +36,4 @@ public enum MmcOperationIdValue GetPartitionSize = 3, GetExtendedCsd = 4, Erase = 5 -} +} \ No newline at end of file