| /** @file | |
| TCG Service Protocol as defined in TCG_EFI_Protocol_1_22_Final | |
| See http://trustedcomputinggroup.org for the latest specification | |
| Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef _TCG_SERVICE_PROTOCOL_H_ | |
| #define _TCG_SERVICE_PROTOCOL_H_ | |
| #include <IndustryStandard/UefiTcgPlatform.h> | |
| #define EFI_TCG_PROTOCOL_GUID \ | |
| {0xf541796d, 0xa62e, 0x4954, { 0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd } } | |
| typedef struct _EFI_TCG_PROTOCOL EFI_TCG_PROTOCOL; | |
| typedef struct { | |
| UINT8 Major; | |
| UINT8 Minor; | |
| UINT8 RevMajor; | |
| UINT8 RevMinor; | |
| } TCG_VERSION; | |
| typedef struct _TCG_EFI_BOOT_SERVICE_CAPABILITY { | |
| UINT8 Size; /// Size of this structure. | |
| TCG_VERSION StructureVersion; | |
| TCG_VERSION ProtocolSpecVersion; | |
| UINT8 HashAlgorithmBitmap; /// Hash algorithms . | |
| /// This protocol is capable of : 01=SHA-1. | |
| BOOLEAN TPMPresentFlag; /// 00h = TPM not present. | |
| BOOLEAN TPMDeactivatedFlag; /// 01h = TPM currently deactivated. | |
| } TCG_EFI_BOOT_SERVICE_CAPABILITY; | |
| typedef UINT32 TCG_ALGORITHM_ID; | |
| /** | |
| This service provides EFI protocol capability information, state information | |
| about the TPM, and Event Log state information. | |
| @param This Indicates the calling context | |
| @param ProtocolCapability The callee allocates memory for a TCG_BOOT_SERVICE_CAPABILITY | |
| structure and fills in the fields with the EFI protocol | |
| capability information and the current TPM state information. | |
| @param TCGFeatureFlags This is a pointer to the feature flags. No feature | |
| flags are currently defined so this parameter | |
| MUST be set to 0. However, in the future, | |
| feature flags may be defined that, for example, | |
| enable hash algorithm agility. | |
| @param EventLogLocation This is a pointer to the address of the event log in memory. | |
| @param EventLogLastEntry If the Event Log contains more than one entry, | |
| this is a pointer to the address of the start of | |
| the last entry in the event log in memory. | |
| @retval EFI_SUCCESS The operation completed successfully. | |
| @retval EFI_INVALID_PARAMETER ProtocolCapability does not match TCG capability. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_TCG_STATUS_CHECK)( | |
| IN EFI_TCG_PROTOCOL *This, | |
| OUT TCG_EFI_BOOT_SERVICE_CAPABILITY | |
| *ProtocolCapability, | |
| OUT UINT32 *TCGFeatureFlags, | |
| OUT EFI_PHYSICAL_ADDRESS *EventLogLocation, | |
| OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry | |
| ); | |
| /** | |
| This service abstracts the capability to do a hash operation on a data buffer. | |
| @param This Indicates the calling context. | |
| @param HashData The pointer to the data buffer to be hashed. | |
| @param HashDataLen The length of the data buffer to be hashed. | |
| @param AlgorithmId Identification of the Algorithm to use for the hashing operation. | |
| @param HashedDataLen Resultant length of the hashed data. | |
| @param HashedDataResult Resultant buffer of the hashed data. | |
| @retval EFI_SUCCESS The operation completed successfully. | |
| @retval EFI_INVALID_PARAMETER HashDataLen is NULL. | |
| @retval EFI_INVALID_PARAMETER HashDataLenResult is NULL. | |
| @retval EFI_OUT_OF_RESOURCES Cannot allocate buffer of size *HashedDataLen. | |
| @retval EFI_UNSUPPORTED AlgorithmId not supported. | |
| @retval EFI_BUFFER_TOO_SMALL *HashedDataLen < sizeof (TCG_DIGEST). | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_TCG_HASH_ALL)( | |
| IN EFI_TCG_PROTOCOL *This, | |
| IN UINT8 *HashData, | |
| IN UINT64 HashDataLen, | |
| IN TCG_ALGORITHM_ID AlgorithmId, | |
| IN OUT UINT64 *HashedDataLen, | |
| IN OUT UINT8 **HashedDataResult | |
| ); | |
| /** | |
| This service abstracts the capability to add an entry to the Event Log. | |
| @param This Indicates the calling context | |
| @param TCGLogData The pointer to the start of the data buffer containing | |
| the TCG_PCR_EVENT data structure. All fields in | |
| this structure are properly filled by the caller. | |
| @param EventNumber The event number of the event just logged. | |
| @param Flags Indicates additional flags. Only one flag has been | |
| defined at this time, which is 0x01 and means the | |
| extend operation should not be performed. All | |
| other bits are reserved. | |
| @retval EFI_SUCCESS The operation completed successfully. | |
| @retval EFI_OUT_OF_RESOURCES Insufficient memory in the event log to complete this action. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_TCG_LOG_EVENT)( | |
| IN EFI_TCG_PROTOCOL *This, | |
| IN TCG_PCR_EVENT *TCGLogData, | |
| IN OUT UINT32 *EventNumber, | |
| IN UINT32 Flags | |
| ); | |
| /** | |
| This service is a proxy for commands to the TPM. | |
| @param This Indicates the calling context. | |
| @param TpmInputParameterBlockSize Size of the TPM input parameter block. | |
| @param TpmInputParameterBlock The pointer to the TPM input parameter block. | |
| @param TpmOutputParameterBlockSize Size of the TPM output parameter block. | |
| @param TpmOutputParameterBlock The pointer to the TPM output parameter block. | |
| @retval EFI_SUCCESS The operation completed successfully. | |
| @retval EFI_INVALID_PARAMETER Invalid ordinal. | |
| @retval EFI_UNSUPPORTED Current Task Priority Level >= EFI_TPL_CALLBACK. | |
| @retval EFI_TIMEOUT The TIS timed-out. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_TCG_PASS_THROUGH_TO_TPM)( | |
| IN EFI_TCG_PROTOCOL *This, | |
| IN UINT32 TpmInputParameterBlockSize, | |
| IN UINT8 *TpmInputParameterBlock, | |
| IN UINT32 TpmOutputParameterBlockSize, | |
| IN UINT8 *TpmOutputParameterBlock | |
| ); | |
| /** | |
| This service abstracts the capability to do a hash operation on a data buffer, extend a specific TPM PCR with the hash result, and add an entry to the Event Log | |
| @param This Indicates the calling context | |
| @param HashData The physical address of the start of the data buffer | |
| to be hashed, extended, and logged. | |
| @param HashDataLen The length, in bytes, of the buffer referenced by HashData | |
| @param AlgorithmId Identification of the Algorithm to use for the hashing operation | |
| @param TCGLogData The physical address of the start of the data | |
| buffer containing the TCG_PCR_EVENT data structure. | |
| @param EventNumber The event number of the event just logged. | |
| @param EventLogLastEntry The physical address of the first byte of the entry | |
| just placed in the Event Log. If the Event Log was | |
| empty when this function was called then this physical | |
| address will be the same as the physical address of | |
| the start of the Event Log. | |
| @retval EFI_SUCCESS The operation completed successfully. | |
| @retval EFI_UNSUPPORTED AlgorithmId != TPM_ALG_SHA. | |
| @retval EFI_UNSUPPORTED Current TPL >= EFI_TPL_CALLBACK. | |
| @retval EFI_DEVICE_ERROR The command was unsuccessful. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_TCG_HASH_LOG_EXTEND_EVENT)( | |
| IN EFI_TCG_PROTOCOL *This, | |
| IN EFI_PHYSICAL_ADDRESS HashData, | |
| IN UINT64 HashDataLen, | |
| IN TCG_ALGORITHM_ID AlgorithmId, | |
| IN OUT TCG_PCR_EVENT *TCGLogData, | |
| IN OUT UINT32 *EventNumber, | |
| OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry | |
| ); | |
| /// | |
| /// The EFI_TCG Protocol abstracts TCG activity. | |
| /// | |
| struct _EFI_TCG_PROTOCOL { | |
| EFI_TCG_STATUS_CHECK StatusCheck; | |
| EFI_TCG_HASH_ALL HashAll; | |
| EFI_TCG_LOG_EVENT LogEvent; | |
| EFI_TCG_PASS_THROUGH_TO_TPM PassThroughToTpm; | |
| EFI_TCG_HASH_LOG_EXTEND_EVENT HashLogExtendEvent; | |
| }; | |
| extern EFI_GUID gEfiTcgProtocolGuid; | |
| #endif |