## @file
#  Status Code Handler Driver which produces general handlers and hook them onto the MM status code router.
#
#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
#  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
#  Copyright (c) Microsoft Corporation.
#
#  SPDX-License-Identifier: BSD-2-Clause-Patent
#
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = StatusCodeHandlerStandaloneMm
  FILE_GUID                      = EBE7802F-5E11-4D4E-B463-22D2425D156B
  MODULE_TYPE                    = MM_STANDALONE
  PI_SPECIFICATION_VERSION       = 0x00010032
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = StatusCodeHandlerStandaloneMmEntry

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64
#

[Sources]
  StatusCodeHandlerMm.c
  StatusCodeHandlerMm.h
  StatusCodeHandlerStandalone.c
  SerialStatusCodeWorker.c
  MemoryStatusCodeWorker.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  SerialPortLib
  MmServicesTableLib
  StandaloneMmDriverEntryPoint
  PcdLib
  PrintLib
  ReportStatusCodeLib
  DebugLib
  MemoryAllocationLib
  BaseMemoryLib

[Guids]
  gEfiStatusCodeDataTypeStringGuid              ## SOMETIMES_CONSUMES   ## UNDEFINED
  gMemoryStatusCodeRecordGuid                   ## SOMETIMES_PRODUCES   ## UNDEFINED # MmSystemTable

[Protocols]
  gEfiMmRscHandlerProtocolGuid                  ## CONSUMES

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize |128| gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory   ## SOMETIMES_CONSUMES

[Depex]
  gEfiMmRscHandlerProtocolGuid
