FreePool (S3InitDevices);\r
}\r
\r
+/**\r
+\r
+ Send BlockSid command if needed.\r
+\r
+**/\r
+VOID\r
+SendBlockSidCommand (\r
+ VOID\r
+ )\r
+{\r
+ OPAL_DRIVER_DEVICE *Itr;\r
+ TCG_RESULT Result;\r
+ OPAL_SESSION Session;\r
+ UINT32 PpStorageFlag;\r
+\r
+ PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();\r
+ if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {\r
+ //\r
+ // Send BlockSID command to each Opal disk\r
+ //\r
+ Itr = mOpalDriver.DeviceList;\r
+ while (Itr != NULL) {\r
+ if (Itr->OpalDisk.SupportedAttributes.BlockSid) {\r
+ ZeroMem(&Session, sizeof(Session));\r
+ Session.Sscp = Itr->OpalDisk.Sscp;\r
+ Session.MediaId = Itr->OpalDisk.MediaId;\r
+ Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;\r
+\r
+ DEBUG ((DEBUG_INFO, "OpalPassword: EndOfDxe point, send BlockSid command to device!\n"));\r
+ Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE\r
+ if (Result != TcgResultSuccess) {\r
+ DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));\r
+ break;\r
+ }\r
+ }\r
+\r
+ Itr = Itr->Next;\r
+ }\r
+ }\r
+}\r
+\r
/**\r
Notification function of EFI_END_OF_DXE_EVENT_GROUP_GUID event group.\r
\r
TmpDev = TmpDev->Next;\r
}\r
\r
+ //\r
+ // Send BlockSid command if needed.\r
+ //\r
+ SendBlockSidCommand ();\r
+\r
DEBUG ((DEBUG_INFO, "%a() - exit\n", __FUNCTION__));\r
\r
gBS->CloseEvent (Event);\r
return mOpalDriver.DeviceList;\r
}\r
\r
-/**\r
- ReadyToBoot callback to send BlockSid command.\r
-\r
- @param Event Pointer to this event\r
- @param Context Event handler private Data\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-ReadyToBootCallback (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- )\r
-{\r
- OPAL_DRIVER_DEVICE *Itr;\r
- TCG_RESULT Result;\r
- OPAL_SESSION Session;\r
- UINT32 PpStorageFlag;\r
-\r
- gBS->CloseEvent (Event);\r
-\r
- PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();\r
- if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {\r
- //\r
- // Send BlockSID command to each Opal disk\r
- //\r
- Itr = mOpalDriver.DeviceList;\r
- while (Itr != NULL) {\r
- if (Itr->OpalDisk.SupportedAttributes.BlockSid) {\r
- ZeroMem(&Session, sizeof(Session));\r
- Session.Sscp = Itr->OpalDisk.Sscp;\r
- Session.MediaId = Itr->OpalDisk.MediaId;\r
- Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;\r
-\r
- DEBUG ((DEBUG_INFO, "OpalPassword: ReadyToBoot point, send BlockSid command to device!\n"));\r
- Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE\r
- if (Result != TcgResultSuccess) {\r
- DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));\r
- break;\r
- }\r
- }\r
-\r
- Itr = Itr->Next;\r
- }\r
- }\r
-}\r
-\r
/**\r
Stop this Controller.\r
\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_EVENT ReadyToBootEvent;\r
EFI_EVENT EndOfDxeEvent;\r
\r
Status = EfiLibInstallDriverBindingComponentName2 (\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
- //\r
- // register a ReadyToBoot event callback for sending BlockSid command\r
- //\r
- Status = EfiCreateEventReadyToBootEx (\r
- TPL_CALLBACK,\r
- ReadyToBootCallback,\r
- (VOID *) &ImageHandle,\r
- &ReadyToBootEvent\r
- );\r
-\r
//\r
// Install Hii packages.\r
//\r