TPM_RC Initialize_TPM_Codec()

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;
}