## @file
# Firmware Management Protocol Device Package
#
# This package provides an implementation of a Firmware Management Protocol
# instance that supports the update of firmware storage devices using UEFI
# Capsules.  The behavior of the Firmware Management Protocol instance is
# customized using libraries and PCDs.
#
# Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>
# Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  DEC_SPECIFICATION = 0x00010005
  PACKAGE_NAME      = FmpDevicePkg
  PACKAGE_UNI_FILE  = FmpDevicePkg.uni
  PACKAGE_GUID      = 080b5b4f-27c6-11e8-84d1-f8597177a00a
  PACKAGE_VERSION   = 0.1

[Includes]
  Include

[Includes.Common.Private]
  PrivateInclude

[LibraryClasses]
  ##  @libraryclass  Provides platform policy services used during a capsule
  #                  update.
  CapsuleUpdatePolicyLib|Include/Library/CapsuleUpdatePolicyLib.h

  ##  @libraryclass  Provides firmware device specific services to support
  #                  updates of a firmware image stored in a firmware device.
  FmpDeviceLib|Include/Library/FmpDeviceLib.h

  ##  @libraryclass  Provides generic services to support capsule dependency
  #                  expression evaluation.
  FmpDependencyLib|Include/Library/FmpDependencyLib.h

  ##  @libraryclass  Provides platform specific services to support dependency
  #                  check during update of firmware image.
  FmpDependencyCheckLib|Include/Library/FmpDependencyCheckLib.h

  ##  @libraryclass  Provides firmware device specific services to support
  #                  saving dependency to firmware device and getting dependency
  #                  from firmware device.
  FmpDependencyDeviceLib|Include/Library/FmpDependencyDeviceLib.h

[LibraryClasses.Common.Private]
  ##  @libraryclass  Provides services to retrieve values from a capsule's FMP
  #                  Payload Header.  The structure is not included in the
  #                  library class.  Instead, services are provided to retrieve
  #                  information from the FMP Payload Header.  If information is
  #                  added to the FMP Payload Header, then new services may be
  #                  added to this library class to retrieve the new information.
  FmpPayloadHeaderLib|PrivateInclude/Library/FmpPayloadHeaderLib.h

[Guids]
  ## Firmware Management Protocol Device Package Token Space GUID
  gFmpDevicePkgTokenSpaceGuid = { 0x40b2d964, 0xfe11, 0x40dc, { 0x82, 0x83, 0x2e, 0xfb, 0xda, 0x29, 0x53, 0x56 } }

[Protocols.Common.Private]
  ## Capsule Update Policy Protocol
  gEdkiiCapsuleUpdatePolicyProtocolGuid = { 0x487784c5, 0x6299, 0x4ba6, { 0xb0, 0x96, 0x5c, 0xc5, 0x27, 0x7c, 0xf7, 0x57 } }

[PcdsFeatureFlag]
  ## Indicates if the Firmware Management Protocol supports access to
  #  to a firmware storage device.  If set to FALSE, then only GetImageInfo()
  #  is supported.  This is used by FMP drivers that require the smallest
  #  possible Firmware Management Protocol implementation that supports
  #  advertising the updatable firmware device in the ESRT.<BR>
  #    TRUE  - All Firmware Management Protocol services supported.<BR>
  #    FALSE - Firmware Management Protocol returns EFI_UNSUPPORTED for
  #            all services except GetImageInfo().<BR>
  # @Prompt Firmware Device Storage Access Enabled.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceStorageAccessEnable|TRUE|BOOLEAN|0x40000011

[PcdsFixedAtBuild]
  ## The SHA-256 hash of a PKCS7 test key that is used to detect if a test key
  #  is being used to authenticate capsules.  Test key detection is disabled by
  #  setting the value to {0}.
  # @Prompt SHA-256 hash of PKCS7 test key.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest|{0x2E, 0x97, 0x89, 0x1B, 0xDB, 0xE7, 0x08, 0xAA,  0x8C, 0xB2, 0x8F, 0xAD, 0x20, 0xA9, 0x83, 0xC7,  0x84, 0x7D, 0x4F, 0xEE, 0x48, 0x25, 0xE9, 0x4D,  0x39, 0xFA, 0x34, 0x9A, 0xB8, 0xB1, 0xC4, 0x26}|VOID*|0x40000009

[PcdsFixedAtBuild, PcdsPatchableInModule]
  ## The color of the progress bar during a firmware update.  Each firmware
  #  device can set its own color.  The default color is white.<BR><BR>
  #  Bits  7..0  - Red<BR>
  #  Bits 15..8  - Green<BR>
  #  Bits 23..16 - Blue<BR>
  # @Prompt Firmware Device Progress Bar Color.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor|0x00FFFFFF|UINT32|0x40000004

  ## The Null-terminated Unicode string used to fill in the ImageIdName field of
  #  the EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the
  #  GetImageInfo() service of the Firmware Management Protocol for the firmware
  #  device.  An ImageIdName string must be provided for each firmware device.
  #  The default value is an empty string.
  # @Prompt Firmware Device ImageIdName string.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageIdName|L""|VOID*|0x40000007

  ## The build time value used to fill in the LowestSupportedVersion field of
  #  the EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the
  #  GetImageInfo() service of the Firmware Management Protocol.  This value is
  #  only used if the firmware device does not provide a method to report the
  #  lowest supported version value from the current firmware image and the
  #  UEFI variable used to provide the lowest supported version value does not
  #  exist.  The default value is 0.
  # @Prompt Build Time Firmware Device Lowest Support Version.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceBuildTimeLowestSupportedVersion|0x0|UINT32|0x4000000C

  ## The time in seconds to arm a watchdog timer during the update of a firmware
  #  device.  The watchdog is re-armed each time the FmpDeviceLib calls the
  #  Progress() function passed into FmpDeviceSetImage() function.  The
  #  FmpDeviceLib calls Progress() to update the percent completion of a
  #  firmware update.  If the watchdog timer expires, the system reboots.  A
  #  value of 0 disables the watchdog timer.  The default value is 0 (watchdog
  #  disabled).
  # @Prompt Firmware Device Watchdog Time in Seconds.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressWatchdogTimeInSeconds|0x0|UINT8|0x4000000D

  ## The Image Type ID to use if one is not provided by FmpDeviceLib. If this
  #  PCD is not a valid GUID value, then gEfiCallerIdGuid is used.
  # @Prompt Firmware Device Image Type ID
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{0}|VOID*|0x40000010

[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
  ## One or more PKCS7 certificates used to verify a firmware device capsule
  #  update image.  Encoded using the Variable-Length Opaque Data format of RFC
  #  4506 External Data Representation Standard (XDR).  The default value is
  #  empty with 0 certificates.
  # @Prompt One or more XDR encoded PKCS7 certificates used to verify firmware device capsule update images.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr|{0x0}|VOID*|0x4000000E

  ## An event GUID that locks the firmware device when the event is signaled.
  #  If this PCD is not a valid GUID value, then the firmware device is locked
  #  when gEfiEndOfDxeEventGroupGuid (End of DXE Phase) is signaled.  The
  #  default value is empty, so by default the firmware device is locked at the
  #  end of the DXE phase.
  # @Prompt Firmware Device Lock Event GUID.
  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceLockEventGuid|{0}|VOID*|0x4000000F

[UserExtensions.TianoCore."ExtraFiles"]
  FmpDevicePkgExtra.uni
