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 7dc800bbff3dca82bfc74d5f8db98c638301c508..ca01b942e689c5e3b09805cf11722f108ea01439 100644 |
--- a/src/platform/tpm_lite/src/tlcl/tlcl.c |
+++ b/src/platform/tpm_lite/src/tlcl/tlcl.c |
@@ -16,6 +16,8 @@ |
#include <errno.h> |
#include <fcntl.h> |
+#include <stdarg.h> |
+#include <stdio.h> |
#include <string.h> |
#include <sys/time.h> |
#include <sys/types.h> |
@@ -34,18 +36,22 @@ |
*/ |
int tpm_fd = -1; |
+/* Log level. 0 is quietest. Be verbose by default. |
+ */ |
+int tlcl_log_level = 1; |
+ |
/* Print |n| bytes from array |a|, with newlines. |
*/ |
static void PrintBytes(uint8_t* a, int n) { |
int i; |
for (i = 0; i < n; i++) { |
- printf("%02x ", a[i]); |
+ TlclLog("%02x ", a[i]); |
if ((i + 1) % 16 == 0) { |
- printf("\n"); |
+ TlclLog("\n"); |
} |
} |
if (i % 16 != 0) { |
- printf("\n"); |
+ TlclLog("\n"); |
} |
} |
@@ -104,7 +110,7 @@ void TpmExecute(const uint8_t *in, const uint32_t in_len, |
if (in_len <= 0) { |
error("invalid command length %d\n", in_len); |
} else if (tpm_fd < 0) { |
- error("the TPM device was not opened. Forgot to call TlclLibinit?\n"); |
+ error("the TPM device was not opened. Forgot to call TlclLibInit?\n"); |
} else { |
int n = write(tpm_fd, in, in_len); |
if (n != in_len) { |
@@ -144,16 +150,16 @@ static void SendReceive(uint8_t* request, uint8_t* response, int max_length) { |
{ |
int x = TpmCommandSize(request); |
int y = response_length; |
- printf("request (%d bytes): ", x); |
+ TlclLog("request (%d bytes): ", x); |
PrintBytes(request, 10); |
PrintBytes(request + 10, x - 10); |
- printf("response (%d bytes): ", y); |
+ TlclLog("response (%d bytes): ", y); |
PrintBytes(response, 10); |
PrintBytes(response + 10, y - 10); |
#if !USE_TPM_EMULATOR |
- printf("execution time: %dms\n", |
- (int) ((after.tv_sec - before.tv_sec) * 1000 + |
- (after.tv_usec - before.tv_usec) / 1000)); |
+ TlclLog("execution time: %dms\n", |
+ (int) ((after.tv_sec - before.tv_sec) * 1000 + |
+ (after.tv_usec - before.tv_usec) / 1000)); |
#endif |
} |
@@ -184,7 +190,20 @@ static void Send(uint8_t* command) { |
/* Exported functions. |
*/ |
-void TlclLibinit(void) { |
+void TlclLog(char* format, ...) { |
+ va_list ap; |
+ if (tlcl_log_level > 0) { |
+ va_start(ap, format); |
+ vprintf(format, ap); |
+ va_end(ap); |
+ } |
+} |
+ |
+void TlclSetLogLevel(int level) { |
+ tlcl_log_level = level; |
+} |
+ |
+void TlclLibInit(void) { |
#if USE_TPM_EMULATOR |
tpmemu_init(); |
#else |
@@ -261,7 +280,11 @@ void TlclReadLock(uint32_t index) { |
} |
void TlclAssertPhysicalPresence(void) { |
- Send(tpm_physicalpresence_cmd.buffer); |
+ Send(tpm_ppassert_cmd.buffer); |
+} |
+ |
+void TlclLockPhysicalPresence(void) { |
+ Send(tpm_pplock_cmd.buffer); |
} |
void TlclSetNvLocked(void) { |
@@ -286,11 +309,11 @@ void TlclForceClear(void) { |
} |
} |
-void TlclPhysicalEnable(void) { |
+void TlclSetEnable(void) { |
Send(tpm_physicalenable_cmd.buffer); |
} |
-int TlclPhysicalSetDeactivated(uint8_t flag) { |
+int TlclSetDeactivated(uint8_t flag) { |
uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; |
uint32_t result; |
*((uint8_t*)tpm_physicalsetdeactivated_cmd.deactivated) = flag; |
@@ -320,3 +343,9 @@ int TlclGetFlags(uint8_t* disable, uint8_t* deactivated) { |
*deactivated = pflags->deactivated; |
return result; |
} |
+ |
+void TlclSetGlobalLock(void) { |
+ uint32_t x; |
+ uint32_t result = TlclWrite(TPM_NV_INDEX0, (uint8_t*) &x, 0); |
+ assert(result == TPM_SUCCESS); |
+} |