From 5be84679e5157aaa6d785083b98c4c393630e491 Mon Sep 17 00:00:00 2001 From: Andrey Pronin Date: Mon, 25 Jul 2016 16:28:39 -0700 Subject: tlcl: support sending raw commands Implement TlclSendReceive and TlclPacketSize required for sending raw commands. BRANCH=none BUG=chrome-os-partner:55210 TEST=boot on kevin, verify that 'tpmc raw' works Change-Id: Iba41b95dd7790a6b7a3a7af6cf5f897f45dce1e5 Reviewed-on: https://chromium-review.googlesource.com/363033 Commit-Ready: Andrey Pronin Tested-by: Andrey Pronin Reviewed-by: Randall Spangler --- firmware/lib/tpm2_lite/marshaling.c | 17 +++++++++++++++++ firmware/lib/tpm2_lite/tlcl.c | 12 ++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) (limited to 'firmware/lib/tpm2_lite') diff --git a/firmware/lib/tpm2_lite/marshaling.c b/firmware/lib/tpm2_lite/marshaling.c index 037e696d..fd94a51e 100644 --- a/firmware/lib/tpm2_lite/marshaling.c +++ b/firmware/lib/tpm2_lite/marshaling.c @@ -516,6 +516,23 @@ struct tpm2_response *tpm_unmarshal_response(TPM_CC command, return &tpm2_resp; } +uint32_t tpm_get_packet_size(const uint8_t *packet) +{ + /* 0: tag (16 bit) + * 2: size (32 bit) + */ + return read_be32(packet + 2); +} + +uint32_t tpm_get_packet_response_code(const uint8_t *packet) +{ + /* 0: tag (16 bit) + * 2: size (32 bit) + * 6: resp code (32 bit) + */ + return read_be32(packet + 6); +} + void tpm_set_ph_disabled(int flag) { ph_disabled = flag; diff --git a/firmware/lib/tpm2_lite/tlcl.c b/firmware/lib/tpm2_lite/tlcl.c index efc528d1..d7d853bf 100644 --- a/firmware/lib/tpm2_lite/tlcl.c +++ b/firmware/lib/tpm2_lite/tlcl.c @@ -82,14 +82,18 @@ uint32_t TlclLibClose(void) uint32_t TlclSendReceive(const uint8_t *request, uint8_t *response, int max_length) { - VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__)); - return TPM_SUCCESS; + uint32_t rv, resp_size; + + resp_size = max_length; + rv = VbExTpmSendReceive(request, tpm_get_packet_size(request), + response, &resp_size); + + return rv ? rv : tpm_get_packet_response_code(response); } int TlclPacketSize(const uint8_t *packet) { - VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__)); - return 0; + return tpm_get_packet_size(packet); } uint32_t TlclStartup(void) -- cgit v1.2.1