mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 00:24:07 +02:00
SecurityPkg/OpalPassword: Change send BlockSID policy
https://bugzilla.tianocore.org/show_bug.cgi?id=1782 Change Send BlockSID command time from ReadyToBoot to EndOfDxe. Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
parent
e0972cfc7d
commit
539a6c9318
@ -424,6 +424,47 @@ BuildOpalDeviceInfo (
|
|||||||
FreePool (S3InitDevices);
|
FreePool (S3InitDevices);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
Send BlockSid command if needed.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
SendBlockSidCommand (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
OPAL_DRIVER_DEVICE *Itr;
|
||||||
|
TCG_RESULT Result;
|
||||||
|
OPAL_SESSION Session;
|
||||||
|
UINT32 PpStorageFlag;
|
||||||
|
|
||||||
|
PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();
|
||||||
|
if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {
|
||||||
|
//
|
||||||
|
// Send BlockSID command to each Opal disk
|
||||||
|
//
|
||||||
|
Itr = mOpalDriver.DeviceList;
|
||||||
|
while (Itr != NULL) {
|
||||||
|
if (Itr->OpalDisk.SupportedAttributes.BlockSid) {
|
||||||
|
ZeroMem(&Session, sizeof(Session));
|
||||||
|
Session.Sscp = Itr->OpalDisk.Sscp;
|
||||||
|
Session.MediaId = Itr->OpalDisk.MediaId;
|
||||||
|
Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;
|
||||||
|
|
||||||
|
DEBUG ((DEBUG_INFO, "OpalPassword: EndOfDxe point, send BlockSid command to device!\n"));
|
||||||
|
Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE
|
||||||
|
if (Result != TcgResultSuccess) {
|
||||||
|
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Itr = Itr->Next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Notification function of EFI_END_OF_DXE_EVENT_GROUP_GUID event group.
|
Notification function of EFI_END_OF_DXE_EVENT_GROUP_GUID event group.
|
||||||
|
|
||||||
@ -475,6 +516,11 @@ OpalEndOfDxeEventNotify (
|
|||||||
TmpDev = TmpDev->Next;
|
TmpDev = TmpDev->Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Send BlockSid command if needed.
|
||||||
|
//
|
||||||
|
SendBlockSidCommand ();
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "%a() - exit\n", __FUNCTION__));
|
DEBUG ((DEBUG_INFO, "%a() - exit\n", __FUNCTION__));
|
||||||
|
|
||||||
gBS->CloseEvent (Event);
|
gBS->CloseEvent (Event);
|
||||||
@ -2262,53 +2308,6 @@ OpalDriverGetDeviceList(
|
|||||||
return mOpalDriver.DeviceList;
|
return mOpalDriver.DeviceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
ReadyToBoot callback to send BlockSid command.
|
|
||||||
|
|
||||||
@param Event Pointer to this event
|
|
||||||
@param Context Event handler private Data
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
EFIAPI
|
|
||||||
ReadyToBootCallback (
|
|
||||||
IN EFI_EVENT Event,
|
|
||||||
IN VOID *Context
|
|
||||||
)
|
|
||||||
{
|
|
||||||
OPAL_DRIVER_DEVICE *Itr;
|
|
||||||
TCG_RESULT Result;
|
|
||||||
OPAL_SESSION Session;
|
|
||||||
UINT32 PpStorageFlag;
|
|
||||||
|
|
||||||
gBS->CloseEvent (Event);
|
|
||||||
|
|
||||||
PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();
|
|
||||||
if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {
|
|
||||||
//
|
|
||||||
// Send BlockSID command to each Opal disk
|
|
||||||
//
|
|
||||||
Itr = mOpalDriver.DeviceList;
|
|
||||||
while (Itr != NULL) {
|
|
||||||
if (Itr->OpalDisk.SupportedAttributes.BlockSid) {
|
|
||||||
ZeroMem(&Session, sizeof(Session));
|
|
||||||
Session.Sscp = Itr->OpalDisk.Sscp;
|
|
||||||
Session.MediaId = Itr->OpalDisk.MediaId;
|
|
||||||
Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;
|
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "OpalPassword: ReadyToBoot point, send BlockSid command to device!\n"));
|
|
||||||
Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE
|
|
||||||
if (Result != TcgResultSuccess) {
|
|
||||||
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Itr = Itr->Next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Stop this Controller.
|
Stop this Controller.
|
||||||
|
|
||||||
@ -2571,7 +2570,6 @@ EfiDriverEntryPoint(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_EVENT ReadyToBootEvent;
|
|
||||||
EFI_EVENT EndOfDxeEvent;
|
EFI_EVENT EndOfDxeEvent;
|
||||||
|
|
||||||
Status = EfiLibInstallDriverBindingComponentName2 (
|
Status = EfiLibInstallDriverBindingComponentName2 (
|
||||||
@ -2604,16 +2602,6 @@ EfiDriverEntryPoint(
|
|||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
|
||||||
// register a ReadyToBoot event callback for sending BlockSid command
|
|
||||||
//
|
|
||||||
Status = EfiCreateEventReadyToBootEx (
|
|
||||||
TPL_CALLBACK,
|
|
||||||
ReadyToBootCallback,
|
|
||||||
(VOID *) &ImageHandle,
|
|
||||||
&ReadyToBootEvent
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Install Hii packages.
|
// Install Hii packages.
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user