It produces BlockIo, BlockIo2 and StorageSecurity protocols to allow upper layer\r
access the EMMC device.\r
\r
- Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2015 - 2018, 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
1,\r
EmmcEraseBlocks\r
},\r
+ { // DiskInfo\r
+ EFI_DISK_INFO_SD_MMC_INTERFACE_GUID,\r
+ EmmcDiskInfoInquiry,\r
+ EmmcDiskInfoIdentify,\r
+ EmmcDiskInfoSenseData,\r
+ EmmcDiskInfoWhichIde\r
+ },\r
{\r
NULL,\r
NULL\r
String[sizeof (Cid->OemId) + sizeof (Cid->ProductName)] = ' ';\r
CopyMem (String + sizeof (Cid->OemId) + sizeof (Cid->ProductName) + 1, Cid->ProductSerialNumber, sizeof (Cid->ProductSerialNumber));\r
\r
- AsciiStrToUnicodeStr (String, Device->ModelName);\r
+ AsciiStrToUnicodeStrS (String, Device->ModelName, sizeof (Device->ModelName) / sizeof (Device->ModelName[0]));\r
\r
return EFI_SUCCESS;\r
}\r
//\r
// Install BlkIo/BlkIo2/Ssp for the specified partition\r
//\r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &Partition->Handle,\r
- &gEfiDevicePathProtocolGuid,\r
- Partition->DevicePath,\r
- &gEfiBlockIoProtocolGuid,\r
- &Partition->BlockIo,\r
- &gEfiBlockIo2ProtocolGuid,\r
- &Partition->BlockIo2,\r
- NULL\r
- );\r
- if (EFI_ERROR (Status)) {\r
- goto Error;\r
- }\r
-\r
if (Partition->PartitionType != EmmcPartitionRPMB) {\r
- Status = gBS->InstallProtocolInterface (\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
&Partition->Handle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ Partition->DevicePath,\r
+ &gEfiBlockIoProtocolGuid,\r
+ &Partition->BlockIo,\r
+ &gEfiBlockIo2ProtocolGuid,\r
+ &Partition->BlockIo2,\r
&gEfiEraseBlockProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &Partition->EraseBlock\r
+ &Partition->EraseBlock,\r
+ &gEfiDiskInfoProtocolGuid,\r
+ &Partition->DiskInfo,\r
+ NULL\r
);\r
if (EFI_ERROR (Status)) {\r
- gBS->UninstallMultipleProtocolInterfaces (\r
- &Partition->Handle,\r
- &gEfiDevicePathProtocolGuid,\r
- Partition->DevicePath,\r
- &gEfiBlockIoProtocolGuid,\r
- &Partition->BlockIo,\r
- &gEfiBlockIo2ProtocolGuid,\r
- &Partition->BlockIo2,\r
- NULL\r
- );\r
goto Error;\r
}\r
- }\r
\r
- if (((Partition->PartitionType == EmmcPartitionUserData) ||\r
- (Partition->PartitionType == EmmcPartitionBoot1) ||\r
- (Partition->PartitionType == EmmcPartitionBoot2)) &&\r
- ((Device->Csd.Ccc & BIT10) != 0)) {\r
- Status = gBS->InstallProtocolInterface (\r
- &Partition->Handle,\r
- &gEfiStorageSecurityCommandProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &Partition->StorageSecurity\r
- );\r
- if (EFI_ERROR (Status)) {\r
- gBS->UninstallMultipleProtocolInterfaces (\r
- &Partition->Handle,\r
- &gEfiDevicePathProtocolGuid,\r
- Partition->DevicePath,\r
- &gEfiBlockIoProtocolGuid,\r
- &Partition->BlockIo,\r
- &gEfiBlockIo2ProtocolGuid,\r
- &Partition->BlockIo2,\r
- &gEfiEraseBlockProtocolGuid,\r
- &Partition->EraseBlock,\r
- NULL\r
- );\r
- goto Error;\r
+ if (((Partition->PartitionType == EmmcPartitionUserData) ||\r
+ (Partition->PartitionType == EmmcPartitionBoot1) ||\r
+ (Partition->PartitionType == EmmcPartitionBoot2)) &&\r
+ ((Device->Csd.Ccc & BIT10) != 0)) {\r
+ Status = gBS->InstallProtocolInterface (\r
+ &Partition->Handle,\r
+ &gEfiStorageSecurityCommandProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ &Partition->StorageSecurity\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ &Partition->Handle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ Partition->DevicePath,\r
+ &gEfiBlockIoProtocolGuid,\r
+ &Partition->BlockIo,\r
+ &gEfiBlockIo2ProtocolGuid,\r
+ &Partition->BlockIo2,\r
+ &gEfiEraseBlockProtocolGuid,\r
+ &Partition->EraseBlock,\r
+ &gEfiDiskInfoProtocolGuid,\r
+ &Partition->DiskInfo,\r
+ NULL\r
+ );\r
+ goto Error;\r
+ }\r
}\r
+\r
+ gBS->OpenProtocol (\r
+ Device->Private->Controller,\r
+ &gEfiSdMmcPassThruProtocolGuid,\r
+ (VOID **) &(Device->Private->PassThru),\r
+ Device->Private->DriverBindingHandle,\r
+ Partition->Handle,\r
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+ );\r
}\r
\r
- gBS->OpenProtocol (\r
- Device->Private->Controller,\r
- &gEfiSdMmcPassThruProtocolGuid,\r
- (VOID **) &(Device->Private->PassThru),\r
- Device->Private->DriverBindingHandle,\r
- Partition->Handle,\r
- EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
- );\r
} else {\r
Status = EFI_INVALID_PARAMETER;\r
}\r
EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
EFI_BLOCK_IO2_PROTOCOL *BlockIo2;\r
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *StorageSecurity;\r
- EFI_ERASE_BLOCK_PROTOCOL *EraseBlock;\r
LIST_ENTRY *Link;\r
LIST_ENTRY *NextLink;\r
EMMC_REQUEST *Request;\r
&Partition->BlockIo,\r
&gEfiBlockIo2ProtocolGuid,\r
&Partition->BlockIo2,\r
+ &gEfiEraseBlockProtocolGuid,\r
+ &Partition->EraseBlock,\r
+ &gEfiDiskInfoProtocolGuid,\r
+ &Partition->DiskInfo,\r
NULL\r
);\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
\r
- //\r
- // If Erase Block Protocol is installed, then uninstall this protocol.\r
- //\r
- Status = gBS->OpenProtocol (\r
- ChildHandleBuffer[Index],\r
- &gEfiEraseBlockProtocolGuid,\r
- (VOID **) &EraseBlock,\r
- This->DriverBindingHandle,\r
- Controller,\r
- EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
-\r
- if (!EFI_ERROR (Status)) {\r
- Status = gBS->UninstallProtocolInterface (\r
- ChildHandleBuffer[Index],\r
- &gEfiEraseBlockProtocolGuid,\r
- &Partition->EraseBlock\r
- );\r
- if (EFI_ERROR (Status)) {\r
- gBS->OpenProtocol (\r
- Controller,\r
- &gEfiSdMmcPassThruProtocolGuid,\r
- (VOID **) &Partition->Device->Private->PassThru,\r
- This->DriverBindingHandle,\r
- ChildHandleBuffer[Index],\r
- EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
- );\r
- AllChildrenStopped = FALSE;\r
- continue;\r
- }\r
- }\r
-\r
//\r
// If Storage Security Command Protocol is installed, then uninstall this protocol.\r
//\r