DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));\r
break;\r
}\r
+\r
+ //\r
+ // Record BlockSID command has been sent.\r
+ //\r
+ Itr->OpalDisk.SentBlockSID = TRUE;\r
}\r
\r
Itr = Itr->Next;\r
ProcessOpalRequestEnableFeature (Dev, L"Enable Feature:");\r
}\r
\r
+ //\r
+ // Update Device ownership.\r
+ // Later BlockSID command may block the update.\r
+ //\r
+ OpalDiskUpdateOwnerShip (&Dev->OpalDisk);\r
+\r
break;\r
}\r
\r
return OpalDiskUpdateStatus (&Dev->OpalDisk);\r
}\r
\r
+/**\r
+ Update the device ownship\r
+\r
+ @param OpalDisk The Opal device.\r
+\r
+ @retval EFI_SUCESS Get ownership success.\r
+ @retval EFI_ACCESS_DENIED Has send BlockSID command, can't change ownership.\r
+ @retval EFI_INVALID_PARAMETER Not get Msid info before get ownership info.\r
+\r
+**/\r
+EFI_STATUS\r
+OpalDiskUpdateOwnerShip (\r
+ OPAL_DISK *OpalDisk\r
+ )\r
+{\r\r
+ OPAL_SESSION Session;\r
+\r
+ if (OpalDisk->MsidLength == 0) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if (OpalDisk->SentBlockSID) {\r
+ return EFI_ACCESS_DENIED;\r
+ }\r
+\r
+ ZeroMem(&Session, sizeof(Session));\r
+ Session.Sscp = OpalDisk->Sscp;\r
+ Session.MediaId = OpalDisk->MediaId;\r
+ Session.OpalBaseComId = OpalDisk->OpalBaseComId;\r
+\r
+ OpalDisk->Owner = OpalUtilDetermineOwnership(&Session, OpalDisk->Msid, OpalDisk->MsidLength);\r\r
+ return EFI_SUCCESS;\r
+}\r
+\r
/**\r
Update the device info.\r
\r
@retval EFI_SUCESS Initialize the device success.\r
@retval EFI_DEVICE_ERROR Get info from device failed.\r
@retval EFI_INVALID_PARAMETER Not get Msid info before get ownership info.\r
+ @retval EFI_ACCESS_DENIED Has send BlockSID command, can't change ownership.\r
\r
**/\r
EFI_STATUS\r
return EFI_DEVICE_ERROR;\r
}\r
\r
- if (OpalDisk->MsidLength == 0) {\r
- return EFI_INVALID_PARAMETER;\r
- } else {\r
- //\r
- // Base on the Msid info to get the ownership, so Msid info must get first.\r
- //\r
- OpalDisk->Owner = OpalUtilDetermineOwnership(&Session, OpalDisk->Msid, OpalDisk->MsidLength);\r
- }\r
-\r
- return EFI_SUCCESS;\r
+ return OpalDiskUpdateOwnerShip (OpalDisk);\r
}\r
\r
IN OPAL_DRIVER_DEVICE *Dev\r
);\r
\r
+/**\r
+ Update the device ownership\r
+\r
+ @param OpalDisk The Opal device.\r
+\r
+ @retval EFI_SUCESS Get ownership success.\r
+ @retval EFI_ACCESS_DENIED Has send BlockSID command, can't change ownership.\r
+ @retval EFI_INVALID_PARAMETER Not get Msid info before get ownership info.\r
+\r
+**/\r
+EFI_STATUS\r
+OpalDiskUpdateOwnerShip (\r
+ OPAL_DISK *OpalDisk\r
+ );\r
+\r
#endif // _HII_H_\r