Home | History | Annotate | Download | only in IndustryStandard
      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