/** The function returns whether or not the device is Opal Locked. TRUE means that the device is partially or fully locked. This will perform a Level 0 Discovery and parse the locking feature descriptor @param[in] OpalDev Opal object to determine if locked @param[out] BlockSidSupported Whether device support BlockSid feature. **/ BOOLEAN IsOpalDeviceLocked( OPAL_SMM_DEVICE *OpalDev, BOOLEAN *BlockSidSupported ) { OPAL_SESSION Session; OPAL_DISK_SUPPORT_ATTRIBUTE SupportedAttributes; TCG_LOCKING_FEATURE_DESCRIPTOR LockingFeature; UINT16 OpalBaseComId; TCG_RESULT Ret; Session.Sscp = &OpalDev->Sscp; Session.MediaId = 0; Ret = OpalGetSupportedAttributesInfo (&Session, &SupportedAttributes, &OpalBaseComId); if (Ret != TcgResultSuccess) { return FALSE; } OpalDev->OpalBaseComId = OpalBaseComId; Session.OpalBaseComId = OpalBaseComId; *BlockSidSupported = SupportedAttributes.BlockSid == 1 ? TRUE : FALSE; Ret = OpalGetLockingInfo(&Session, &LockingFeature); if (Ret != TcgResultSuccess) { return FALSE; } return OpalDeviceLocked (&SupportedAttributes, &LockingFeature); }
/** Get revert timeout value. @param[in] Session The session info for one opal device. **/ UINT32 GetRevertTimeOut ( IN OPAL_SESSION *Session ) { TCG_RESULT TcgResult; OPAL_DISK_SUPPORT_ATTRIBUTE SupportedAttributes; UINT16 BaseComId; UINT32 MsidLength; UINT8 Msid[OPAL_MSID_LENGHT]; UINT32 RemovalMechanishLists[ResearvedMechanism]; UINT8 ActiveDataRemovalMechanism; TcgResult = OpalGetSupportedAttributesInfo (Session, &SupportedAttributes, &BaseComId); if (TcgResult != TcgResultSuccess || SupportedAttributes.DataRemoval == 0) { return 0; } TcgResult = OpalUtilGetMsid (Session, Msid, OPAL_MSID_LENGHT, &MsidLength); if (TcgResult != TcgResultSuccess) { return 0; } TcgResult = OpalUtilGetDataRemovalMechanismLists (Session, RemovalMechanishLists); if (TcgResult != TcgResultSuccess) { return 0; } TcgResult = OpalUtilGetActiveDataRemovalMechanism (Session, Msid, MsidLength, &ActiveDataRemovalMechanism); if (TcgResult != TcgResultSuccess) { return 0; } return RemovalMechanishLists[ActiveDataRemovalMechanism]; }