예제 #1
0
        public static Result GetAndClearPatrolReadAllocateBufferCount(this StorageService service,
                                                                      out long successCount, out long failureCount)
        {
            UnsafeHelpers.SkipParamInit(out successCount, out failureCount);

            ReferenceCountedDisposable <IStorageDeviceOperator> mmcOperator = null;

            try
            {
                Result rc = service.GetMmcManagerOperator(out mmcOperator);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                int       operationId        = MakeOperationId(MmcManagerOperationIdValue.GetAndClearPatrolReadAllocateBufferCount);
                OutBuffer successCountBuffer = OutBuffer.FromStruct(ref successCount);
                OutBuffer failureCountBuffer = OutBuffer.FromStruct(ref failureCount);

                return(mmcOperator.Target.OperateOut2(out _, successCountBuffer, out _, failureCountBuffer,
                                                      operationId));
            }
            finally
            {
                mmcOperator?.Dispose();
            }
        }
예제 #2
0
        public static Result GetAndClearMmcErrorInfo(this StorageService service, out StorageErrorInfo errorInfo,
                                                     out long logSize, Span <byte> logBuffer)
        {
            UnsafeHelpers.SkipParamInit(out errorInfo, out logSize);

            ReferenceCountedDisposable <IStorageDeviceOperator> mmcOperator = null;

            try
            {
                Result rc = service.GetMmcManagerOperator(out mmcOperator);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                int       operationId        = MakeOperationId(MmcManagerOperationIdValue.GetAndClearErrorInfo);
                var       logOutBuffer       = new OutBuffer(logBuffer);
                OutBuffer errorInfoOutBuffer = OutBuffer.FromStruct(ref errorInfo);

                return(mmcOperator.Target.OperateOut2(out _, errorInfoOutBuffer, out logSize, logOutBuffer,
                                                      operationId));
            }
            finally
            {
                mmcOperator?.Dispose();
            }
        }
예제 #3
0
        public static Result GetMmcSpeedMode(this StorageService service, out MmcSpeedMode speedMode)
        {
            UnsafeHelpers.SkipParamInit(out speedMode);

            ReferenceCountedDisposable <IStorageDeviceOperator> mmcOperator = null;

            try
            {
                Result rc = service.GetMmcOperator(out mmcOperator, MmcPartition.UserData);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                Unsafe.SkipInit(out SpeedMode sdmmcSpeedMode);
                OutBuffer outBuffer   = OutBuffer.FromStruct(ref sdmmcSpeedMode);
                int       operationId = MakeOperationId(MmcOperationIdValue.GetSpeedMode);

                rc = mmcOperator.Target.OperateOut(out _, outBuffer, operationId);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                speedMode = sdmmcSpeedMode switch
                {
                    SpeedMode.MmcIdentification => MmcSpeedMode.Identification,
                    SpeedMode.MmcLegacySpeed => MmcSpeedMode.LegacySpeed,
                    SpeedMode.MmcHighSpeed => MmcSpeedMode.HighSpeed,
                    SpeedMode.MmcHs200 => MmcSpeedMode.Hs200,
                    SpeedMode.MmcHs400 => MmcSpeedMode.Hs400,
                    _ => MmcSpeedMode.Unknown
                };

                return(Result.Success);
            }
            finally
            {
                mmcOperator?.Dispose();
            }
        }
예제 #4
0
        public static Result GetMmcPatrolCount(this StorageService service, out uint count)
        {
            UnsafeHelpers.SkipParamInit(out count);

            ReferenceCountedDisposable <IStorageDeviceOperator> mmcOperator = null;

            try
            {
                Result rc = service.GetMmcManagerOperator(out mmcOperator);
                if (rc.IsFailure())
                {
                    return(rc);
                }

                int       operationId = MakeOperationId(MmcManagerOperationIdValue.GetPatrolCount);
                OutBuffer outBuffer   = OutBuffer.FromStruct(ref count);

                return(mmcOperator.Target.OperateOut(out _, outBuffer, operationId));
            }
            finally
            {
                mmcOperator?.Dispose();
            }
        }