## @file
#  Last PEIM executed in PEI phase to load DXE Core from a Firmware Volume.
#
#  This module produces a special PPI named the DXE Initial Program Load (IPL)
#  PPI to discover and dispatch the DXE Foundation and components that are
#  needed to run the DXE Foundation.
#
#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
#  Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
#
#  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                      = DxeIpl
  MODULE_UNI_FILE                = DxeIpl.uni
  FILE_GUID                      = 86D70125-BAA3-4296-A62F-602BEBBB9081
  MODULE_TYPE                    = PEIM
  VERSION_STRING                 = 1.0

  ENTRY_POINT                    = PeimInitializeDxeIpl

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only) AARCH64
#

[Sources]
  DxeIpl.h
  DxeLoad.c

[Sources.Ia32]
  X64/VirtualMemory.h
  X64/VirtualMemory.c
  Ia32/DxeLoadFunc.c
  Ia32/IdtVectorAsm.nasm

[Sources.X64]
  X64/VirtualMemory.h
  X64/VirtualMemory.c
  X64/DxeLoadFunc.c

[Sources.EBC]
  Ebc/DxeLoadFunc.c

[Sources.ARM, Sources.AARCH64]
  Arm/DxeLoadFunc.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[Packages.ARM, Packages.AARCH64]
  ArmPkg/ArmPkg.dec

[LibraryClasses]
  PcdLib
  MemoryAllocationLib
  BaseMemoryLib
  ExtractGuidedSectionLib
  UefiDecompressLib
  ReportStatusCodeLib
  PeiServicesLib
  HobLib
  BaseLib
  PeimEntryPoint
  DebugLib
  DebugAgentLib
  PeiServicesTablePointerLib
  PerformanceLib

[LibraryClasses.ARM, LibraryClasses.AARCH64]
  ArmMmuLib

[Ppis]
  gEfiDxeIplPpiGuid                 ## PRODUCES
  gEfiPeiDecompressPpiGuid          ## PRODUCES
  gEfiEndOfPeiSignalPpiGuid         ## SOMETIMES_PRODUCES # Not produced on S3 boot path
  gEfiPeiReadOnlyVariable2PpiGuid   ## SOMETIMES_CONSUMES
  gEfiPeiLoadFilePpiGuid            ## SOMETIMES_CONSUMES
  gEfiPeiS3Resume2PpiGuid           ## SOMETIMES_CONSUMES # Consumed on S3 boot path
  gEfiPeiRecoveryModulePpiGuid      ## SOMETIMES_CONSUMES # Consumed on recovery boot path
  ## SOMETIMES_CONSUMES
  ## UNDEFINED # HOB
  gEfiVectorHandoffInfoPpiGuid
  gEfiPeiMemoryDiscoveredPpiGuid    ## SOMETIMES_CONSUMES

[Guids]
  ## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation"
  ## SOMETIMES_PRODUCES ## HOB
  gEfiMemoryTypeInformationGuid

[FeaturePcd.IA32]
  gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode      ## CONSUMES

[FeaturePcd.X64]
  gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables       ## CONSUMES

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress ## CONSUMES

[Pcd.IA32,Pcd.X64]
  gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable                      ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPropertyMask               ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard                       ## CONSUMES

[Pcd.IA32,Pcd.X64,Pcd.ARM,Pcd.AARCH64]
  gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack               ## SOMETIMES_CONSUMES

[Depex]
  gEfiPeiLoadFilePpiGuid AND gEfiPeiMasterBootModePpiGuid

#
# [BootMode]
#  S3_RESUME                        ## SOMETIMES_CONSUMES
#  RECOVERY_FULL                    ## SOMETIMES_CONSUMES
#
#
# [Hob]
# MEMORY_ALLOCATION                 ## SOMETIMES_PRODUCES # MEMORY_ALLOCATION_MODULE for DxeCore
# MEMORY_ALLOCATION                 ## SOMETIMES_PRODUCES # New Stack HoB
# MEMORY_ALLOCATION                 ## SOMETIMES_PRODUCES # Old Stack HOB
#
# [Hob.IPF]
# MEMORY_ALLOCATION                 ## SOMETIMES_PRODUCES # MEMORY_ALLOCATION_BSP_STORE
#

[UserExtensions.TianoCore."ExtraFiles"]
  DxeIplExtra.uni
