/** @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
