aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/spi/tpm/tpm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/spi/tpm/tpm.h')
-rw-r--r--src/drivers/spi/tpm/tpm.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/drivers/spi/tpm/tpm.h b/src/drivers/spi/tpm/tpm.h
new file mode 100644
index 0000000000..214d3bd2df
--- /dev/null
+++ b/src/drivers/spi/tpm/tpm.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2016 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __COREBOOT_SRC_DRIVERS_SPI_TPM_TPM_H
+#define __COREBOOT_SRC_DRIVERS_SPI_TPM_TPM_H
+
+#include <stddef.h>
+#include <spi-generic.h>
+
+/*
+ * A tpm device descriptor, values read from the appropriate device regisrers
+ * are cached here.
+ */
+struct tpm2_info {
+ uint16_t vendor_id;
+ uint16_t device_id;
+ uint16_t revision;
+};
+
+/*
+ * Initialize a TPM2 device: read its id, claim locality of zero, verify that
+ * this indeed is a TPM2 device. Use the passed in handle to access the right
+ * SPI port.
+ *
+ * Return 0 on success, non-zero on failure.
+ */
+int tpm2_init(struct spi_slave *spi_if);
+
+
+/*
+ * Each command processing consists of sending the command to the TPM, by
+ * writing it into the FIFO register, then polling the status register until
+ * the TPM is ready to respond, then reading the response from the FIFO
+ * regitster. The size of the response can be gleaned from the 6 byte header.
+ *
+ * This function places the response into the tpm2_response buffer and returns
+ * the size of the response.
+ */
+size_t tpm2_process_command(const void *tpm2_command, size_t command_size,
+ void *tpm2_response, size_t max_response);
+
+/* Get information about previously initialized TPM device. */
+void tpm2_get_info(struct tpm2_info *info);
+
+#endif /* ! __COREBOOT_SRC_DRIVERS_SPI_TPM_TPM_H */