## @file
#  Provides ACPI methods for TPM 2.0 support
#
#  Spec Compliance Info:
#     "TCG ACPI Specification Version 1.2 Revision 8"
#     "Physical Presence Interface Specification Version 1.30 Revision 00.52"
#       along with
#     "Errata Version 0.4 for TCG PC Client Platform Physical Presence Interface Specification"
#     "Platform Reset Attack Mitigation Specification Version 1.00"
#    TPM2.0 ACPI device object
#     "TCG PC Client Platform Firmware Profile Specification for TPM Family 2.0 Level 00 Revision 1.03 v51"
#       along with
#     "Errata for PC Client Specific Platform Firmware Profile Specification Version 1.0 Revision 1.03"
#
#  This driver implements TPM 2.0 definition block in ACPI table and
#  populates registered SMI callback functions for Tcg2 physical presence
#  and MemoryClear to handle the requests for ACPI method. It needs to be
#  used together with Tcg2 MM drivers to exchange information on registered
#  SwSmiValue and allocated NVS region address.
#
#  Caution: This module requires additional review when modified.
#  This driver will have external input - variable and ACPINvs data in SMM mode.
#  This external input must be validated carefully to avoid security issue.
#
# Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
# Copyright (c) Microsoft Corporation.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = Tcg2Acpi
  FILE_GUID                      = 0D4BBF18-C2CC-4C23-BD63-BFDAD4C710D0
  MODULE_TYPE                    = DXE_DRIVER
  PI_SPECIFICATION_VERSION       = 0x0001000A
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = InitializeTcgAcpi

[Sources]
  Tcg2Acpi.c
  Tpm.asl

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  SecurityPkg/SecurityPkg.dec

[LibraryClasses]
  BaseLib
  BaseMemoryLib
  UefiDriverEntryPoint
  UefiBootServicesTableLib
  DebugLib
  DxeServicesLib
  TpmMeasurementLib
  Tpm2CommandLib
  Tcg2PhysicalPresenceLib
  PcdLib
  MmUnblockMemoryLib

[Guids]
  gEfiTpmDeviceInstanceTpm20DtpmGuid                            ## PRODUCES           ## GUID       # TPM device identifier
  gTpmNvsMmGuid                                                 ## CONSUMES
  gEdkiiPiSmmCommunicationRegionTableGuid                       ## CONSUMES

[Protocols]
  gEfiAcpiTableProtocolGuid                                     ## CONSUMES
  gEfiMmCommunicationProtocolGuid                               ## CONSUMES

[FixedPcd]
  gEfiSecurityPkgTokenSpaceGuid.PcdSmiCommandIoPort             ## CONSUMES

[Pcd]
  gEfiSecurityPkgTokenSpaceGuid.PcdTpmInstanceGuid              ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId            ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId       ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision      ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId        ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision  ## SOMETIMES_CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTpmBaseAddress               ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTcgPhysicalPresenceInterfaceVer  ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableRev                 ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTpmPlatformClass                 ## SOMETIMES_CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2CurrentIrqNum            ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2PossibleIrqNumBuf        ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdActiveTpmInterfaceType       ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableLaml            ## CONSUMES
  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableLasa            ## CONSUMES

[Depex]
  gEfiAcpiTableProtocolGuid AND
  gTcg2MmSwSmiRegisteredGuid AND
  gEfiTcg2ProtocolGuid
