MdeModulePkg/Sd: add Erase Block support on sd/emmc device

It's done by producing EFI_ERASE_BLOCK_PROTOCOL protocol instance.

Cc: Hao Wu <hao.a.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Hao Wu <hao.a.wu@intel.com>
This commit is contained in:
Feng Tian
2016-05-03 14:07:38 +08:00
parent 140cc8000f
commit 275d51369a
10 changed files with 978 additions and 6 deletions

View File

@@ -64,6 +64,11 @@ SD_DEVICE mSdDeviceTemplate = {
0, // IoAlign
0 // LastBlock
},
{ // EraseBlock
EFI_ERASE_BLOCK_PROTOCOL_REVISION,
1,
SdEraseBlocks
},
{ // Queue
NULL,
NULL
@@ -247,6 +252,12 @@ DiscoverUserArea (
Device->BlockMedia.LogicalPartition = FALSE;
Device->BlockMedia.LastBlock = DivU64x32 (Capacity, Device->BlockMedia.BlockSize) - 1;
if (Csd->EraseBlkEn) {
Device->EraseBlock.EraseLengthGranularity = 1;
} else {
Device->EraseBlock.EraseLengthGranularity = (Csd->SectorSize + 1) * (1 << (Csd->WriteBlLen - 9));
}
return Status;
}
@@ -369,6 +380,8 @@ DiscoverSdDevice (
&Device->BlockIo,
&gEfiBlockIo2ProtocolGuid,
&Device->BlockIo2,
&gEfiEraseBlockProtocolGuid,
&Device->EraseBlock,
NULL
);
@@ -825,6 +838,8 @@ SdDxeDriverBindingStop (
&Device->BlockIo,
&gEfiBlockIo2ProtocolGuid,
&Device->BlockIo2,
&gEfiEraseBlockProtocolGuid,
&Device->EraseBlock,
NULL
);
if (EFI_ERROR (Status)) {