diff options
Diffstat (limited to 'firmware/include/tpm2_tss_constants.h')
-rw-r--r-- | firmware/include/tpm2_tss_constants.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/firmware/include/tpm2_tss_constants.h b/firmware/include/tpm2_tss_constants.h new file mode 100644 index 00000000..cec91e61 --- /dev/null +++ b/firmware/include/tpm2_tss_constants.h @@ -0,0 +1,111 @@ +/* + * 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. + * + * Some TPM constants and type definitions for standalone compilation for use + * in the firmware + */ + +#ifndef __VBOOT_REFERENCE_FIRMWARE_INCLUDE_TPM2_TSS_CONSTANTS_H +#define __VBOOT_REFERENCE_FIRMWARE_INCLUDE_TPM2_TSS_CONSTANTS_H + +#define TPM_BUFFER_SIZE 256 + +/* Tpm2 command tags. */ +#define TPM_ST_NO_SESSIONS 0x8001 +#define TPM_ST_SESSIONS 0x8002 + +/* TPM2 command codes. */ +#define TPM2_NV_Write ((TPM_CC)0x00000137) +#define TPM2_NV_Read ((TPM_CC)0x0000014E) + +/* TCG Spec defined, verify for TPM2. */ +#define TPM_E_BADINDEX ((uint32_t) 0x00000002) +#define TPM_E_INVALID_POSTINIT ((uint32_t) 0x00000026) +#define TPM_E_MAXNVWRITES ((uint32_t) 0x00000048) + +#define HR_SHIFT 24 +#define TPM_HT_NV_INDEX 0x01 +#define HR_NV_INDEX (TPM_HT_NV_INDEX << HR_SHIFT) +#define TPM_RH_PLATFORM 0x4000000C +#define TPM_RS_PW 0x40000009 + + +typedef uint32_t TPM_CC; +typedef uint32_t TPM_HANDLE; +typedef TPM_HANDLE TPMI_RH_NV_INDEX; + +typedef struct { + uint16_t size; + uint8_t *buffer; +} TPM2B; + +typedef union { + struct { + uint16_t size; + const uint8_t *buffer; + } t; + TPM2B b; +} TPM2B_MAX_NV_BUFFER; + +struct tpm2_nv_read_cmd { + TPMI_RH_NV_INDEX nvIndex; + uint16_t size; + uint16_t offset; +}; + +struct tpm2_nv_write_cmd { + TPMI_RH_NV_INDEX nvIndex; + TPM2B_MAX_NV_BUFFER data; + uint16_t offset; +}; + +/* Common command/response header. */ +struct tpm_header { + uint16_t tpm_tag; + uint32_t tpm_size; + TPM_CC tpm_code; +} __attribute__((packed)); + +struct nv_read_response { + uint32_t params_size; + TPM2B_MAX_NV_BUFFER buffer; +}; + +struct tpm2_session_attrs { + uint8_t continueSession : 1; + uint8_t auditExclusive : 1; + uint8_t auditReset : 1; + uint8_t reserved3_4 : 2; + uint8_t decrypt : 1; + uint8_t encrypt : 1; + uint8_t audit : 1; +}; + +struct tpm2_session_header { + uint32_t session_handle; + uint16_t nonce_size; + uint8_t *nonce; + union { + struct tpm2_session_attrs session_attr_bits; + uint8_t session_attrs; + } __attribute__((packed)); + uint16_t auth_size; + uint8_t *auth; +}; + +struct tpm2_response { + struct tpm_header hdr; + union { + struct nv_read_response nvr; + struct tpm2_session_header def_space; + }; +}; + + +/* Temp stubs to quiet down compilation errors. */ +typedef struct {} TPM_PERMANENT_FLAGS; +typedef struct {} TPM_STCLEAR_FLAGS; + +#endif /* ! __VBOOT_REFERENCE_FIRMWARE_INCLUDE_TPM2_TSS_CONSTANTS_H */ |