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.
https://github.com/microsoft/mu_tiano_plus/commit/
a2c7da88d3a73dbe9b6b75952d6866179c905f28#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>
# @Prompt Firmware Device Watchdog Time in Seconds.\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressWatchdogTimeInSeconds|0x0|UINT8|0x4000000D\r
\r
+ ## The Image Type ID to use if one is not provided by FmpDeviceLib. If this\r
+ # PCD is not a valid GUID value, then gEfiCallerIdGuid is used.\r
+ # @Prompt Firmware Device Image Type ID\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{0}|VOID*|0x40000010\r
+\r
[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]\r
## One or more PKCS7 certificates used to verify a firmware device capsule\r
# update image. Encoded using the Variable-Length Opaque Data format of RFC\r
[LibraryClasses.ARM]\r
ArmSoftFloatLib|ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf\r
\r
+[PcdsPatchableInModule]\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{0}\r
+\r
[Components]\r
#\r
# Libraries\r
# FILE_GUID is used as ESRT GUID\r
#\r
FILE_GUID = $(SYSTEM_FMP_ESRT_GUID)\r
+ <PcdsFixedAtBuild>\r
+ #\r
+ # Unicode name string that is used to populate FMP Image Descriptor for this capsule update module\r
+ #\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageIdName|L"Sample Firmware Device"\r
+ #\r
+ # Certificates used to authenticate capsule update image\r
+ #\r
+ !include BaseTools/Source/Python/Pkcs7Sign/TestRoot.cer.gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr.inc\r
+ <PcdsPatchableInModule>\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{GUID("$(SYSTEM_FMP_ESRT_GUID)")}\r
<LibraryClasses>\r
#\r
# Use CapsuleUpdatePolicyLib that calls the Capsule Update Policy Protocol.\r
# FILE_GUID is used as ESRT GUID\r
#\r
FILE_GUID = $(DEVICE_FMP_ESRT_GUID)\r
+ <PcdsFixedAtBuild>\r
+ #\r
+ # Unicode name string that is used to populate FMP Image Descriptor for this capsule update module\r
+ #\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageIdName|L"Sample Firmware Device"\r
+ #\r
+ # Certificates used to authenticate capsule update image\r
+ #\r
+ !include BaseTools/Source/Python/Pkcs7Sign/TestRoot.cer.gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr.inc\r
+ <PcdsPatchableInModule>\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{GUID("$(DEVICE_FMP_ESRT_GUID)")}\r
<LibraryClasses>\r
#\r
# Directly use a platform specific CapsuleUpdatePolicyLib instance.\r
// Capsules. The behavior of the Firmware Management Protocol instance is\r
// customized using libraries and PCDs.\r
//\r
-// Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>\r
+// Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>\r
//\r
// SPDX-License-Identifier: BSD-2-Clause-Patent\r
//\r
"value of 0 disables the watchdog timer. The default value is 0 (watchdog"\r
"disabled)."\r
\r
+#string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDeviceImageTypeIdGuid_PROMPT #language en-US "Firmware Device Image Type ID."\r
+#string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDeviceImageTypeIdGuid_HELP #language en-US "The Image Type ID to use if one is not provided by FmpDeviceLib. If this"\r
+ "PCD is not a valid GUID value, then gEfiCallerIdGuid is used."\r
+\r
#string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDevicePkcs7CertBufferXdr_PROMPT #language en-US "One or more XDR encoded PKCS7 certificates used to verify firmware device capsule update images"\r
#string STR_gFmpDevicePkgTokenSpaceGuid_PcdFmpDevicePkcs7CertBufferXdr_HELP #language en-US "Provides one or more PKCS7 certificates used to verify a firmware device"\r
"capsule update image. This PCD is encoded using the Variable-Length Opaque"\r
/**\r
Returns a pointer to the ImageTypeId GUID value. An attempt is made to get\r
the GUID value from the FmpDeviceLib. If the FmpDeviceLib does not provide\r
- a GUID value, then gEfiCallerIdGuid is returned.\r
+ a GUID value, then PcdFmpDeviceImageTypeIdGuid is used. If the size of\r
+ PcdFmpDeviceImageTypeIdGuid is not the size of EFI_GUID, then gEfiCallerIdGuid\r
+ is returned.\r
\r
@retval The ImageTypeId GUID\r
\r
{\r
EFI_STATUS Status;\r
EFI_GUID *FmpDeviceLibGuid;\r
+ UINTN ImageTypeIdGuidSize;\r
\r
FmpDeviceLibGuid = NULL;\r
Status = FmpDeviceGetImageTypeIdGuidPtr (&FmpDeviceLibGuid);\r
if (Status != EFI_UNSUPPORTED) {\r
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): FmpDeviceLib GetImageTypeIdGuidPtr() returned invalid error %r\n", mImageIdName, Status));\r
}\r
- return &gEfiCallerIdGuid;\r
- }\r
- if (FmpDeviceLibGuid == NULL) {\r
+ } else if (FmpDeviceLibGuid == NULL) {\r
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): FmpDeviceLib GetImageTypeIdGuidPtr() returned invalid GUID\n", mImageIdName));\r
- return &gEfiCallerIdGuid;\r
+ Status = EFI_NOT_FOUND;\r
+ }\r
+ if (EFI_ERROR (Status)) {\r
+ ImageTypeIdGuidSize = PcdGetSize (PcdFmpDeviceImageTypeIdGuid);\r
+ if (ImageTypeIdGuidSize == sizeof (EFI_GUID)) {\r
+ FmpDeviceLibGuid = (EFI_GUID *)PcdGetPtr (PcdFmpDeviceImageTypeIdGuid);\r
+ } else {\r
+ DEBUG ((DEBUG_INFO, "FmpDxe(%s): Fall back to ImageTypeIdGuid of gEfiCallerIdGuid\n", mImageIdName));\r
+ FmpDeviceLibGuid = &gEfiCallerIdGuid;\r
+ }\r
}\r
return FmpDeviceLibGuid;\r
}\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor ## CONSUMES\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr ## CONSUMES\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest ## CONSUMES\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## SOMETIMES_PRODUCES\r
\r
[Depex]\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor ## CONSUMES\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr ## CONSUMES\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest ## CONSUMES\r
+ gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## SOMETIMES_PRODUCES\r
\r
[Depex]\r