## @file
#  Capsule Runtime Driver produces two UEFI capsule runtime services: (UpdateCapsule, QueryCapsuleCapabilities).
#
#  It installs the Capsule Architectural Protocol defined in PI1.0a to signify
#  the capsule runtime services are ready.
#
#  Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
#  Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
#  Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR>
#  SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = CapsuleRuntimeDxe
  MODULE_UNI_FILE                = CapsuleRuntimeDxe.uni
  FILE_GUID                      = 42857F0A-13F2-4B21-8A23-53D3F714B840
  MODULE_TYPE                    = DXE_RUNTIME_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = CapsuleServiceInitialize

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 EBC AARCH64 RISCV64 LOONGARCH64
#

[Sources]
  CapsuleService.c
  CapsuleService.h

[Sources.Ia32, Sources.EBC, Sources.AARCH64, Sources.RISCV64, Sources.LOONGARCH64]
  SaveLongModeContext.c

[Sources.Ia32, Sources.X64, Sources.AARCH64, Sources.RISCV64, Sources.LOONGARCH64]
  CapsuleCache.c

[Sources.Ia32, Sources.X64, Sources.EBC, Sources.RISCV64, Sources.LOONGARCH64]
  CapsuleReset.c

[Sources.AARCH64]
  Arm/CapsuleReset.c

[Sources.EBC]
  CapsuleCacheNull.c

[Sources.X64]
  X64/SaveLongModeContext.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  PcdLib
  DebugLib
  UefiRuntimeServicesTableLib
  UefiDriverEntryPoint
  CapsuleLib
  UefiRuntimeLib
  BaseLib
  PrintLib
  BaseMemoryLib
  CacheMaintenanceLib

[LibraryClasses.X64]
  UefiLib
  BaseMemoryLib

[Guids]
  ## SOMETIMES_PRODUCES   ## Variable:L"CapsuleUpdateData" # (Process across reset capsule image) for capsule updated data
  ## SOMETIMES_PRODUCES   ## Variable:L"CapsuleLongModeBuffer" # The long mode buffer used by IA32 Capsule PEIM to call X64 CapsuleCoalesce code to handle >4GB capsule blocks
  gEfiCapsuleVendorGuid
  gEfiFmpCapsuleGuid                            ## SOMETIMES_CONSUMES   ## GUID # FMP capsule GUID

[Protocols]
  gEfiCapsuleArchProtocolGuid                   ## PRODUCES

[Protocols.X64]
  ## UNDEFINED ## NOTIFY
  ## SOMETIMES_CONSUMES
  gEdkiiVariableLockProtocolGuid

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset        ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdSupportProcessCapsuleAtRuntime   ## CONSUMES

[FeaturePcd.X64]
  gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode      ## CONSUMES

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule   ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule      ## SOMETIMES_CONSUMES # Populate Image requires reset support.
  gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleInRamSupport         ## CONSUMES

[Pcd.X64]
  gEfiMdeModulePkgTokenSpaceGuid.PcdCapsulePeiLongModeStackSize   ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable                ## SOMETIMES_CONSUMES

[Depex]
  gEfiVariableWriteArchProtocolGuid             # Depends on variable write functionality to produce capsule data variable

# [Hob.X64]
# UNDEFINED                 ## SOMETIMES_CONSUMES # CPU

[UserExtensions.TianoCore."ExtraFiles"]
  CapsuleRuntimeDxeExtra.uni
