1a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * Use of this source code is governed by a BSD-style license that can be
3887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * found in the LICENSE file.
4887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah *
5a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * Some TPM constants and type definitions for standalone compilation for use
6a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * in the firmware
7887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah */
889678602e66df24dea75b384ce079519cb8ec2a4Che-Liang Chiou#ifndef VBOOT_REFERENCE_TSS_CONSTANTS_H_
989678602e66df24dea75b384ce079519cb8ec2a4Che-Liang Chiou#define VBOOT_REFERENCE_TSS_CONSTANTS_H_
100c3ba249abb1dc60f5ebabccf84ff13206440b83Bill Richardson#include <stdint.h>
11887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah
12887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah#define TPM_MAX_COMMAND_SIZE 4096
13887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah#define TPM_LARGE_ENOUGH_COMMAND_SIZE 256  /* saves space in the firmware */
141fe1607679a17a37ab6be390e2f04155e5c37e8eRandall Spangler#define TPM_PUBEK_SIZE 256
15946370d012a809bba833ff9d37fe0ce86af09860Kees Cook#define TPM_PCR_DIGEST 20
16887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah
175896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_E_NON_FATAL 0x800
185896b9664d088699e246de964a7c374af663a34eLuigi Semenzato
19887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah#define TPM_SUCCESS ((uint32_t)0x00000000)
205896b9664d088699e246de964a7c374af663a34eLuigi Semenzato
21528f6a20dbcf6aeca9fd4825984719038040af9cRandall Spangler#define TPM_E_AREA_LOCKED           ((uint32_t)0x0000003c)
22528f6a20dbcf6aeca9fd4825984719038040af9cRandall Spangler#define TPM_E_BADINDEX              ((uint32_t)0x00000002)
23528f6a20dbcf6aeca9fd4825984719038040af9cRandall Spangler#define TPM_E_BAD_PRESENCE          ((uint32_t)0x0000002d)
245d9509cbdee7b9c8dd91ed47d967569dbb9af83dChe-Liang Chiou#define TPM_E_IOERROR               ((uint32_t)0x0000001f)
25528f6a20dbcf6aeca9fd4825984719038040af9cRandall Spangler#define TPM_E_INVALID_POSTINIT      ((uint32_t)0x00000026)
26528f6a20dbcf6aeca9fd4825984719038040af9cRandall Spangler#define TPM_E_MAXNVWRITES           ((uint32_t)0x00000048)
27528f6a20dbcf6aeca9fd4825984719038040af9cRandall Spangler#define TPM_E_OWNER_SET             ((uint32_t)0x00000014)
28416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato
295896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_E_NEEDS_SELFTEST ((uint32_t)(TPM_E_NON_FATAL + 1))
305896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_E_DOING_SELFTEST ((uint32_t)(TPM_E_NON_FATAL + 2))
315896b9664d088699e246de964a7c374af663a34eLuigi Semenzato
32416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato#define TPM_E_ALREADY_INITIALIZED    ((uint32_t)0x00005000)  /* vboot local */
334f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzato#define TPM_E_INTERNAL_INCONSISTENCY ((uint32_t)0x00005001)  /* vboot local */
342666f10dec63de910696bfb84de2ea5d474b75e6Luigi Semenzato#define TPM_E_MUST_REBOOT            ((uint32_t)0x00005002)  /* vboot local */
355e9c0b94b1a10ceffb5e01de78210efd5dcfe581Luigi Semenzato#define TPM_E_CORRUPTED_STATE        ((uint32_t)0x00005003)  /* vboot local */
36205190d4ae8080298d9d1b580dd95c885f2af42cRandall Spangler#define TPM_E_COMMUNICATION_ERROR    ((uint32_t)0x00005004)  /* vboot local */
37f0605cbdc36f58829a908a3333e438c565c8c7afKees Cook#define TPM_E_RESPONSE_TOO_LARGE     ((uint32_t)0x00005005)  /* vboot local */
38adc676422972e28c1b38268852f6cec24a57366fKees Cook#define TPM_E_NO_DEVICE              ((uint32_t)0x00005006)  /* vboot local */
3900cc72894f3ce5c3b0d337e424f19da089140237Kees Cook#define TPM_E_INPUT_TOO_SMALL        ((uint32_t)0x00005007)  /* vboot local */
4000cc72894f3ce5c3b0d337e424f19da089140237Kees Cook#define TPM_E_WRITE_FAILURE          ((uint32_t)0x00005008)  /* vboot local */
4100cc72894f3ce5c3b0d337e424f19da089140237Kees Cook#define TPM_E_READ_EMPTY             ((uint32_t)0x00005009)  /* vboot local */
4200cc72894f3ce5c3b0d337e424f19da089140237Kees Cook#define TPM_E_READ_FAILURE           ((uint32_t)0x0000500a)  /* vboot local */
4352a8d2df0612c63e148228a5c819d6be50d51f19Luigi Semenzato
44887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah#define TPM_NV_INDEX0 ((uint32_t)0x00000000)
45887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah#define TPM_NV_INDEX_LOCK ((uint32_t)0xffffffff)
46ded1cecd3631ffe62a03c44c7c7aa28fb3f8fdadLuigi Semenzato#define TPM_NV_PER_GLOBALLOCK (((uint32_t)1)<<15)
475896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_NV_PER_PPWRITE (((uint32_t)1)<<0)
485896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_NV_PER_READ_STCLEAR (((uint32_t)1)<<31)
495896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_NV_PER_WRITE_STCLEAR (((uint32_t)1)<<14)
505896b9664d088699e246de964a7c374af663a34eLuigi Semenzato
515896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_TAG_RQU_COMMAND       ((uint16_t) 0xc1)
525896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_TAG_RQU_AUTH1_COMMAND ((uint16_t) 0xc2)
535896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_TAG_RQU_AUTH2_COMMAND ((uint16_t) 0xc3)
545896b9664d088699e246de964a7c374af663a34eLuigi Semenzato
555896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_TAG_RSP_COMMAND       ((uint16_t) 0xc4)
565896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_TAG_RSP_AUTH1_COMMAND ((uint16_t) 0xc5)
575896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#define TPM_TAG_RSP_AUTH2_COMMAND ((uint16_t) 0xc6)
58887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah
59887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shahtypedef uint8_t TSS_BOOL;
60887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shahtypedef uint16_t TPM_STRUCTURE_TAG;
61887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah
62887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shahtypedef struct tdTPM_PERMANENT_FLAGS
63887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah{
64a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TPM_STRUCTURE_TAG tag;
65a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL disable;
66a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL ownership;
67a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL deactivated;
68a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL readPubek;
69a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL disableOwnerClear;
70a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL allowMaintenance;
71a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL physicalPresenceLifetimeLock;
72a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL physicalPresenceHWEnable;
73a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL physicalPresenceCMDEnable;
74a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL CEKPUsed;
75a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL TPMpost;
76a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL TPMpostLock;
77a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL FIPS;
78a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL Operator;
79a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL enableRevokeEK;
80a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL nvLocked;
81a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL readSRKPub;
82a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL tpmEstablished;
83a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL maintenanceDone;
84a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL disableFullDALogicInfo;
85887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah} TPM_PERMANENT_FLAGS;
86887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah
875896b9664d088699e246de964a7c374af663a34eLuigi Semenzatotypedef struct tdTPM_STCLEAR_FLAGS{
88a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TPM_STRUCTURE_TAG tag;
89a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL deactivated;
90a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL disableForceClear;
91a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL physicalPresence;
92a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL physicalPresenceLock;
93a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler	TSS_BOOL bGlobalLock;
945896b9664d088699e246de964a7c374af663a34eLuigi Semenzato} TPM_STCLEAR_FLAGS;
95887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah
9689678602e66df24dea75b384ce079519cb8ec2a4Che-Liang Chiou#endif  /* VBOOT_REFERENCE_TSS_CONSTANTS_H_ */
97