## @file
# Component information file for the FSP notify phase PEI module.
#
#  Copyright (c) 2016 - 2017, 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                      = FspNotifyPhasePeim
  FILE_GUID                      = 29CBB005-C972-49F3-960F-292E2202CECD
  MODULE_TYPE                    = PEIM
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = FspNotifyPhasePeimEntryPoint

[Sources]
  FspNotifyPhasePeim.h
  FspNotifyPhasePeim.c

[Packages]
  MdePkg/MdePkg.dec
  IntelFsp2Pkg/IntelFsp2Pkg.dec

[LibraryClasses]
  PeimEntryPoint
  DebugLib
  FspPlatformLib
  FspCommonLib
  FspSwitchStackLib

[Ppis]
  gEfiDxeIplPpiGuid                       ## PRODUCES
  gEfiEndOfPeiSignalPpiGuid               ## PRODUCES

[Protocols]
  gEfiPciEnumerationCompleteProtocolGuid  ## PRODUCES

[Guids]
  gEfiEventReadyToBootGuid                ## PRODUCES ## Event

[Depex]
  gEfiDxeIplPpiGuid
