Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Unified Diff: src/platform/tpm_lite/src/tlcl/tlcl.c

Issue 1787004: TPM Lite: Add a "firmware" target for building TPM Lite (Closed)
Patch Set: Add a separate makefile for firmware compilation. Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/platform/tpm_lite/src/tlcl/tlcl.h ('k') | src/platform/tpm_lite/src/tlcl/tlcl_internal.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/platform/tpm_lite/src/tlcl/tlcl.c
diff --git a/src/platform/tpm_lite/src/tlcl/tlcl.c b/src/platform/tpm_lite/src/tlcl/tlcl.c
index f3fb33b0fc2647c02aad411504c9ecea922c0f38..5afe83e30cb74d810b81b3c66a7bc772af4aee96 100644
--- a/src/platform/tpm_lite/src/tlcl/tlcl.c
+++ b/src/platform/tpm_lite/src/tlcl/tlcl.c
@@ -12,14 +12,6 @@
* as well as the offsets of the fields that need to be set at run time.
*/
-/* This should change, probably by removing this and defining BIOS in the build.
- */
-#if defined(unix)
-#define BIOS 0
-#else
-#define BIOS 1
-#endif
-
#include "tlcl.h"
#include <errno.h>
@@ -30,15 +22,22 @@
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
-#include <tss/tcs.h>
#include <unistd.h>
+#ifdef FIRMWARE
+#include "saved-structures.h"
+#include "tss_constants.h"
+#else
+#include <tss/tcs.h>
#include "structures.h"
+#include "tpmextras.h"
+#endif /* FIRMWARE */
+
#include "tlcl_internal.h"
+
#if USE_TPM_EMULATOR
#include "tpmemu.h"
#endif
-#include "tpmextras.h"
/* The file descriptor for the TPM device.
*/
@@ -50,7 +49,7 @@ int tlcl_log_level = 1;
/* Print |n| bytes from array |a|, with newlines.
*/
-static void PrintBytes(uint8_t* a, int n) {
+POSSIBLY_UNUSED static void PrintBytes(uint8_t* a, int n) {
int i;
for (i = 0; i < n; i++) {
TlclLog("%02x ", a[i]);
@@ -65,7 +64,7 @@ static void PrintBytes(uint8_t* a, int n) {
/* Gets the tag field of a TPM command.
*/
-static INLINE int TpmTag(uint8_t* buffer) {
+POSSIBLY_UNUSED static INLINE int TpmTag(uint8_t* buffer) {
uint16_t tag;
FromTpmUint16(buffer, &tag);
return (int) tag;
@@ -79,7 +78,7 @@ static INLINE void SetTpmCommandSize(uint8_t* buffer, uint32_t size) {
/* Gets the size field of a TPM command.
*/
-static INLINE int TpmCommandSize(const uint8_t* buffer) {
+POSSIBLY_UNUSED static INLINE int TpmCommandSize(const uint8_t* buffer) {
uint32_t size;
FromTpmUint32(buffer + sizeof(uint16_t), &size);
return (int) size;
@@ -110,7 +109,7 @@ static void CheckResult(uint8_t* request, uint8_t* response, bool warn_only) {
}
}
-#if !BIOS
+#ifndef FIRMWARE
/* Executes a command on the TPM.
*/
void TpmExecute(const uint8_t *in, const uint32_t in_len,
@@ -140,26 +139,32 @@ void TpmExecute(const uint8_t *in, const uint32_t in_len,
}
}
}
-#endif /* !BIOS */
+#endif /* !FIRMWARE */
/* Sends a request and receive a response.
*/
static void SendReceive(uint8_t* request, uint8_t* response, int max_length) {
- uint32_t response_length = max_length;
- int tag, response_tag;
-#if BIOS
+#ifdef FIRMWARE
/*
- * Note: the code included for BIOS has not ever been compiled at Google. It
- * is here only to present what the interface to the EFI driver would look
- * like (see section 3.1.4, TCG EFI protocol specification, page 16). In
- * addition, error handling is not considered.
+ * FIXME: This #if block should contain the equivalent API call for the
+ * firmware TPM driver which takes a raw sequence of bytes as input
+ * command and a pointer to the output buffer for putting in the results.
+ *
+ * For EFI firmwares, this can make use of the EFI TPM driver as follows
+ * (based on page 16, of TCG EFI Protocol Specs Version 1.20 availaible from
+ * the TCG website):
+ *
+ * EFI_STATUS status;
+ * status = TcgProtocol->EFI_TCG_PASS_THROUGH_TO_TPM(TpmCommandSize(request),
+ * request,
+ * max_length,
+ * response);
+ * // Error checking depending on the value of the status above
*/
- EFI_STATUS status;
- status = tgc_pass_through(tcg_protocol,
- TpmCommandSize(request), request,
- max_length, response);
-#else /* BIOS */
+#else /* FIRMWARE */
+ uint32_t response_length = max_length;
+ int tag, response_tag;
#if USE_TPM_EMULATOR
tpmemu_execute(request, TpmCommandSize(request), response, &response_length);
#else
@@ -181,10 +186,8 @@ static void SendReceive(uint8_t* request, uint8_t* response, int max_length) {
TlclLog("execution time: %dms\n",
(int) ((after.tv_sec - before.tv_sec) * 1000 +
(after.tv_usec - before.tv_usec) / 1000));
-#endif
-#endif /* BIOS */
+#endif /* !USE_TPM_EMULATOR */
}
-
/* sanity checks */
tag = TpmTag(request);
response_tag = TpmTag(response);
@@ -196,6 +199,8 @@ static void SendReceive(uint8_t* request, uint8_t* response, int max_length) {
(tag == TPM_TAG_RQU_AUTH2_COMMAND &&
response_tag == TPM_TAG_RSP_AUTH2_COMMAND));
assert(response_length == TpmCommandSize(response));
+#endif /* FIRMWARE */
+
}
/* Sends a command and checks the result for errors. Note that this error
@@ -229,12 +234,12 @@ void TlclLibInit(void) {
#if USE_TPM_EMULATOR
tpmemu_init();
#else
-#if !BIOS
+#if !FIRMWARE
tpm_fd = open("/dev/tpm0", O_RDWR);
if (tpm_fd < 0) {
error("cannot open TPM device: %s\n", strerror(errno));
}
-#endif /* !BIOS */
+#endif /* !FIRMWARE */
#endif /* USE_TPM_EMULATOR */
}
« no previous file with comments | « src/platform/tpm_lite/src/tlcl/tlcl.h ('k') | src/platform/tpm_lite/src/tlcl/tlcl_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698