mirror of https://github.com/acidanthera/audk.git
SecurityPkg/OpalPassword: Remove dependency on EFI_BLOCK_IO_PROTOCOL
https://bugzilla.tianocore.org/show_bug.cgi?id=2327 RAID drivers abstract their physical drives that make up the array into a single unit, and do not supply individual EFI_BLOCK_IO_PROTOCOL instances for each physical drive in the array. This breaks support for the Security Storage Command Protocol, which currently requires an EFI_BLOCK_IO_PROTOCOL to be associated with the same device the protocol is installed on and provide all the same parameters. This patch remove dependency on EFI_BLOCK_IO_PROTOCOL and allows access to Opal drive members of a RAID array. Signed-off-by: Maggie Chu <maggie.chu@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com> Cc: Chao Zhang <chao.b.zhang@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
parent
78413dd4bc
commit
1a04951309
|
@ -2667,7 +2667,6 @@ OpalEfiDriverBindingSupported(
|
|||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL* SecurityCommand;
|
||||
EFI_BLOCK_IO_PROTOCOL* BlkIo;
|
||||
|
||||
if (mOpalEndOfDxe) {
|
||||
return EFI_UNSUPPORTED;
|
||||
|
@ -2703,33 +2702,6 @@ OpalEfiDriverBindingSupported(
|
|||
Controller
|
||||
);
|
||||
|
||||
//
|
||||
// Test EFI_BLOCK_IO_PROTOCOL on controller Handle, required by EFI_STORAGE_SECURITY_COMMAND_PROTOCOL
|
||||
// function APIs
|
||||
//
|
||||
Status = gBS->OpenProtocol(
|
||||
Controller,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
(VOID **)&BlkIo,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_INFO, "No EFI_BLOCK_IO_PROTOCOL on controller\n"));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Close protocol and reopen in Start call
|
||||
//
|
||||
gBS->CloseProtocol(
|
||||
Controller,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@ -2827,30 +2799,42 @@ OpalEfiDriverBindingStart(
|
|||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
//
|
||||
// Close storage security that was opened
|
||||
// Block_IO not supported on handle
|
||||
//
|
||||
gBS->CloseProtocol(
|
||||
Controller,
|
||||
&gEfiStorageSecurityCommandProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
if(Status == EFI_UNSUPPORTED) {
|
||||
BlkIo = NULL;
|
||||
} else {
|
||||
//
|
||||
// Close storage security that was opened
|
||||
//
|
||||
gBS->CloseProtocol(
|
||||
Controller,
|
||||
&gEfiStorageSecurityCommandProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
FreePool(Dev);
|
||||
return Status;
|
||||
FreePool(Dev);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Save mediaId
|
||||
//
|
||||
Dev->MediaId = BlkIo->Media->MediaId;
|
||||
if(BlkIo == NULL) {
|
||||
// If no Block IO present, use defined MediaId value.
|
||||
Dev->MediaId = 0x0;
|
||||
} else {
|
||||
Dev->MediaId = BlkIo->Media->MediaId;
|
||||
|
||||
gBS->CloseProtocol(
|
||||
Controller,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
gBS->CloseProtocol(
|
||||
Controller,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Acquire Ascii printable name of child, if not found, then ignore device
|
||||
|
|
Loading…
Reference in New Issue