## @file
# Fault Tolerant Write Dxe Driver.
#
# This driver installs Fault Tolerant Write (FTW) protocol,
# which provides fault tolerant write capability for block devices.
# Its implementation depends on the full functionality FVB protocol that support read, write/erase flash access.
#
# 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                      = FaultTolerantWriteDxe
  MODULE_UNI_FILE                = FaultTolerantWriteDxe.uni
  FILE_GUID                      = FE5CEA76-4F72-49e8-986F-2CD899DFFE5D
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = FaultTolerantWriteInitialize

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  FtwMisc.c
  UpdateWorkingBlock.c
  FaultTolerantWrite.c
  FaultTolerantWriteDxe.c
  FaultTolerantWrite.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  MemoryAllocationLib
  BaseMemoryLib
  UefiDriverEntryPoint
  DebugLib
  UefiLib
  PcdLib
  ReportStatusCodeLib

[Guids]
  #
  # Signature in EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER
  #
  ## CONSUMES           ## GUID
  ## PRODUCES           ## GUID
  gEdkiiWorkingBlockSignatureGuid

[Protocols]
  gEfiSwapAddressRangeProtocolGuid | gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable ## SOMETIMES_CONSUMES
  ## NOTIFY
  ## CONSUMES
  gEfiFirmwareVolumeBlockProtocolGuid
  gEfiFaultTolerantWriteProtocolGuid            ## PRODUCES

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable    ## CONSUMES

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase    ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64  ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase      ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize      ## CONSUMES

#
# gBS->CalculateCrc32() is consumed in EntryPoint.
# PI spec said: When the DXE Foundation is notified that the EFI_RUNTIME_ARCH_PROTOCOL
# has been installed, then the Boot Service CalculateCrc32() is available.
# So add gEfiRuntimeArchProtocolGuid Depex here.
#
[Depex]
  gEfiFirmwareVolumeBlockProtocolGuid AND gEfiRuntimeArchProtocolGuid

[UserExtensions.TianoCore."ExtraFiles"]
  FaultTolerantWriteDxeExtra.uni
