text: /** @file
    The header file for Tcg2 SMM driver.
  
  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
  Copyright (c) Microsoft Corporation.
  SPDX-License-Identifier: BSD-2-Clause-Patent
  
  **/
  
  #ifndef __TCG2_SMM_H__
  #define __TCG2_SMM_H__
  
  #include <PiMm.h>
  
  #include <Guid/MemoryOverwriteControl.h>
  #include <Guid/TpmInstance.h>
  #include <Guid/TpmNvsMm.h>
  
  #include <Protocol/MmReadyToLock.h>
  #include <Protocol/SmmSwDispatch2.h>
  #include <Protocol/AcpiTable.h>
  #include <Protocol/SmmVariable.h>
  #include <Protocol/Tcg2Protocol.h>
  
  #include <Library/BaseLib.h>
  #include <Library/BaseMemoryLib.h>
  #include <Library/DebugLib.h>
  #include <Library/MmServicesTableLib.h>
  #include <Library/Tpm2CommandLib.h>
  #include <Library/Tcg2PhysicalPresenceLib.h>
  #include <Library/IoLib.h>
  #include <Library/PcdLib.h>
  #include <Library/Tpm2DeviceLib.h>
  
  #include <IndustryStandard/TpmPtp.h>
  
  //
  // The definition for TCG MOR
  //
  #define ACPI_FUNCTION_DSM_MEMORY_CLEAR_INTERFACE  1
  #define ACPI_FUNCTION_PTS_CLEAR_MOR_BIT           2
  
  //
  // The return code for Memory Clear Interface Functions
  //
  #define MOR_REQUEST_SUCCESS          0
  #define MOR_REQUEST_GENERAL_FAILURE  1
  
  /**
    Notify the system that the SMM variable driver is ready.
  **/
  VOID
  Tcg2NotifyMmReady (
    VOID
    );
  
  /**
    This function is an abstraction layer for implementation specific Mm buffer validation routine.
  
    @param Buffer  The buffer start address to be checked.
    @param Length  The buffer length to be checked.
  
    @retval TRUE  This buffer is valid per processor architecture and not overlap with SMRAM.
    @retval FALSE This buffer is not valid per processor architecture or overlap with SMRAM.
  **/
  BOOLEAN
  IsBufferOutsideMmValid (
    IN EFI_PHYSICAL_ADDRESS  Buffer,
    IN UINT64                Length
    );
  
  /**
    The driver's common initialization routine.
  
    It install callbacks for TPM physical presence and MemoryClear, and locate
    SMM variable to be used in the callback function.
  
    @retval EFI_SUCCESS     The entry point is executed successfully.
    @retval Others          Some error occurs when executing this entry point.
  
  **/
  EFI_STATUS
  InitializeTcgCommon (
    VOID
    );
  
  #endif // __TCG_SMM_H__
  