Home | History | Annotate | Download | only in Include
      1 /*++
      2 
      3 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   EfiTpm.h
     15 
     16 Abstract:
     17 
     18   EFI definition according to TCG_EFI_Platform_1_20_Final
     19 
     20   See http://trustedcomputinggroup.org for latest specification updates
     21 
     22 --*/
     23 
     24 #ifndef _EFI_TPM_H_
     25 #define _EFI_TPM_H_
     26 
     27 #include "Tiano.h"
     28 
     29 //
     30 // The start of TPM return codes
     31 //
     32 #define TPM_BASE                    (EFI_MAX_BIT + (EFI_MAX_BIT >> 1))
     33 #include "Tpm12.h"
     34 
     35 //
     36 // Standard event types
     37 //
     38 #define EV_POST_CODE                ((TCG_EVENTTYPE) 0x00000001)
     39 #define EV_SEPARATOR                ((TCG_EVENTTYPE) 0x00000004)
     40 #define EV_S_CRTM_CONTENTS          ((TCG_EVENTTYPE) 0x00000007)
     41 #define EV_S_CRTM_VERSION           ((TCG_EVENTTYPE) 0x00000008)
     42 
     43 //
     44 // EFI specific event types
     45 //
     46 #define EV_EFI_EVENT_BASE                   ((TCG_EVENTTYPE) 0x80000000)
     47 #define EV_EFI_VARIABLE_DRIVER_CONFIG       (EV_EFI_EVENT_BASE + 1)
     48 #define EV_EFI_VARIABLE_BOOT                (EV_EFI_EVENT_BASE + 2)
     49 #define EV_EFI_BOOT_SERVICES_APPLICATION    (EV_EFI_EVENT_BASE + 3)
     50 #define EV_EFI_BOOT_SERVICES_DRIVER         (EV_EFI_EVENT_BASE + 4)
     51 #define EV_EFI_RUNTIME_SERVICES_DRIVER      (EV_EFI_EVENT_BASE + 5)
     52 #define EV_EFI_GPT_EVENT                    (EV_EFI_EVENT_BASE + 6)
     53 #define EV_EFI_ACTION                       (EV_EFI_EVENT_BASE + 7)
     54 #define EV_EFI_PLATFORM_FIRMWARE_BLOB       (EV_EFI_EVENT_BASE + 8)
     55 #define EV_EFI_HANDOFF_TABLES               (EV_EFI_EVENT_BASE + 9)
     56 
     57 //
     58 // Set structure alignment to 1-byte
     59 //
     60 #pragma pack (1)
     61 
     62 typedef UINT32                     TCG_EVENTTYPE;
     63 
     64 #define TCG_DIGEST                 TPM_DIGEST
     65 #define TCG_PCRINDEX               TPM_PCRINDEX
     66 
     67 //
     68 // TCG_PCR_EVENT
     69 //
     70 typedef struct tdTCG_PCR_EVENT {
     71   TCG_PCRINDEX                      PCRIndex;  // PCRIndex event extended to
     72   TCG_EVENTTYPE                     EventType; // TCG EFI event type
     73   TCG_DIGEST                        Digest;    // Value extended into PCRIndex
     74   UINT32                            EventSize; // Size of the event data
     75   UINT8                             Event[1];  // The event data
     76 } TCG_PCR_EVENT;
     77 
     78 //
     79 // TCG_PCR_EVENT_HDR
     80 //
     81 typedef struct tdTCG_PCR_EVENT_HDR {
     82   TCG_PCRINDEX                      PCRIndex;
     83   TCG_EVENTTYPE                     EventType;
     84   TCG_DIGEST                        Digest;
     85   UINT32                            EventSize;
     86 } TCG_PCR_EVENT_HDR;
     87 
     88 //
     89 // EFI_PLATFORM_FIRMWARE_BLOB
     90 //
     91 // BlobLength should be of type UINTN but we use UINT64 here
     92 // because PEI is 32-bit while DXE is 64-bit on x64 platforms
     93 //
     94 typedef struct tdEFI_PLATFORM_FIRMWARE_BLOB {
     95   EFI_PHYSICAL_ADDRESS              BlobBase;
     96   UINT64                            BlobLength;
     97 } EFI_PLATFORM_FIRMWARE_BLOB;
     98 
     99 //
    100 // EFI_IMAGE_LOAD_EVENT
    101 //
    102 // This structure is used in EV_EFI_BOOT_SERVICES_APPLICATION,
    103 // EV_EFI_BOOT_SERVICES_DRIVER and EV_EFI_RUNTIME_SERVICES_DRIVER
    104 //
    105 typedef struct tdEFI_IMAGE_LOAD_EVENT {
    106   EFI_PHYSICAL_ADDRESS              ImageLocationInMemory;
    107   UINTN                             ImageLengthInMemory;
    108   UINTN                             ImageLinkTimeAddress;
    109   UINTN                             LengthOfDevicePath;
    110   EFI_DEVICE_PATH_PROTOCOL          DevicePath[1];
    111 } EFI_IMAGE_LOAD_EVENT;
    112 
    113 //
    114 // EFI_HANDOFF_TABLE_POINTERS
    115 //
    116 // This structure is used in EV_EFI_HANDOFF_TABLES event to facilitate
    117 // the measurement of given configuration tables.
    118 //
    119 typedef struct tdEFI_HANDOFF_TABLE_POINTERS {
    120   UINTN                             NumberOfTables;
    121   EFI_CONFIGURATION_TABLE           TableEntry[1];
    122 } EFI_HANDOFF_TABLE_POINTERS;
    123 
    124 //
    125 // EFI_VARIABLE_DATA
    126 //
    127 // This structure serves as the header for measuring variables. The name of the
    128 // variable (in Unicode format) should immediately follow, then the variable
    129 // data.
    130 //
    131 typedef struct tdEFI_VARIABLE_DATA {
    132   EFI_GUID                          VariableName;
    133   UINTN                             UnicodeNameLength;
    134   UINTN                             VariableDataLength;
    135   CHAR16                            UnicodeName[1];
    136   INT8                              VariableData[1];  // Driver or platform-specific data
    137 } EFI_VARIABLE_DATA;
    138 
    139 //
    140 // Restore original structure alignment
    141 //
    142 #pragma pack ()
    143 
    144 #endif  // _EFI_TPM_H_
    145