## @file
#
#  Produces EFI_CC_MEASUREMENT_PROTOCOL and measure boot environment
#
#
# Copyright (c) 2020 - 2022, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = TdTcg2Dxe
  FILE_GUID                      = F062221E-C607-44C2-B0B4-C3886331D351
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = DriverEntry

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = X64
#

[Sources]
  TdTcg2Dxe.c
  MeasureBootPeCoff.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  SecurityPkg/SecurityPkg.dec
  CryptoPkg/CryptoPkg.dec

[LibraryClasses]
  MemoryAllocationLib
  BaseLib
  UefiBootServicesTableLib
  HobLib
  UefiDriverEntryPoint
  UefiRuntimeServicesTableLib
  BaseMemoryLib
  DebugLib
  PrintLib
  UefiLib
  HashLib
  PerformanceLib
  ReportStatusCodeLib
  PeCoffLib
  TpmMeasurementLib
  TdxLib

[Guids]
  ## SOMETIMES_CONSUMES     ## Variable:L"SecureBoot"
  ## SOMETIMES_CONSUMES     ## Variable:L"PK"
  ## SOMETIMES_CONSUMES     ## Variable:L"KEK"
  ## SOMETIMES_CONSUMES     ## Variable:L"BootXXXX"
  gEfiGlobalVariableGuid

  ## SOMETIMES_CONSUMES      ## Variable:L"db"
  ## SOMETIMES_CONSUMES      ## Variable:L"dbx"
  gEfiImageSecurityDatabaseGuid

  # gTcgEventEntryHobGuid                              ## SOMETIMES_CONSUMES  ## HOB
  gEfiEventExitBootServicesGuid                      ## CONSUMES            ## Event
  gEventExitBootServicesFailedGuid                   ## SOMETIMES_CONSUMES  ## Event

  gCcEventEntryHobGuid                               ## SOMETIMES_CONSUMES  ## HOB
  gTcg800155PlatformIdEventHobGuid                   ## SOMETIMES_CONSUMES  ## HOB
  gEfiCcFinalEventsTableGuid                         ## PRODUCES

[Protocols]
  gEfiCcMeasurementProtocolGuid                      ## PRODUCES
  gEfiMpServiceProtocolGuid                          ## SOMETIMES_CONSUMES
  gEfiVariableWriteArchProtocolGuid                  ## NOTIFY
  gEfiResetNotificationProtocolGuid                  ## CONSUMES
  gEfiAcpiTableProtocolGuid                          ## NOTIFY

[Pcd]
  gEfiSecurityPkgTokenSpaceGuid.PcdTpmPlatformClass                         ## SOMETIMES_CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdFirmwareDebuggerInitialized              ## SOMETIMES_CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdStatusCodeSubClassTpmDevice              ## SOMETIMES_CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTcg2HashAlgorithmBitmap                  ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTcg2NumberOfPCRBanks                     ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTcgLogAreaMinLen                         ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTcg2FinalLogAreaLen                      ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdCcEventlogAcpiTableLaml                  ## PRODUCES
  gEfiSecurityPkgTokenSpaceGuid.PcdCcEventlogAcpiTableLasa                  ## PRODUCES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId                        ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId                   ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision                  ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId                    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision              ## CONSUMES

[Depex]
  # According to PcdTpm2AcpiTableRev definition in SecurityPkg.dec
  # This PCD should be configured at DynamicHii or DynamicHiiEx.
  # So, this PCD read operation depends on GetVariable service.
  # Add VariableArch protocol dependency to make sure PCD read works.
  gEfiVariableArchProtocolGuid AND gEfiAcpiTableProtocolGuid
