1 /** @file 2 TPM Interface Specification definition. 3 It covers both TPM1.2 and TPM2.0. 4 5 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef _TPM_TIS_H_ 17 #define _TPM_TIS_H_ 18 19 // 20 // Set structure alignment to 1-byte 21 // 22 #pragma pack (1) 23 24 // 25 // Register set map as specified in TIS specification Chapter 10 26 // 27 typedef struct { 28 /// 29 /// Used to gain ownership for this particular port. 30 /// 31 UINT8 Access; // 0 32 UINT8 Reserved1[7]; // 1 33 /// 34 /// Controls interrupts. 35 /// 36 UINT32 IntEnable; // 8 37 /// 38 /// SIRQ vector to be used by the TPM. 39 /// 40 UINT8 IntVector; // 0ch 41 UINT8 Reserved2[3]; // 0dh 42 /// 43 /// What caused interrupt. 44 /// 45 UINT32 IntSts; // 10h 46 /// 47 /// Shows which interrupts are supported by that particular TPM. 48 /// 49 UINT32 IntfCapability; // 14h 50 /// 51 /// Status Register. Provides status of the TPM. 52 /// 53 UINT8 Status; // 18h 54 /// 55 /// Number of consecutive writes that can be done to the TPM. 56 /// 57 UINT16 BurstCount; // 19h 58 UINT8 Reserved3[9]; 59 /// 60 /// Read or write FIFO, depending on transaction. 61 /// 62 UINT32 DataFifo; // 24h 63 UINT8 Reserved4[0xed8]; // 28h 64 /// 65 /// Vendor ID 66 /// 67 UINT16 Vid; // 0f00h 68 /// 69 /// Device ID 70 /// 71 UINT16 Did; // 0f02h 72 /// 73 /// Revision ID 74 /// 75 UINT8 Rid; // 0f04h 76 UINT8 Reserved[0x7b]; // 0f05h 77 /// 78 /// Alias to I/O legacy space. 79 /// 80 UINT32 LegacyAddress1; // 0f80h 81 /// 82 /// Additional 8 bits for I/O legacy space extension. 83 /// 84 UINT32 LegacyAddress1Ex; // 0f84h 85 /// 86 /// Alias to second I/O legacy space. 87 /// 88 UINT32 LegacyAddress2; // 0f88h 89 /// 90 /// Additional 8 bits for second I/O legacy space extension. 91 /// 92 UINT32 LegacyAddress2Ex; // 0f8ch 93 /// 94 /// Vendor-defined configuration registers. 95 /// 96 UINT8 VendorDefined[0x70];// 0f90h 97 } TIS_PC_REGISTERS; 98 99 // 100 // Restore original structure alignment 101 // 102 #pragma pack () 103 104 // 105 // Define pointer types used to access TIS registers on PC 106 // 107 typedef TIS_PC_REGISTERS *TIS_PC_REGISTERS_PTR; 108 109 // 110 // Define bits of ACCESS and STATUS registers 111 // 112 113 /// 114 /// This bit is a 1 to indicate that the other bits in this register are valid. 115 /// 116 #define TIS_PC_VALID BIT7 117 /// 118 /// Indicate that this locality is active. 119 /// 120 #define TIS_PC_ACC_ACTIVE BIT5 121 /// 122 /// Set to 1 to indicate that this locality had the TPM taken away while 123 /// this locality had the TIS_PC_ACC_ACTIVE bit set. 124 /// 125 #define TIS_PC_ACC_SEIZED BIT4 126 /// 127 /// Set to 1 to indicate that TPM MUST reset the 128 /// TIS_PC_ACC_ACTIVE bit and remove ownership for localities less than the 129 /// locality that is writing this bit. 130 /// 131 #define TIS_PC_ACC_SEIZE BIT3 132 /// 133 /// When this bit is 1, another locality is requesting usage of the TPM. 134 /// 135 #define TIS_PC_ACC_PENDIND BIT2 136 /// 137 /// Set to 1 to indicate that this locality is requesting to use TPM. 138 /// 139 #define TIS_PC_ACC_RQUUSE BIT1 140 /// 141 /// A value of 1 indicates that a T/OS has not been established on the platform 142 /// 143 #define TIS_PC_ACC_ESTABLISH BIT0 144 145 /// 146 /// This field indicates that STS_DATA and STS_EXPECT are valid 147 /// 148 #define TIS_PC_STS_VALID BIT7 149 /// 150 /// When this bit is 1, TPM is in the Ready state, 151 /// indicating it is ready to receive a new command. 152 /// 153 #define TIS_PC_STS_READY BIT6 154 /// 155 /// Write a 1 to this bit to cause the TPM to execute that command. 156 /// 157 #define TIS_PC_STS_GO BIT5 158 /// 159 /// This bit indicates that the TPM has data available as a response. 160 /// 161 #define TIS_PC_STS_DATA BIT4 162 /// 163 /// The TPM sets this bit to a value of 1 when it expects another byte of data for a command. 164 /// 165 #define TIS_PC_STS_EXPECT BIT3 166 /// 167 /// Indicates that the TPM has completed all self-test actions following a TPM_ContinueSelfTest command. 168 /// 169 #define TIS_PC_STS_SELFTEST_DONE BIT2 170 /// 171 /// Writes a 1 to this bit to force the TPM to re-send the response. 172 /// 173 #define TIS_PC_STS_RETRY BIT1 174 175 // 176 // Default TimeOut value 177 // 178 #define TIS_TIMEOUT_A (750 * 1000) // 750ms 179 #define TIS_TIMEOUT_B (2000 * 1000) // 2s 180 #define TIS_TIMEOUT_C (750 * 1000) // 750ms 181 #define TIS_TIMEOUT_D (750 * 1000) // 750ms 182 183 #endif