## @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 - 2019, Intel Corporation. All rights reserved.<BR>
#  Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
#  Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
#
#  SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[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 RISCV64
#

[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

[Sources.RISCV64]
  RiscV64/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
  gEdkiiPeiBootInCapsuleOnDiskModePpiGuid  ## SOMETIMES_CONSUMES
  gEdkiiPeiCapsuleOnDiskPpiGuid            ## SOMETIMES_CONSUMES # Consumed on firmware update boot path

[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
  gEfiMdeModulePkgTokenSpaceGuid.PcdUse5LevelPageTable                  ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase                            ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize                            ## CONSUMES

[Pcd.IA32,Pcd.X64,Pcd.ARM,Pcd.AARCH64]
  gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack               ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy       ## 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