## @file
# This package provides EDKII capsule related support.
#
# Copyright (c) 2016, 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 that 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]
  DEC_SPECIFICATION              = 0x00010005
  PACKAGE_NAME                   = SignedCapsulePkg
  PACKAGE_GUID                   = 75AA5D82-7BC4-44A9-82FB-0820EBC79BED
  PACKAGE_VERSION                = 0.1

[Includes]
  Include

[LibraryClasses]
  ## @libraryclass  Provides services for EDKII system FMP capsule.
  #
  EdkiiSystemCapsuleLib|Include/Library/EdkiiSystemCapsuleLib.h

  ## @libraryclass  Provides services to parse the INI configuration file.
  #
  IniParsingLib|Include/Library/IniParsingLib.h

  ## @libraryclass  Provides services to access flash device.
  #
  PlatformFlashAccessLib|Include/Library/PlatformFlashAccessLib.h

[Guids]
  gEfiSignedCapsulePkgTokenSpaceGuid      = { 0xe1eb612f, 0x1c6c, 0x485d, { 0x9d, 0x6, 0x65, 0x8, 0x44, 0x88, 0x15, 0x69 }}

  ## Include/Guid/EdkiiSystemFmpCapsule.h
  gEdkiiSystemFirmwareImageDescriptorFileGuid = {0x90b2b846, 0xca6d, 0x4d6e, {0xa8, 0xd3, 0xc1, 0x40, 0xa8, 0xe1, 0x10, 0xac}}
  gEdkiiSystemFmpCapsuleConfigFileGuid        = {0x812136d3, 0x4d3a, 0x433a, {0x94, 0x18, 0x29, 0xbb, 0x9b, 0xf7, 0x8f, 0x6e}}
  gEdkiiSystemFmpCapsuleDriverFvFileGuid      = {0xce57b167, 0xb0e4, 0x41e8, {0xa8, 0x97, 0x5f, 0x4f, 0xeb, 0x78, 0x1d, 0x40}}

[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
  ## This is the GUID of the FFS which contains the Rsa2048Sha256TestPublicKeyFile as a RAW section.
  # @Prompt GUID of the FFS which contains the Rsa2048Sha256TestPublicKeyFile.
  gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid|{0x04, 0xe1, 0xfe, 0xc4, 0x57, 0x66, 0x36, 0x49, 0xa6, 0x11, 0x13, 0x8d, 0xbc, 0x2a, 0x76, 0xad}|VOID*|0xA0010001

  ## This is the GUID of the FFS which contains the Pkcs7TestPublicKeyFile as a RAW section.
  # @Prompt GUID of the FFS which contains the Pkcs7TestPublicKeyFile.
  gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiPkcs7TestPublicKeyFileGuid|{0xba, 0xf5, 0x93, 0xf0, 0x37, 0x6f, 0x16, 0x48, 0x9e, 0x52, 0x91, 0xbe, 0xa0, 0xf7, 0xe0, 0xb8}|VOID*|0xA0010002

[PcdsDynamicEx]
  ## This dynamic PCD holds the EDKII system firmware image descriptor.
  #  This information can be used for version check in EDKII system FMP capsule.
  #  Only if the new EdkiiSystemFrimwareImageDescriptor.Version is not less than
  #  the current PcdEdkiiSystemFirmwareImageDescriptor.LowestSupportedVersion,
  #  the EDKII system FmpCapsule will be processed.
  #  The data structure of this PCD is EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR,
  #  SignedCapsulePkg/Include/Guid/EdkiiSystemFmpCapsule.h.
  #  It must be in [PcdsDynamicEx], because the EDKII system firmware update module may
  #  consume the PCD produced in current system firmware.
  # @Prompt EDKII system firmware image descriptor.
  gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor|{0x0}|VOID*|0x00000037

  ## This dynamic PCD hold the GUID of a firmware FFS which includes EDKII
  #  system firmware image.
  #  An EDKII system firmware udpate module need consume this PCD to extract
  #  the EDKII system firmware from the capsule image.
  #  It must be in [PcdsDynamicEx], because the EDKII system firmware update module may
  #  consume the PCD produced in current system firmware image.
  # @Prompt EDKII system firmware image FFS GUID.
  gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareFileGuid|{0x0}|VOID*|0x00001010

