## @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 - 2018, Intel Corporation. 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                      = 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 ARM AARCH64
#

[Sources]
  CapsuleService.c
  CapsuleService.h

[Sources.Ia32, Sources.EBC, Sources.ARM, Sources.AARCH64]
  SaveLongModeContext.c
  CapsuleReset.c

[Sources.X64]
  X64/SaveLongModeContext.c
  CapsuleReset.c

[Sources.ARM, Sources.AARCH64]
  SaveLongModeContext.c
  Arm/CapsuleReset.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  PcdLib
  DebugLib
  UefiRuntimeServicesTableLib
  UefiDriverEntryPoint
  CapsuleLib
  UefiRuntimeLib
  BaseLib
  PrintLib
  BaseMemoryLib

[LibraryClasses.X64]
  UefiLib
  BaseMemoryLib

[LibraryClasses.ARM, LibraryClasses.AARCH64]
  CacheMaintenanceLib

[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

[FeaturePcd.X64]
  gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode      ## CONSUMES

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule   ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule      ## SOMETIMES_CONSUMES # Populate Image requires reset support.

[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
