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   TcgService.h
15 
16 Abstract:
17 
18   TCG Service Protocol as defined in TCG_EFI_Protocol_1_20_Final
19 
20   See http://trustedcomputinggroup.org for the latest specification
21 
22 --*/
23 
24 #ifndef _TCG_SERVICE_PROTOCOL_H_
25 #define _TCG_SERVICE_PROTOCOL_H_
26 
27 #include "EfiTpm.h"
28 
29 #define EFI_TCG_PROTOCOL_GUID  \
30   {0xf541796d, 0xa62e, 0x4954, {0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd}}
31 
32 #define EFI_TCG_PLATFORM_PROTOCOL_GUID  \
33   { 0x8c4c9a41, 0xbf56, 0x4627, {0x9e, 0xa, 0xc8, 0x38, 0x6d, 0x66, 0x11, 0x5c} }
34 
35 #define TSS_EVENT_DATA_MAX_SIZE   256
36 
37 #define EFI_CALLING_EFI_APPLICATION         \
38   "Calling EFI Application from Boot Option"
39 #define EFI_RETURNING_FROM_EFI_APPLICATOIN  \
40   "Returning from EFI Application from Boot Option"
41 #define EFI_EXIT_BOOT_SERVICES_INVOCATION   \
42   "Exit Boot Services Invocation"
43 #define EFI_EXIT_BOOT_SERVICES_FAILED       \
44   "Exit Boot Services Returned with Failure"
45 #define EFI_EXIT_BOOT_SERVICES_SUCCEEDED    \
46   "Exit Boot Services Returned with Success"
47 
48 EFI_FORWARD_DECLARATION (EFI_TCG_PROTOCOL);
49 
50 //
51 // Set structure alignment to 1-byte
52 //
53 #pragma pack (1)
54 
55 typedef struct {
56   UINT8  Major;
57   UINT8  Minor;
58   UINT8  RevMajor;
59   UINT8  RevMinor;
60 } TCG_VERSION;
61 
62 typedef struct _TCG_EFI_BOOT_SERVICE_CAPABILITY {
63   UINT8          Size;                // Size of this structure
64   TCG_VERSION    StructureVersion;
65   TCG_VERSION    ProtocolSpecVersion;
66   UINT8          HashAlgorithmBitmap; // Hash algorithms
67                                       // this protocol is capable of : 01=SHA-1
68   BOOLEAN        TPMPresentFlag;      // 00h = TPM not present
69   BOOLEAN        TPMDeactivatedFlag;  // 01h = TPM currently deactivated
70 } TCG_EFI_BOOT_SERVICE_CAPABILITY;
71 
72 typedef UINT32   TCG_ALGORITHM_ID;
73 
74 //
75 // Restore original structure alignment
76 //
77 #pragma pack ()
78 
79 typedef
80 EFI_STATUS
81 (EFIAPI *EFI_TCG_STATUS_CHECK) (
82   IN      EFI_TCG_PROTOCOL          *This,
83   OUT     TCG_EFI_BOOT_SERVICE_CAPABILITY
84                                     *ProtocolCapability,
85   OUT     UINT32                    *TCGFeatureFlags,
86   OUT     EFI_PHYSICAL_ADDRESS      *EventLogLocation,
87   OUT     EFI_PHYSICAL_ADDRESS      *EventLogLastEntry
88   );
89 
90 typedef
91 EFI_STATUS
92 (EFIAPI *EFI_TCG_HASH_ALL) (
93   IN      EFI_TCG_PROTOCOL          *This,
94   IN      UINT8                     *HashData,
95   IN      UINT64                    HashDataLen,
96   IN      TCG_ALGORITHM_ID          AlgorithmId,
97   IN OUT  UINT64                    *HashedDataLen,
98   IN OUT  UINT8                     **HashedDataResult
99   );
100 
101 typedef
102 EFI_STATUS
103 (EFIAPI *EFI_TCG_LOG_EVENT) (
104   IN      EFI_TCG_PROTOCOL          *This,
105   IN      TCG_PCR_EVENT             *TCGLogData,
106   IN OUT  UINT32                    *EventNumber,
107   IN      UINT32                    Flags
108   );
109 
110 typedef
111 EFI_STATUS
112 (EFIAPI *EFI_TCG_PASS_THROUGH_TO_TPM) (
113   IN      EFI_TCG_PROTOCOL          *This,
114   IN      UINT32                    TpmInputParameterBlockSize,
115   IN      UINT8                     *TpmInputParameterBlock,
116   IN      UINT32                    TpmOutputParameterBlockSize,
117   IN      UINT8                     *TpmOutputParameterBlock
118   );
119 
120 typedef
121 EFI_STATUS
122 (EFIAPI *EFI_TCG_HASH_LOG_EXTEND_EVENT) (
123   IN      EFI_TCG_PROTOCOL          *This,
124   IN      EFI_PHYSICAL_ADDRESS      HashData,
125   IN      UINT64                    HashDataLen,
126   IN      TCG_ALGORITHM_ID          AlgorithmId,
127   IN OUT  TCG_PCR_EVENT             *TCGLogData,
128   IN OUT  UINT32                    *EventNumber,
129      OUT  EFI_PHYSICAL_ADDRESS      *EventLogLastEntry
130   );
131 
132 struct _EFI_TCG_PROTOCOL {
133   EFI_TCG_STATUS_CHECK              StatusCheck;
134   EFI_TCG_HASH_ALL                  HashAll;
135   EFI_TCG_LOG_EVENT                 LogEvent;
136   EFI_TCG_PASS_THROUGH_TO_TPM       PassThroughToTpm;
137   EFI_TCG_HASH_LOG_EXTEND_EVENT     HashLogExtendEvent;
138 };
139 
140 extern EFI_GUID gEfiTcgProtocolGuid;
141 
142 //
143 // EFI TCG Platform Protocol
144 //
145 typedef
146 EFI_STATUS
147 (EFIAPI *EFI_TCG_MEASURE_PE_IMAGE) (
148   IN      BOOLEAN                   BootPolicy,
149   IN      EFI_PHYSICAL_ADDRESS      ImageAddress,
150   IN      UINTN                     ImageSize,
151   IN      UINTN                     LinkTimeBase,
152   IN      UINT16                    ImageType,
153   IN      EFI_HANDLE                DeviceHandle,
154   IN      EFI_DEVICE_PATH_PROTOCOL  *FilePath
155   );
156 
157 typedef
158 EFI_STATUS
159 (EFIAPI *EFI_TCG_MEASURE_ACTION) (
160   IN      CHAR8                     *ActionString
161   );
162 
163 typedef
164 EFI_STATUS
165 (EFIAPI *EFI_TCG_MEASURE_GPT_TABLE) (
166   IN      EFI_DEVICE_PATH_PROTOCOL  *DevicePath
167   );
168 
169 typedef struct _EFI_TCG_PLATFORM_PROTOCOL {
170   EFI_TCG_MEASURE_PE_IMAGE          MeasurePeImage;
171   EFI_TCG_MEASURE_ACTION            MeasureAction;
172   EFI_TCG_MEASURE_GPT_TABLE         MeasureGptTable;
173 } EFI_TCG_PLATFORM_PROTOCOL;
174 
175 extern EFI_GUID                     gEfiTcgPlatformProtocolGuid;
176 
177 #endif
178