in src/tpm_codec.c [246:285]
TPM_RC Initialize_TPM_Codec(TSS_DEVICE* tpm)
{
TPM_RC result;
if (tpm == NULL)
{
LogError("Invalid parameter tpm is NULL");
result = TPM_RC_FAILURE;
}
else if ( (tpm->tpm_comm_handle = tpm_comm_create(tpm->comms_endpoint)) == NULL)
{
LogError("creating tpm_comm object");
result = TPM_RC_FAILURE;
}
else
{
TPM_COMM_TYPE comm_type = tpm_comm_get_type(tpm->tpm_comm_handle);
if (comm_type == TPM_COMM_TYPE_EMULATOR)
{
result = TPM2_Startup(tpm, TPM_SU_CLEAR);
if (result != TPM_RC_SUCCESS && result != TPM_RC_INITIALIZE)
{
LogError("calling TPM2_Startup %s", TSS_StatusValueName(result) );
tpm_comm_destroy(tpm->tpm_comm_handle);
}
else
{
result = TPM_RC_SUCCESS;
}
}
else
{
result = TPM_RC_SUCCESS;
}
// Clear out from previous runs
(void)TPM2_FlushContext(tpm, HR_POLICY_SESSION);
(void)TPM2_FlushContext(tpm, HR_POLICY_SESSION | 1);
(void)TPM2_FlushContext(tpm, HR_POLICY_SESSION | 2);
}
return result;
}