The helper functions for BlockIo and BlockIo2 protocol.\r
\r
Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "EmmcDxe.h"\r
\r
/**\r
- Nonblocking I/O callback funtion when the event is signaled.\r
+ Nonblocking I/O callback function when the event is signaled.\r
\r
@param[in] Event The Event this notify function registered to.\r
@param[in] Context Pointer to the context data registered to the\r
VOID\r
EFIAPI\r
AsyncIoCallback (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- EMMC_REQUEST *Request;\r
- EFI_STATUS Status;\r
+ EMMC_REQUEST *Request;\r
+ EFI_STATUS Status;\r
\r
Status = gBS->CloseEvent (Event);\r
if (EFI_ERROR (Status)) {\r
return;\r
}\r
\r
- Request = (EMMC_REQUEST *) Context;\r
+ Request = (EMMC_REQUEST *)Context;\r
\r
DEBUG_CODE_BEGIN ();\r
- DEBUG ((EFI_D_INFO, "Emmc Async Request: CmdIndex[%d] Arg[%08x] %r\n",\r
- Request->SdMmcCmdBlk.CommandIndex, Request->SdMmcCmdBlk.CommandArgument,\r
- Request->Packet.TransactionStatus));\r
+ DEBUG ((\r
+ DEBUG_INFO,\r
+ "Emmc Async Request: CmdIndex[%d] Arg[%08x] %r\n",\r
+ Request->SdMmcCmdBlk.CommandIndex,\r
+ Request->SdMmcCmdBlk.CommandArgument,\r
+ Request->Packet.TransactionStatus\r
+ ));\r
DEBUG_CODE_END ();\r
\r
if (EFI_ERROR (Request->Packet.TransactionStatus)) {\r
**/\r
EFI_STATUS\r
EmmcSelect (\r
- IN EMMC_DEVICE *Device,\r
- IN UINT16 Rca\r
+ IN EMMC_DEVICE *Device,\r
+ IN UINT16 Rca\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
- EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
- EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
+ EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
+ EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
\r
PassThru = Device->Private->PassThru;\r
\r
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;\r
Packet.Timeout = EMMC_GENERIC_TIMEOUT;\r
\r
- SdMmcCmdBlk.CommandIndex = EMMC_SELECT_DESELECT_CARD;\r
- SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
- SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
+ SdMmcCmdBlk.CommandIndex = EMMC_SELECT_DESELECT_CARD;\r
+ SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
+ SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;\r
\r
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);\r
**/\r
EFI_STATUS\r
EmmcSendStatus (\r
- IN EMMC_DEVICE *Device,\r
- IN UINT16 Rca,\r
- OUT UINT32 *DevStatus\r
+ IN EMMC_DEVICE *Device,\r
+ IN UINT16 Rca,\r
+ OUT UINT32 *DevStatus\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
- EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
- EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
+ EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
+ EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
\r
PassThru = Device->Private->PassThru;\r
\r
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;\r
Packet.Timeout = EMMC_GENERIC_TIMEOUT;\r
\r
- SdMmcCmdBlk.CommandIndex = EMMC_SEND_STATUS;\r
- SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
- SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
+ SdMmcCmdBlk.CommandIndex = EMMC_SEND_STATUS;\r
+ SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
+ SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;\r
\r
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);\r
**/\r
EFI_STATUS\r
EmmcGetCsd (\r
- IN EMMC_DEVICE *Device,\r
- IN UINT16 Rca,\r
- OUT EMMC_CSD *Csd\r
+ IN EMMC_DEVICE *Device,\r
+ IN UINT16 Rca,\r
+ OUT EMMC_CSD *Csd\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
- EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
- EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
+ EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
+ EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
\r
PassThru = Device->Private->PassThru;\r
\r
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;\r
Packet.Timeout = EMMC_GENERIC_TIMEOUT;\r
\r
- SdMmcCmdBlk.CommandIndex = EMMC_SEND_CSD;\r
- SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
- SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;\r
+ SdMmcCmdBlk.CommandIndex = EMMC_SEND_CSD;\r
+ SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
+ SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;\r
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;\r
\r
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);\r
//\r
// For details, refer to SD Host Controller Simplified Spec 3.0 Table 2-12.\r
//\r
- CopyMem (((UINT8*)Csd) + 1, &SdMmcStatusBlk.Resp0, sizeof (EMMC_CSD) - 1);\r
+ CopyMem (((UINT8 *)Csd) + 1, &SdMmcStatusBlk.Resp0, sizeof (EMMC_CSD) - 1);\r
}\r
\r
return Status;\r
**/\r
EFI_STATUS\r
EmmcGetCid (\r
- IN EMMC_DEVICE *Device,\r
- IN UINT16 Rca,\r
- OUT EMMC_CID *Cid\r
+ IN EMMC_DEVICE *Device,\r
+ IN UINT16 Rca,\r
+ OUT EMMC_CID *Cid\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
- EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
- EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
+ EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
+ EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
\r
PassThru = Device->Private->PassThru;\r
\r
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;\r
Packet.Timeout = EMMC_GENERIC_TIMEOUT;\r
\r
- SdMmcCmdBlk.CommandIndex = EMMC_SEND_CID;\r
- SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
- SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;\r
+ SdMmcCmdBlk.CommandIndex = EMMC_SEND_CID;\r
+ SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
+ SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;\r
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;\r
\r
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);\r
//\r
// For details, refer to SD Host Controller Simplified Spec 3.0 Table 2-12.\r
//\r
- CopyMem (((UINT8*)Cid) + 1, &SdMmcStatusBlk.Resp0, sizeof (EMMC_CID) - 1);\r
+ CopyMem (((UINT8 *)Cid) + 1, &SdMmcStatusBlk.Resp0, sizeof (EMMC_CID) - 1);\r
}\r
\r
return Status;\r
**/\r
EFI_STATUS\r
EmmcGetExtCsd (\r
- IN EMMC_DEVICE *Device,\r
- OUT EMMC_EXT_CSD *ExtCsd\r
+ IN EMMC_DEVICE *Device,\r
+ OUT EMMC_EXT_CSD *ExtCsd\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
- EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
- EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
+ EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
+ EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
\r
PassThru = Device->Private->PassThru;\r
\r
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;\r
Packet.Timeout = EMMC_GENERIC_TIMEOUT;\r
\r
- SdMmcCmdBlk.CommandIndex = EMMC_SEND_EXT_CSD;\r
- SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;\r
- SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
+ SdMmcCmdBlk.CommandIndex = EMMC_SEND_EXT_CSD;\r
+ SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;\r
+ SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
SdMmcCmdBlk.CommandArgument = 0x00000000;\r
- Packet.InDataBuffer = ExtCsd;\r
- Packet.InTransferLength = sizeof (EMMC_EXT_CSD);\r
+ Packet.InDataBuffer = ExtCsd;\r
+ Packet.InTransferLength = sizeof (EMMC_EXT_CSD);\r
\r
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);\r
\r
**/\r
EFI_STATUS\r
EmmcSetExtCsd (\r
- IN EMMC_PARTITION *Partition,\r
- IN UINT8 Offset,\r
- IN UINT8 Value,\r
- IN EFI_BLOCK_IO2_TOKEN *Token,\r
- IN BOOLEAN IsEnd\r
+ IN EMMC_PARTITION *Partition,\r
+ IN UINT8 Offset,\r
+ IN UINT8 Value,\r
+ IN EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN BOOLEAN IsEnd\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_DEVICE *Device;\r
- EMMC_REQUEST *SetExtCsdReq;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- UINT32 CommandArgument;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EMMC_DEVICE *Device;\r
+ EMMC_REQUEST *SetExtCsdReq;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ UINT32 CommandArgument;\r
+ EFI_TPL OldTpl;\r
\r
SetExtCsdReq = NULL;\r
\r
}\r
\r
SetExtCsdReq->Signature = EMMC_REQUEST_SIGNATURE;\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Partition->Queue, &SetExtCsdReq->Link);\r
gBS->RestoreTPL (OldTpl);\r
SetExtCsdReq->Packet.SdMmcCmdBlk = &SetExtCsdReq->SdMmcCmdBlk;\r
//\r
// Write the Value to the field specified by Offset.\r
//\r
- CommandArgument = (Value << 8) | (Offset << 16) | BIT24 | BIT25;\r
+ CommandArgument = (Value << 8) | (Offset << 16) | BIT24 | BIT25;\r
SetExtCsdReq->SdMmcCmdBlk.CommandArgument = CommandArgument;\r
\r
SetExtCsdReq->IsEnd = IsEnd;\r
if (SetExtCsdReq->Event != NULL) {\r
gBS->CloseEvent (SetExtCsdReq->Event);\r
}\r
+\r
FreePool (SetExtCsdReq);\r
}\r
} else {\r
**/\r
EFI_STATUS\r
EmmcSetBlkCount (\r
- IN EMMC_PARTITION *Partition,\r
- IN UINT16 BlockNum,\r
- IN EFI_BLOCK_IO2_TOKEN *Token,\r
- IN BOOLEAN IsEnd\r
+ IN EMMC_PARTITION *Partition,\r
+ IN UINT16 BlockNum,\r
+ IN EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN BOOLEAN IsEnd\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_DEVICE *Device;\r
- EMMC_REQUEST *SetBlkCntReq;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EMMC_DEVICE *Device;\r
+ EMMC_REQUEST *SetBlkCntReq;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_TPL OldTpl;\r
\r
SetBlkCntReq = NULL;\r
\r
}\r
\r
SetBlkCntReq->Signature = EMMC_REQUEST_SIGNATURE;\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Partition->Queue, &SetBlkCntReq->Link);\r
gBS->RestoreTPL (OldTpl);\r
SetBlkCntReq->Packet.SdMmcCmdBlk = &SetBlkCntReq->SdMmcCmdBlk;\r
SetBlkCntReq->Packet.SdMmcStatusBlk = &SetBlkCntReq->SdMmcStatusBlk;\r
SetBlkCntReq->Packet.Timeout = EMMC_GENERIC_TIMEOUT;\r
\r
- SetBlkCntReq->SdMmcCmdBlk.CommandIndex = EMMC_SET_BLOCK_COUNT;\r
- SetBlkCntReq->SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
- SetBlkCntReq->SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
+ SetBlkCntReq->SdMmcCmdBlk.CommandIndex = EMMC_SET_BLOCK_COUNT;\r
+ SetBlkCntReq->SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
+ SetBlkCntReq->SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
SetBlkCntReq->SdMmcCmdBlk.CommandArgument = BlockNum;\r
\r
SetBlkCntReq->IsEnd = IsEnd;\r
if (SetBlkCntReq->Event != NULL) {\r
gBS->CloseEvent (SetBlkCntReq->Event);\r
}\r
+\r
FreePool (SetBlkCntReq);\r
}\r
} else {\r
**/\r
EFI_STATUS\r
EmmcProtocolInOut (\r
- IN EMMC_PARTITION *Partition,\r
- IN UINT8 SecurityProtocol,\r
- IN UINT16 SecurityProtocolSpecificData,\r
- IN UINTN PayloadBufferSize,\r
- OUT VOID *PayloadBuffer,\r
- IN BOOLEAN IsRead,\r
- IN UINT64 Timeout,\r
- IN EFI_BLOCK_IO2_TOKEN *Token,\r
- IN BOOLEAN IsEnd\r
+ IN EMMC_PARTITION *Partition,\r
+ IN UINT8 SecurityProtocol,\r
+ IN UINT16 SecurityProtocolSpecificData,\r
+ IN UINTN PayloadBufferSize,\r
+ OUT VOID *PayloadBuffer,\r
+ IN BOOLEAN IsRead,\r
+ IN UINT64 Timeout,\r
+ IN EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN BOOLEAN IsEnd\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_DEVICE *Device;\r
- EMMC_REQUEST *ProtocolReq;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EMMC_DEVICE *Device;\r
+ EMMC_REQUEST *ProtocolReq;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_TPL OldTpl;\r
\r
ProtocolReq = NULL;\r
\r
}\r
\r
ProtocolReq->Signature = EMMC_REQUEST_SIGNATURE;\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Partition->Queue, &ProtocolReq->Link);\r
gBS->RestoreTPL (OldTpl);\r
ProtocolReq->Packet.SdMmcCmdBlk = &ProtocolReq->SdMmcCmdBlk;\r
if (ProtocolReq->Event != NULL) {\r
gBS->CloseEvent (ProtocolReq->Event);\r
}\r
+\r
FreePool (ProtocolReq);\r
}\r
} else {\r
**/\r
EFI_STATUS\r
EmmcRwMultiBlocks (\r
- IN EMMC_PARTITION *Partition,\r
- IN EFI_LBA Lba,\r
- IN VOID *Buffer,\r
- IN UINTN BufferSize,\r
- IN BOOLEAN IsRead,\r
- IN EFI_BLOCK_IO2_TOKEN *Token,\r
- IN BOOLEAN IsEnd\r
+ IN EMMC_PARTITION *Partition,\r
+ IN EFI_LBA Lba,\r
+ IN VOID *Buffer,\r
+ IN UINTN BufferSize,\r
+ IN BOOLEAN IsRead,\r
+ IN EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN BOOLEAN IsEnd\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_DEVICE *Device;\r
- EMMC_REQUEST *RwMultiBlkReq;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EMMC_DEVICE *Device;\r
+ EMMC_REQUEST *RwMultiBlkReq;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_TPL OldTpl;\r
\r
RwMultiBlkReq = NULL;\r
\r
}\r
\r
RwMultiBlkReq->Signature = EMMC_REQUEST_SIGNATURE;\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Partition->Queue, &RwMultiBlkReq->Link);\r
gBS->RestoreTPL (OldTpl);\r
RwMultiBlkReq->Packet.SdMmcCmdBlk = &RwMultiBlkReq->SdMmcCmdBlk;\r
if (RwMultiBlkReq->Event != NULL) {\r
gBS->CloseEvent (RwMultiBlkReq->Event);\r
}\r
+\r
FreePool (RwMultiBlkReq);\r
}\r
} else {\r
@retval EFI_WRITE_PROTECTED The device can not be read/written to.\r
@retval EFI_DEVICE_ERROR The device reported an error while performing the read/write.\r
@retval EFI_NO_MEDIA There is no media in the device.\r
- @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.\r
+ @retval EFI_MEDIA_CHANGED The MediaId does not match the current device.\r
@retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.\r
@retval EFI_INVALID_PARAMETER The read/write request contains LBAs that are not valid,\r
or the buffer is not on proper alignment.\r
**/\r
EFI_STATUS\r
EmmcReadWrite (\r
- IN EMMC_PARTITION *Partition,\r
- IN UINT32 MediaId,\r
- IN EFI_LBA Lba,\r
- IN OUT VOID *Buffer,\r
- IN UINTN BufferSize,\r
- IN BOOLEAN IsRead,\r
- IN OUT EFI_BLOCK_IO2_TOKEN *Token\r
+ IN EMMC_PARTITION *Partition,\r
+ IN UINT32 MediaId,\r
+ IN EFI_LBA Lba,\r
+ IN OUT VOID *Buffer,\r
+ IN UINTN BufferSize,\r
+ IN BOOLEAN IsRead,\r
+ IN OUT EFI_BLOCK_IO2_TOKEN *Token\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_DEVICE *Device;\r
- EFI_BLOCK_IO_MEDIA *Media;\r
- UINTN BlockSize;\r
- UINTN BlockNum;\r
- UINTN IoAlign;\r
- UINT8 PartitionConfig;\r
- UINTN Remaining;\r
- UINT32 MaxBlock;\r
- BOOLEAN LastRw;\r
+ EFI_STATUS Status;\r
+ EMMC_DEVICE *Device;\r
+ EFI_BLOCK_IO_MEDIA *Media;\r
+ UINTN BlockSize;\r
+ UINTN BlockNum;\r
+ UINTN IoAlign;\r
+ UINT8 PartitionConfig;\r
+ UINTN Remaining;\r
+ UINT32 MaxBlock;\r
+ BOOLEAN LastRw;\r
\r
Status = EFI_SUCCESS;\r
Device = Partition->Device;\r
Token->TransactionStatus = EFI_SUCCESS;\r
gBS->SignalEvent (Token->Event);\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
return EFI_BAD_BUFFER_SIZE;\r
}\r
\r
- BlockNum = BufferSize / BlockSize;\r
+ BlockNum = BufferSize / BlockSize;\r
if ((Lba + BlockNum - 1) > Media->LastBlock) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
IoAlign = Media->IoAlign;\r
- if (IoAlign > 0 && (((UINTN) Buffer & (IoAlign - 1)) != 0)) {\r
+ if ((IoAlign > 0) && (((UINTN)Buffer & (IoAlign - 1)) != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if ((Token != NULL) && (Token->Event != NULL)) {\r
Token->TransactionStatus = EFI_SUCCESS;\r
}\r
+\r
//\r
// Check if needs to switch partition access.\r
//\r
PartitionConfig = Device->ExtCsd.PartitionConfig;\r
if ((PartitionConfig & 0x7) != Partition->PartitionType) {\r
- PartitionConfig &= (UINT8)~0x7;\r
+ PartitionConfig &= (UINT8) ~0x7;\r
PartitionConfig |= Partition->PartitionType;\r
- Status = EmmcSetExtCsd (Partition, OFFSET_OF (EMMC_EXT_CSD, PartitionConfig), PartitionConfig, Token, FALSE);\r
+ Status = EmmcSetExtCsd (Partition, OFFSET_OF (EMMC_EXT_CSD, PartitionConfig), PartitionConfig, Token, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
Device->ExtCsd.PartitionConfig = PartitionConfig;\r
}\r
+\r
//\r
// Start to execute data transfer. The max block number in single cmd is 65535 blocks.\r
//\r
} else {\r
BlockNum = MaxBlock;\r
}\r
+\r
Status = EmmcSetBlkCount (Partition, (UINT16)BlockNum, Token, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
BufferSize = BlockNum * BlockSize;\r
- Status = EmmcRwMultiBlocks (Partition, Lba, Buffer, BufferSize, IsRead, Token, LastRw);\r
+ Status = EmmcRwMultiBlocks (Partition, Lba, Buffer, BufferSize, IsRead, Token, LastRw);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- DEBUG ((DEBUG_BLKIO,\r
- "Emmc%a(): Part %d Lba 0x%x BlkNo 0x%x Event %p with %r\n",\r
- IsRead ? "Read " : "Write", Partition->PartitionType, Lba, BlockNum,\r
- (Token != NULL) ? Token->Event : NULL, Status));\r
\r
- Lba += BlockNum;\r
- Buffer = (UINT8*)Buffer + BufferSize;\r
+ DEBUG ((\r
+ DEBUG_BLKIO,\r
+ "Emmc%a(): Part %d Lba 0x%x BlkNo 0x%x Event %p with %r\n",\r
+ IsRead ? "Read " : "Write",\r
+ Partition->PartitionType,\r
+ Lba,\r
+ BlockNum,\r
+ (Token != NULL) ? Token->Event : NULL,\r
+ Status\r
+ ));\r
+\r
+ Lba += BlockNum;\r
+ Buffer = (UINT8 *)Buffer + BufferSize;\r
Remaining -= BlockNum;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
EmmcReset (\r
- IN EFI_BLOCK_IO_PROTOCOL *This,\r
- IN BOOLEAN ExtendedVerification\r
+ IN EFI_BLOCK_IO_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_PARTITION *Partition;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EFI_STATUS Status;\r
+ EMMC_PARTITION *Partition;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
\r
Partition = EMMC_PARTITION_DATA_FROM_BLKIO (This);\r
\r
@retval EFI_SUCCESS The data was read correctly from the device.\r
@retval EFI_DEVICE_ERROR The device reported an error while performing the read.\r
@retval EFI_NO_MEDIA There is no media in the device.\r
- @retval EFI_MEDIA_CHANGED The MediaId does not matched the current device.\r
+ @retval EFI_MEDIA_CHANGED The MediaId does not match the current device.\r
@retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.\r
@retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,\r
or the buffer is not on proper alignment.\r
IN UINT32 MediaId,\r
IN EFI_LBA Lba,\r
IN UINTN BufferSize,\r
- OUT VOID *Buffer\r
+ OUT VOID *Buffer\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_PARTITION *Partition;\r
+ EFI_STATUS Status;\r
+ EMMC_PARTITION *Partition;\r
\r
Partition = EMMC_PARTITION_DATA_FROM_BLKIO (This);\r
\r
@retval EFI_WRITE_PROTECTED The device can not be written to.\r
@retval EFI_DEVICE_ERROR The device reported an error while performing the write.\r
@retval EFI_NO_MEDIA There is no media in the device.\r
- @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.\r
+ @retval EFI_MEDIA_CHANGED The MediaId does not match the current device.\r
@retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.\r
@retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,\r
or the buffer is not on proper alignment.\r
EFI_STATUS\r
EFIAPI\r
EmmcWriteBlocks (\r
- IN EFI_BLOCK_IO_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN EFI_LBA Lba,\r
- IN UINTN BufferSize,\r
- IN VOID *Buffer\r
+ IN EFI_BLOCK_IO_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN BufferSize,\r
+ IN VOID *Buffer\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_PARTITION *Partition;\r
+ EFI_STATUS Status;\r
+ EMMC_PARTITION *Partition;\r
\r
Partition = EMMC_PARTITION_DATA_FROM_BLKIO (This);\r
\r
EFI_STATUS\r
EFIAPI\r
EmmcFlushBlocks (\r
- IN EFI_BLOCK_IO_PROTOCOL *This\r
+ IN EFI_BLOCK_IO_PROTOCOL *This\r
)\r
{\r
//\r
IN BOOLEAN ExtendedVerification\r
)\r
{\r
- EMMC_PARTITION *Partition;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *NextLink;\r
- EMMC_REQUEST *Request;\r
- EFI_TPL OldTpl;\r
+ EMMC_PARTITION *Partition;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *NextLink;\r
+ EMMC_REQUEST *Request;\r
+ EFI_TPL OldTpl;\r
\r
Partition = EMMC_PARTITION_DATA_FROM_BLKIO2 (This);\r
\r
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
for (Link = GetFirstNode (&Partition->Queue);\r
!IsNull (&Partition->Queue, Link);\r
- Link = NextLink) {\r
+ Link = NextLink)\r
+ {\r
NextLink = GetNextNode (&Partition->Queue, Link);\r
RemoveEntryList (Link);\r
\r
\r
FreePool (Request);\r
}\r
+\r
gBS->RestoreTPL (OldTpl);\r
\r
return EFI_SUCCESS;\r
EFI_STATUS\r
EFIAPI\r
EmmcReadBlocksEx (\r
- IN EFI_BLOCK_IO2_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN EFI_LBA Lba,\r
- IN OUT EFI_BLOCK_IO2_TOKEN *Token,\r
- IN UINTN BufferSize,\r
- OUT VOID *Buffer\r
+ IN EFI_BLOCK_IO2_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN EFI_LBA Lba,\r
+ IN OUT EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN UINTN BufferSize,\r
+ OUT VOID *Buffer\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_PARTITION *Partition;\r
+ EFI_STATUS Status;\r
+ EMMC_PARTITION *Partition;\r
\r
Partition = EMMC_PARTITION_DATA_FROM_BLKIO2 (This);\r
\r
@retval EFI_WRITE_PROTECTED The device can not be written to.\r
@retval EFI_DEVICE_ERROR The device reported an error while performing the write.\r
@retval EFI_NO_MEDIA There is no media in the device.\r
- @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.\r
+ @retval EFI_MEDIA_CHANGED The MediaId does not match the current device.\r
@retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.\r
@retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,\r
or the buffer is not on proper alignment.\r
EFI_STATUS\r
EFIAPI\r
EmmcWriteBlocksEx (\r
- IN EFI_BLOCK_IO2_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN EFI_LBA Lba,\r
- IN OUT EFI_BLOCK_IO2_TOKEN *Token,\r
- IN UINTN BufferSize,\r
- IN VOID *Buffer\r
+ IN EFI_BLOCK_IO2_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN EFI_LBA Lba,\r
+ IN OUT EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN UINTN BufferSize,\r
+ IN VOID *Buffer\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_PARTITION *Partition;\r
+ EFI_STATUS Status;\r
+ EMMC_PARTITION *Partition;\r
\r
Partition = EMMC_PARTITION_DATA_FROM_BLKIO2 (This);\r
\r
//\r
// Signal event and return directly.\r
//\r
- if (Token != NULL && Token->Event != NULL) {\r
+ if ((Token != NULL) && (Token->Event != NULL)) {\r
Token->TransactionStatus = EFI_SUCCESS;\r
gBS->SignalEvent (Token->Event);\r
}\r
EFI_STATUS\r
EFIAPI\r
EmmcSecurityProtocolInOut (\r
- IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN UINT64 Timeout,\r
- IN UINT8 SecurityProtocolId,\r
- IN UINT16 SecurityProtocolSpecificData,\r
- IN UINTN PayloadBufferSize,\r
- OUT VOID *PayloadBuffer,\r
- OUT UINTN *PayloadTransferSize,\r
- IN BOOLEAN IsRead\r
+ IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN UINT64 Timeout,\r
+ IN UINT8 SecurityProtocolId,\r
+ IN UINT16 SecurityProtocolSpecificData,\r
+ IN UINTN PayloadBufferSize,\r
+ OUT VOID *PayloadBuffer,\r
+ OUT UINTN *PayloadTransferSize,\r
+ IN BOOLEAN IsRead\r
)\r
{\r
- EFI_STATUS Status;\r
- EMMC_PARTITION *Partition;\r
- EMMC_DEVICE *Device;\r
- EFI_BLOCK_IO_MEDIA *Media;\r
- UINTN BlockSize;\r
- UINTN BlockNum;\r
- UINTN IoAlign;\r
- UINTN Remaining;\r
- UINT32 MaxBlock;\r
- UINT8 PartitionConfig;\r
+ EFI_STATUS Status;\r
+ EMMC_PARTITION *Partition;\r
+ EMMC_DEVICE *Device;\r
+ EFI_BLOCK_IO_MEDIA *Media;\r
+ UINTN BlockSize;\r
+ UINTN BlockNum;\r
+ UINTN IoAlign;\r
+ UINTN Remaining;\r
+ UINT32 MaxBlock;\r
+ UINT8 PartitionConfig;\r
\r
Status = EFI_SUCCESS;\r
Partition = EMMC_PARTITION_DATA_FROM_SSP (This);\r
return EFI_BAD_BUFFER_SIZE;\r
}\r
\r
- BlockNum = PayloadBufferSize / BlockSize;\r
+ BlockNum = PayloadBufferSize / BlockSize;\r
\r
IoAlign = Media->IoAlign;\r
- if (IoAlign > 0 && (((UINTN) PayloadBuffer & (IoAlign - 1)) != 0)) {\r
+ if ((IoAlign > 0) && (((UINTN)PayloadBuffer & (IoAlign - 1)) != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// Security protocol interface is synchronous transfer.\r
// Waiting for async I/O list to be empty before any operation.\r
//\r
- while (!IsListEmpty (&Partition->Queue));\r
+ while (!IsListEmpty (&Partition->Queue)) {\r
+ }\r
\r
//\r
// Check if needs to switch partition access.\r
//\r
PartitionConfig = Device->ExtCsd.PartitionConfig;\r
if ((PartitionConfig & 0x7) != Partition->PartitionType) {\r
- PartitionConfig &= (UINT8)~0x7;\r
+ PartitionConfig &= (UINT8) ~0x7;\r
PartitionConfig |= Partition->PartitionType;\r
- Status = EmmcSetExtCsd (Partition, OFFSET_OF (EMMC_EXT_CSD, PartitionConfig), PartitionConfig, NULL, FALSE);\r
+ Status = EmmcSetExtCsd (Partition, OFFSET_OF (EMMC_EXT_CSD, PartitionConfig), PartitionConfig, NULL, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
Device->ExtCsd.PartitionConfig = PartitionConfig;\r
}\r
+\r
//\r
// Start to execute data transfer. The max block number in single cmd is 65535 blocks.\r
//\r
}\r
\r
PayloadBufferSize = BlockNum * BlockSize;\r
- Status = EmmcProtocolInOut (Partition, SecurityProtocolId, SecurityProtocolSpecificData, PayloadBufferSize, PayloadBuffer, IsRead, Timeout, NULL, FALSE);\r
+ Status = EmmcProtocolInOut (Partition, SecurityProtocolId, SecurityProtocolSpecificData, PayloadBufferSize, PayloadBuffer, IsRead, Timeout, NULL, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- PayloadBuffer = (UINT8*)PayloadBuffer + PayloadBufferSize;\r
+ PayloadBuffer = (UINT8 *)PayloadBuffer + PayloadBufferSize;\r
Remaining -= BlockNum;\r
if (PayloadTransferSize != NULL) {\r
*PayloadTransferSize += PayloadBufferSize;\r
EFI_STATUS\r
EFIAPI\r
EmmcSecurityProtocolIn (\r
- IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN UINT64 Timeout,\r
- IN UINT8 SecurityProtocolId,\r
- IN UINT16 SecurityProtocolSpecificData,\r
- IN UINTN PayloadBufferSize,\r
- OUT VOID *PayloadBuffer,\r
- OUT UINTN *PayloadTransferSize\r
+ IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN UINT64 Timeout,\r
+ IN UINT8 SecurityProtocolId,\r
+ IN UINT16 SecurityProtocolSpecificData,\r
+ IN UINTN PayloadBufferSize,\r
+ OUT VOID *PayloadBuffer,\r
+ OUT UINTN *PayloadTransferSize\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
- if ((PayloadTransferSize == NULL) && PayloadBufferSize != 0) {\r
+ if ((PayloadTransferSize == NULL) && (PayloadBufferSize != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
EmmcSecurityProtocolOut (\r
- IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN UINT64 Timeout,\r
- IN UINT8 SecurityProtocolId,\r
- IN UINT16 SecurityProtocolSpecificData,\r
- IN UINTN PayloadBufferSize,\r
- IN VOID *PayloadBuffer\r
+ IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN UINT64 Timeout,\r
+ IN UINT8 SecurityProtocolId,\r
+ IN UINT16 SecurityProtocolSpecificData,\r
+ IN UINTN PayloadBufferSize,\r
+ IN VOID *PayloadBuffer\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Status = EmmcSecurityProtocolInOut (\r
This,\r
**/\r
EFI_STATUS\r
EmmcEraseBlockStart (\r
- IN EMMC_PARTITION *Partition,\r
- IN EFI_LBA StartLba,\r
- IN EFI_BLOCK_IO2_TOKEN *Token,\r
- IN BOOLEAN IsEnd\r
+ IN EMMC_PARTITION *Partition,\r
+ IN EFI_LBA StartLba,\r
+ IN EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN BOOLEAN IsEnd\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EMMC_DEVICE *Device;\r
- EMMC_REQUEST *EraseBlockStart;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EMMC_DEVICE *Device;\r
+ EMMC_REQUEST *EraseBlockStart;\r
+ EFI_TPL OldTpl;\r
\r
EraseBlockStart = NULL;\r
\r
}\r
\r
EraseBlockStart->Signature = EMMC_REQUEST_SIGNATURE;\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Partition->Queue, &EraseBlockStart->Link);\r
gBS->RestoreTPL (OldTpl);\r
EraseBlockStart->Packet.SdMmcCmdBlk = &EraseBlockStart->SdMmcCmdBlk;\r
if (EraseBlockStart->Event != NULL) {\r
gBS->CloseEvent (EraseBlockStart->Event);\r
}\r
+\r
FreePool (EraseBlockStart);\r
}\r
} else {\r
**/\r
EFI_STATUS\r
EmmcEraseBlockEnd (\r
- IN EMMC_PARTITION *Partition,\r
- IN EFI_LBA EndLba,\r
- IN EFI_BLOCK_IO2_TOKEN *Token,\r
- IN BOOLEAN IsEnd\r
+ IN EMMC_PARTITION *Partition,\r
+ IN EFI_LBA EndLba,\r
+ IN EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN BOOLEAN IsEnd\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EMMC_DEVICE *Device;\r
- EMMC_REQUEST *EraseBlockEnd;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EMMC_DEVICE *Device;\r
+ EMMC_REQUEST *EraseBlockEnd;\r
+ EFI_TPL OldTpl;\r
\r
EraseBlockEnd = NULL;\r
\r
}\r
\r
EraseBlockEnd->Signature = EMMC_REQUEST_SIGNATURE;\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Partition->Queue, &EraseBlockEnd->Link);\r
gBS->RestoreTPL (OldTpl);\r
EraseBlockEnd->Packet.SdMmcCmdBlk = &EraseBlockEnd->SdMmcCmdBlk;\r
if (EraseBlockEnd->Event != NULL) {\r
gBS->CloseEvent (EraseBlockEnd->Event);\r
}\r
+\r
FreePool (EraseBlockEnd);\r
}\r
} else {\r
**/\r
EFI_STATUS\r
EmmcEraseBlock (\r
- IN EMMC_PARTITION *Partition,\r
- IN EFI_BLOCK_IO2_TOKEN *Token,\r
- IN BOOLEAN IsEnd\r
+ IN EMMC_PARTITION *Partition,\r
+ IN EFI_BLOCK_IO2_TOKEN *Token,\r
+ IN BOOLEAN IsEnd\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
- EMMC_DEVICE *Device;\r
- EMMC_REQUEST *EraseBlock;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;\r
+ EMMC_DEVICE *Device;\r
+ EMMC_REQUEST *EraseBlock;\r
+ EFI_TPL OldTpl;\r
\r
EraseBlock = NULL;\r
\r
}\r
\r
EraseBlock->Signature = EMMC_REQUEST_SIGNATURE;\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Partition->Queue, &EraseBlock->Link);\r
gBS->RestoreTPL (OldTpl);\r
EraseBlock->Packet.SdMmcCmdBlk = &EraseBlock->SdMmcCmdBlk;\r
if (EraseBlock->Event != NULL) {\r
gBS->CloseEvent (EraseBlock->Event);\r
}\r
+\r
FreePool (EraseBlock);\r
}\r
} else {\r
**/\r
EFI_STATUS\r
EmmcWriteZeros (\r
- IN EMMC_PARTITION *Partition,\r
- IN EFI_LBA StartLba,\r
- IN UINTN Size\r
+ IN EMMC_PARTITION *Partition,\r
+ IN EFI_LBA StartLba,\r
+ IN UINTN Size\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT8 *Buffer;\r
- UINT32 MediaId;\r
+ EFI_STATUS Status;\r
+ UINT8 *Buffer;\r
+ UINT32 MediaId;\r
\r
Buffer = AllocateZeroPool (Size);\r
if (Buffer == NULL) {\r
EFI_STATUS\r
EFIAPI\r
EmmcEraseBlocks (\r
- IN EFI_ERASE_BLOCK_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN EFI_LBA Lba,\r
- IN OUT EFI_ERASE_BLOCK_TOKEN *Token,\r
- IN UINTN Size\r
+ IN EFI_ERASE_BLOCK_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN EFI_LBA Lba,\r
+ IN OUT EFI_ERASE_BLOCK_TOKEN *Token,\r
+ IN UINTN Size\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_BLOCK_IO_MEDIA *Media;\r
- UINTN BlockSize;\r
- UINTN BlockNum;\r
- EFI_LBA FirstLba;\r
- EFI_LBA LastLba;\r
- EFI_LBA StartGroupLba;\r
- EFI_LBA EndGroupLba;\r
- UINT32 EraseGroupSize;\r
- UINT32 Remainder;\r
- UINTN WriteZeroSize;\r
- UINT8 PartitionConfig;\r
- EMMC_PARTITION *Partition;\r
- EMMC_DEVICE *Device;\r
+ EFI_STATUS Status;\r
+ EFI_BLOCK_IO_MEDIA *Media;\r
+ UINTN BlockSize;\r
+ UINTN BlockNum;\r
+ EFI_LBA FirstLba;\r
+ EFI_LBA LastLba;\r
+ EFI_LBA StartGroupLba;\r
+ EFI_LBA EndGroupLba;\r
+ UINT32 EraseGroupSize;\r
+ UINT32 Remainder;\r
+ UINTN WriteZeroSize;\r
+ UINT8 PartitionConfig;\r
+ EMMC_PARTITION *Partition;\r
+ EMMC_DEVICE *Device;\r
\r
Status = EFI_SUCCESS;\r
Partition = EMMC_PARTITION_DATA_FROM_ERASEBLK (This);\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- BlockNum = Size / BlockSize;\r
+ BlockNum = Size / BlockSize;\r
if ((Lba + BlockNum - 1) > Media->LastBlock) {\r
return EFI_INVALID_PARAMETER;\r
}\r
//\r
PartitionConfig = Device->ExtCsd.PartitionConfig;\r
if ((PartitionConfig & 0x7) != Partition->PartitionType) {\r
- PartitionConfig &= (UINT8)~0x7;\r
+ PartitionConfig &= (UINT8) ~0x7;\r
PartitionConfig |= Partition->PartitionType;\r
- Status = EmmcSetExtCsd (Partition, OFFSET_OF (EMMC_EXT_CSD, PartitionConfig), PartitionConfig, (EFI_BLOCK_IO2_TOKEN*)Token, FALSE);\r
+ Status = EmmcSetExtCsd (Partition, OFFSET_OF (EMMC_EXT_CSD, PartitionConfig), PartitionConfig, (EFI_BLOCK_IO2_TOKEN *)Token, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
Device->ExtCsd.PartitionConfig = PartitionConfig;\r
}\r
\r
\r
//\r
// If the size to erase is smaller than the erase group size, the whole\r
- // erase operation is performed by writting zeros.\r
+ // erase operation is performed by writing zeros.\r
//\r
if (BlockNum < EraseGroupSize) {\r
Status = EmmcWriteZeros (Partition, FirstLba, Size);\r
Token->TransactionStatus = EFI_SUCCESS;\r
gBS->SignalEvent (Token->Event);\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
//\r
if (StartGroupLba > FirstLba) {\r
WriteZeroSize = (UINTN)(StartGroupLba - FirstLba) * BlockSize;\r
- Status = EmmcWriteZeros (Partition, FirstLba, WriteZeroSize);\r
+ Status = EmmcWriteZeros (Partition, FirstLba, WriteZeroSize);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
if (EndGroupLba <= LastLba) {\r
WriteZeroSize = (UINTN)(LastLba + 1 - EndGroupLba) * BlockSize;\r
- Status = EmmcWriteZeros (Partition, EndGroupLba, WriteZeroSize);\r
+ Status = EmmcWriteZeros (Partition, EndGroupLba, WriteZeroSize);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
Token->TransactionStatus = EFI_SUCCESS;\r
gBS->SignalEvent (Token->Event);\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
LastLba = EndGroupLba - 1;\r
}\r
\r
- Status = EmmcEraseBlockStart (Partition, FirstLba, (EFI_BLOCK_IO2_TOKEN*)Token, FALSE);\r
+ Status = EmmcEraseBlockStart (Partition, FirstLba, (EFI_BLOCK_IO2_TOKEN *)Token, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Status = EmmcEraseBlockEnd (Partition, LastLba, (EFI_BLOCK_IO2_TOKEN*)Token, FALSE);\r
+ Status = EmmcEraseBlockEnd (Partition, LastLba, (EFI_BLOCK_IO2_TOKEN *)Token, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Status = EmmcEraseBlock (Partition, (EFI_BLOCK_IO2_TOKEN*)Token, TRUE);\r
+ Status = EmmcEraseBlock (Partition, (EFI_BLOCK_IO2_TOKEN *)Token, TRUE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
return Status;\r
}\r
-\r