TRUE means that the device is partially or fully locked.\r
This will perform a Level 0 Discovery and parse the locking feature descriptor\r
\r
- @param[in] OpalDev Opal object to determine if locked\r
+ @param[in] OpalDev Opal object to determine if locked\r
+ @param[out] BlockSidSupported Whether device support BlockSid feature.\r
\r
**/\r
BOOLEAN\r
IsOpalDeviceLocked(\r
- OPAL_SMM_DEVICE *OpalDev\r
+ OPAL_SMM_DEVICE *OpalDev,\r
+ BOOLEAN *BlockSidSupported\r
)\r
{\r
OPAL_SESSION Session;\r
}\r
\r
OpalDev->OpalBaseComId = OpalBaseComId;\r
- Session.OpalBaseComId = OpalBaseComId;\r
+ Session.OpalBaseComId = OpalBaseComId;\r
+ *BlockSidSupported = SupportedAttributes.BlockSid == 1 ? TRUE : FALSE;\r
\r
Ret = OpalGetLockingInfo(&Session, &LockingFeature);\r
if (Ret != TcgResultSuccess) {\r
UINTN MemoryBase;\r
UINTN MemoryLength;\r
OPAL_SESSION Session;\r
+ BOOLEAN BlockSidSupport;\r
\r
ZeroMem (StorePcieConfDataList, sizeof (StorePcieConfDataList));\r
Status = EFI_DEVICE_ERROR;\r
}\r
\r
Status = EFI_DEVICE_ERROR;\r
- if (IsOpalDeviceLocked(OpalDev)) {\r
+ BlockSidSupport = FALSE;\r
+ if (IsOpalDeviceLocked (OpalDev, &BlockSidSupport)) {\r
ZeroMem(&Session, sizeof(Session));\r
Session.Sscp = &OpalDev->Sscp;\r
Session.MediaId = 0;\r
Session.OpalBaseComId = OpalDev->OpalBaseComId;\r
\r
- if (mSendBlockSID) {\r
+ if (mSendBlockSID && BlockSidSupport) {\r
Result = OpalBlockSid (&Session, TRUE);\r
if (Result != TcgResultSuccess) {\r
break;\r