mirror of
				https://gitlab.com/qemu-project/edk2.git
				synced 2025-10-30 07:56:39 +08:00 
			
		
		
		
	FmpDevicePkg/FmpDxe: Add PcdFmpDeviceImageTypeIdGuid
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1525
Add PCD PcdFmpDeviceImageTypeIdGuid that contains an Image
Type ID GUID value that is used if one is not provided by
FmpDeviceLib. If this PCD is not a valid GUID value,  then
gEfiCallerIdGuid is used.
Update FmpDevicePkg DSC to use PcdFmpDeviceImageTypeIdGuid
as a PatchableInModule PCD.
This content is based on the following commit.
a2c7da88d3 (diff-025d4889f6d3a482b49638a25e432d6d)
Cc: Sean Brogan <sean.brogan@microsoft.com>
Cc: Michael Turner <Michael.Turner@microsoft.com>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: Eric Jin <eric.jin@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
			
			
This commit is contained in:
		| @ -96,6 +96,11 @@ | ||||
|   # @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 | ||||
|  | ||||
| @ -66,6 +66,9 @@ | ||||
| [LibraryClasses.ARM] | ||||
|   ArmSoftFloatLib|ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf | ||||
|  | ||||
| [PcdsPatchableInModule] | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{0} | ||||
|  | ||||
| [Components] | ||||
|   # | ||||
|   # Libraries | ||||
| @ -89,6 +92,17 @@ | ||||
|       # FILE_GUID is used as ESRT GUID | ||||
|       # | ||||
|       FILE_GUID = $(SYSTEM_FMP_ESRT_GUID) | ||||
|     <PcdsFixedAtBuild> | ||||
|       # | ||||
|       # Unicode name string that is used to populate FMP Image Descriptor for this capsule update module | ||||
|       # | ||||
|       gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageIdName|L"Sample Firmware Device" | ||||
|       # | ||||
|       # Certificates used to authenticate capsule update image | ||||
|       # | ||||
|       !include BaseTools/Source/Python/Pkcs7Sign/TestRoot.cer.gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr.inc | ||||
|     <PcdsPatchableInModule> | ||||
|       gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{GUID("$(SYSTEM_FMP_ESRT_GUID)")} | ||||
|     <LibraryClasses> | ||||
|       # | ||||
|       # Use CapsuleUpdatePolicyLib that calls the Capsule Update Policy Protocol. | ||||
| @ -104,6 +118,17 @@ | ||||
|       # FILE_GUID is used as ESRT GUID | ||||
|       # | ||||
|       FILE_GUID = $(DEVICE_FMP_ESRT_GUID) | ||||
|     <PcdsFixedAtBuild> | ||||
|       # | ||||
|       # Unicode name string that is used to populate FMP Image Descriptor for this capsule update module | ||||
|       # | ||||
|       gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageIdName|L"Sample Firmware Device" | ||||
|       # | ||||
|       # Certificates used to authenticate capsule update image | ||||
|       # | ||||
|       !include BaseTools/Source/Python/Pkcs7Sign/TestRoot.cer.gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr.inc | ||||
|     <PcdsPatchableInModule> | ||||
|       gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{GUID("$(DEVICE_FMP_ESRT_GUID)")} | ||||
|     <LibraryClasses> | ||||
|       # | ||||
|       # Directly use a platform specific CapsuleUpdatePolicyLib instance. | ||||
|  | ||||
| @ -6,7 +6,7 @@ | ||||
| // Capsules.  The behavior of the Firmware Management Protocol instance is | ||||
| // customized using libraries and PCDs. | ||||
| // | ||||
| // Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> | ||||
| // Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR> | ||||
| // | ||||
| // SPDX-License-Identifier: BSD-2-Clause-Patent | ||||
| // | ||||
| @ -53,6 +53,10 @@ | ||||
|                                                                                                           "value of 0 disables the watchdog timer.  The default value is 0 (watchdog" | ||||
|                                                                                                           "disabled)." | ||||
|  | ||||
| #string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDeviceImageTypeIdGuid_PROMPT  #language en-US "Firmware Device Image Type ID." | ||||
| #string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDeviceImageTypeIdGuid_HELP    #language en-US "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." | ||||
|  | ||||
| #string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDevicePkcs7CertBufferXdr_PROMPT  #language en-US "One or more XDR encoded PKCS7 certificates used to verify firmware device capsule update images" | ||||
| #string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDevicePkcs7CertBufferXdr_HELP    #language en-US "Provides one or more PKCS7 certificates used to verify a firmware device" | ||||
|                                                                                                "capsule update image.  This PCD is encoded using the Variable-Length Opaque" | ||||
|  | ||||
| @ -147,7 +147,9 @@ FmpDxeProgress ( | ||||
| /** | ||||
|   Returns a pointer to the ImageTypeId GUID value.  An attempt is made to get | ||||
|   the GUID value from the FmpDeviceLib. If the FmpDeviceLib does not provide | ||||
|   a GUID value, then gEfiCallerIdGuid is returned. | ||||
|   a GUID value, then PcdFmpDeviceImageTypeIdGuid is used.  If the size of | ||||
|   PcdFmpDeviceImageTypeIdGuid is not the size of EFI_GUID, then gEfiCallerIdGuid | ||||
|   is returned. | ||||
|  | ||||
|   @retval  The ImageTypeId GUID | ||||
|  | ||||
| @ -159,6 +161,7 @@ GetImageTypeIdGuid ( | ||||
| { | ||||
|   EFI_STATUS  Status; | ||||
|   EFI_GUID    *FmpDeviceLibGuid; | ||||
|   UINTN       ImageTypeIdGuidSize; | ||||
|  | ||||
|   FmpDeviceLibGuid = NULL; | ||||
|   Status = FmpDeviceGetImageTypeIdGuidPtr (&FmpDeviceLibGuid); | ||||
| @ -166,11 +169,18 @@ GetImageTypeIdGuid ( | ||||
|     if (Status != EFI_UNSUPPORTED) { | ||||
|       DEBUG ((DEBUG_ERROR, "FmpDxe(%s): FmpDeviceLib GetImageTypeIdGuidPtr() returned invalid error %r\n", mImageIdName, Status)); | ||||
|     } | ||||
|     return &gEfiCallerIdGuid; | ||||
|   } | ||||
|   if (FmpDeviceLibGuid == NULL) { | ||||
|   } else if (FmpDeviceLibGuid == NULL) { | ||||
|     DEBUG ((DEBUG_ERROR, "FmpDxe(%s): FmpDeviceLib GetImageTypeIdGuidPtr() returned invalid GUID\n", mImageIdName)); | ||||
|     return &gEfiCallerIdGuid; | ||||
|     Status = EFI_NOT_FOUND; | ||||
|   } | ||||
|   if (EFI_ERROR (Status)) { | ||||
|     ImageTypeIdGuidSize = PcdGetSize (PcdFmpDeviceImageTypeIdGuid); | ||||
|     if (ImageTypeIdGuidSize == sizeof (EFI_GUID)) { | ||||
|       FmpDeviceLibGuid = (EFI_GUID *)PcdGetPtr (PcdFmpDeviceImageTypeIdGuid); | ||||
|     } else { | ||||
|       DEBUG ((DEBUG_INFO, "FmpDxe(%s): Fall back to ImageTypeIdGuid of gEfiCallerIdGuid\n", mImageIdName)); | ||||
|       FmpDeviceLibGuid = &gEfiCallerIdGuid; | ||||
|     } | ||||
|   } | ||||
|   return FmpDeviceLibGuid; | ||||
| } | ||||
|  | ||||
| @ -68,6 +68,7 @@ | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor                    ## CONSUMES | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr               ## CONSUMES | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest              ## CONSUMES | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid                  ## CONSUMES | ||||
|   gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed                            ## SOMETIMES_PRODUCES | ||||
|  | ||||
| [Depex] | ||||
|  | ||||
| @ -68,6 +68,7 @@ | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor                    ## CONSUMES | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr               ## CONSUMES | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest              ## CONSUMES | ||||
|   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid                  ## CONSUMES | ||||
|   gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed                            ## SOMETIMES_PRODUCES | ||||
|  | ||||
| [Depex] | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Eric Jin
					Eric Jin