/** @file | |
TCG Service Protocol as defined in TCG_EFI_Protocol_1_22_Final | |
See http://trustedcomputinggroup.org for the latest specification | |
Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials are licensed and made available under | |
the terms and conditions of the BSD License that accompanies this distribution. | |
The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php. | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#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 |