## @file
#  Instance of Report Status Code Library for PEI Phase.
#
#  Instance of Report Status Code Library for PEI Phase. It first tries to report status
#  code via PEI Status Code Service. If the service is not available, it then tries calling
#  OEM Hook Status Code Library.
#
#  Copyright (c) 2006 - 2010, Intel Corporation.
#
#  All rights reserved. This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution. The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = PeiReportStatusCodeLib
  FILE_GUID                      = 8c690838-7a22-45c4-aa58-a33e3e515cd4
  MODULE_TYPE                    = PEIM
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = ReportStatusCodeLib|SEC PEIM PEI_CORE
  
#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
#

[Sources]
  ReportStatusCodeLib.c


[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  PcdLib
  PeiServicesTablePointerLib
  BaseMemoryLib
  BaseLib
  DebugLib
  OemHookStatusCodeLib


[Guids]
  gEfiStatusCodeSpecificDataGuid                ## CONSUMES
  gEfiStatusCodeDataTypeDebugGuid               ## CONSUMES


[Pcd]
  gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask

