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:
Eric Jin 2019-07-26 15:40:37 +08:00 committed by Liming Gao
parent e0961677d1
commit 278c3d48a7
6 changed files with 52 additions and 6 deletions

View File

@ -96,6 +96,11 @@
# @Prompt Firmware Device Watchdog Time in Seconds. # @Prompt Firmware Device Watchdog Time in Seconds.
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressWatchdogTimeInSeconds|0x0|UINT8|0x4000000D 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] [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
## One or more PKCS7 certificates used to verify a firmware device capsule ## One or more PKCS7 certificates used to verify a firmware device capsule
# update image. Encoded using the Variable-Length Opaque Data format of RFC # update image. Encoded using the Variable-Length Opaque Data format of RFC

View File

@ -66,6 +66,9 @@
[LibraryClasses.ARM] [LibraryClasses.ARM]
ArmSoftFloatLib|ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf ArmSoftFloatLib|ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf
[PcdsPatchableInModule]
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{0}
[Components] [Components]
# #
# Libraries # Libraries
@ -89,6 +92,17 @@
# FILE_GUID is used as ESRT GUID # FILE_GUID is used as ESRT GUID
# #
FILE_GUID = $(SYSTEM_FMP_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> <LibraryClasses>
# #
# Use CapsuleUpdatePolicyLib that calls the Capsule Update Policy Protocol. # Use CapsuleUpdatePolicyLib that calls the Capsule Update Policy Protocol.
@ -104,6 +118,17 @@
# FILE_GUID is used as ESRT GUID # FILE_GUID is used as ESRT GUID
# #
FILE_GUID = $(DEVICE_FMP_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> <LibraryClasses>
# #
# Directly use a platform specific CapsuleUpdatePolicyLib instance. # Directly use a platform specific CapsuleUpdatePolicyLib instance.

View File

@ -6,7 +6,7 @@
// Capsules. The behavior of the Firmware Management Protocol instance is // Capsules. The behavior of the Firmware Management Protocol instance is
// customized using libraries and PCDs. // 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 // SPDX-License-Identifier: BSD-2-Clause-Patent
// //
@ -53,6 +53,10 @@
"value of 0 disables the watchdog timer. The default value is 0 (watchdog" "value of 0 disables the watchdog timer. The default value is 0 (watchdog"
"disabled)." "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_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" #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" "capsule update image. This PCD is encoded using the Variable-Length Opaque"

View File

@ -147,7 +147,9 @@ FmpDxeProgress (
/** /**
Returns a pointer to the ImageTypeId GUID value. An attempt is made to get 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 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 @retval The ImageTypeId GUID
@ -159,6 +161,7 @@ GetImageTypeIdGuid (
{ {
EFI_STATUS Status; EFI_STATUS Status;
EFI_GUID *FmpDeviceLibGuid; EFI_GUID *FmpDeviceLibGuid;
UINTN ImageTypeIdGuidSize;
FmpDeviceLibGuid = NULL; FmpDeviceLibGuid = NULL;
Status = FmpDeviceGetImageTypeIdGuidPtr (&FmpDeviceLibGuid); Status = FmpDeviceGetImageTypeIdGuidPtr (&FmpDeviceLibGuid);
@ -166,11 +169,18 @@ GetImageTypeIdGuid (
if (Status != EFI_UNSUPPORTED) { if (Status != EFI_UNSUPPORTED) {
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): FmpDeviceLib GetImageTypeIdGuidPtr() returned invalid error %r\n", mImageIdName, Status)); DEBUG ((DEBUG_ERROR, "FmpDxe(%s): FmpDeviceLib GetImageTypeIdGuidPtr() returned invalid error %r\n", mImageIdName, Status));
} }
return &gEfiCallerIdGuid; } else if (FmpDeviceLibGuid == NULL) {
}
if (FmpDeviceLibGuid == NULL) {
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): FmpDeviceLib GetImageTypeIdGuidPtr() returned invalid GUID\n", mImageIdName)); 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; return FmpDeviceLibGuid;
} }

View File

@ -68,6 +68,7 @@
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor ## CONSUMES gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor ## CONSUMES
gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr ## CONSUMES gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr ## CONSUMES
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest ## CONSUMES gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest ## CONSUMES
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## SOMETIMES_PRODUCES gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## SOMETIMES_PRODUCES
[Depex] [Depex]

View File

@ -68,6 +68,7 @@
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor ## CONSUMES gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor ## CONSUMES
gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr ## CONSUMES gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr ## CONSUMES
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest ## CONSUMES gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest ## CONSUMES
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## SOMETIMES_PRODUCES gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## SOMETIMES_PRODUCES
[Depex] [Depex]