https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			196 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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
 |