## @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, Intel Corporation. All rights reserved.<BR>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
##

[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

[LibraryClasses]
  ##  @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|Include/Library/FmpPayloadHeaderLib.h

  ##  @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

[Guids]
  ## Firmware Management Protocol Device Package Token Space GUID
  gFmpDevicePkgTokenSpaceGuid = { 0x40b2d964, 0xfe11, 0x40dc, { 0x82, 0x83, 0x2e, 0xfb, 0xda, 0x29, 0x53, 0x56 } }

[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

[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
