REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2696 This library provides firmware device specific services to support saving dependency to firmware device and getting dependency from firmware device. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Sean Brogan <sean.brogan@microsoft.com> Signed-off-by: Wei6 Xu <wei6.xu@intel.com> Reviewed-by: Sean Brogan <sean.brogan@microsoft.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			147 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ## @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
 |