| // Copyright 2016 The Fuchsia 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 SRC_DEVICES_MISC_DRIVERS_TPM_TPM_COMMANDS_H_ |
| #define SRC_DEVICES_MISC_DRIVERS_TPM_TPM_COMMANDS_H_ |
| |
| #include <zircon/compiler.h> |
| #include <zircon/types.h> |
| |
| #define TPM_TAG_RSP_COMMAND 196 |
| |
| #define TPM_ST_NO_SESSIONS 0x8001 |
| #define TPM_CC_SHUTDOWN 0x00000145 |
| #define TPM_CC_GET_RANDOM 0x0000017B |
| |
| // All TPM fields are big-endian. |
| // The init functions that return uint32_t return the number of bytes needed |
| // for the response structure. |
| |
| #define TPM_FIXED_LEN_CMD_INIT(cmd, cmd_code) \ |
| { .tag = TPM_TAG_RQU_COMMAND, .total_len = sizeof(cmd), .cmd_code = cmd_code } |
| |
| struct tpm_cmd_header { |
| uint16_t tag; |
| uint32_t total_len; |
| uint32_t cmd_code; |
| } __PACKED; |
| |
| struct tpm_resp_header { |
| uint16_t tag; |
| uint32_t total_len; |
| uint32_t return_code; |
| } __PACKED; |
| |
| struct tpm_getrandom_cmd { |
| struct tpm_cmd_header hdr; |
| uint16_t bytes_requested; |
| } __PACKED; |
| struct tpm_getrandom_resp { |
| struct tpm_resp_header hdr; |
| uint16_t bytes_returned; |
| uint8_t bytes[]; |
| } __PACKED; |
| uint32_t tpm_init_getrandom(struct tpm_getrandom_cmd *cmd, uint16_t bytes_requested); |
| |
| // Shutdown types |
| #define TPM_SU_CLEAR 0 |
| #define TPM_SU_STATE 1 |
| |
| struct tpm_shutdown_cmd { |
| struct tpm_cmd_header hdr; |
| uint16_t shutdown_type; |
| } __PACKED; |
| struct tpm_shutdown_resp { |
| struct tpm_resp_header hdr; |
| } __PACKED; |
| uint32_t tpm_init_shutdown(struct tpm_shutdown_cmd *cmd, uint16_t type); |
| |
| #endif // SRC_DEVICES_MISC_DRIVERS_TPM_TPM_COMMANDS_H_ |