diff options
Diffstat (limited to 'firmware/lib/tpm2_lite/tlcl.c')
-rw-r--r-- | firmware/lib/tpm2_lite/tlcl.c | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/firmware/lib/tpm2_lite/tlcl.c b/firmware/lib/tpm2_lite/tlcl.c index 9d7e1dfb..a03125d3 100644 --- a/firmware/lib/tpm2_lite/tlcl.c +++ b/firmware/lib/tpm2_lite/tlcl.c @@ -10,6 +10,7 @@ #include "rollback_index.h" #include "tpm2_marshaling.h" #include "utility.h" +#include "tlcl.h" static struct tpm2_response *tpm_process_command(TPM_CC command, void *command_body) @@ -42,19 +43,40 @@ static struct tpm2_response *tpm_process_command(TPM_CC command, return response; } -uint32_t TlclLibInit(void) +static uint32_t tlcl_read_ph_disabled(void) { - return VbExTpmInit(); + uint32_t rv; + TPM_STCLEAR_FLAGS flags; + + rv = TlclGetSTClearFlags(&flags); + if (rv != TPM_SUCCESS) + return rv; + + tpm_set_ph_disabled(!flags.phEnable); + + return TPM_SUCCESS; } -uint32_t TlclLibClose(void) +uint32_t TlclLibInit(void) { - return VbExTpmClose(); + uint32_t rv; + + rv = VbExTpmInit(); + if (rv != TPM_SUCCESS) + return rv; + + rv = tlcl_read_ph_disabled(); + if (rv != TPM_SUCCESS) { + TlclLibClose(); + return rv; + } + + return TPM_SUCCESS; } -void TlclLibAccessAsUser(void) +uint32_t TlclLibClose(void) { - tpm_set_ph_disabled(1); + return VbExTpmClose(); } uint32_t TlclSendReceive(const uint8_t *request, uint8_t *response, @@ -100,7 +122,7 @@ uint32_t TlclContinueSelfTest(void) return TPM_SUCCESS; } -int32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size) +uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size) { VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__)); return TPM_SUCCESS; @@ -250,6 +272,7 @@ static uint32_t tlcl_disable_platform_hierarchy(void) if (!response || response->hdr.tpm_code) return TPM_E_INTERNAL_INCONSISTENCY; + tpm_set_ph_disabled(1); return TPM_SUCCESS; } @@ -334,7 +357,7 @@ uint32_t TlclWrite(uint32_t index, const void *data, uint32_t length) return TPM_SUCCESS; } -int32_t TlclPCRRead(uint32_t index, void *data, uint32_t length) +uint32_t TlclPCRRead(uint32_t index, void *data, uint32_t length) { VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__)); return TPM_SUCCESS; |