blob: a07e9a82ce73d0b7eb63446788129598e817b632 [file] [log] [blame]
// 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_