]> git.proxmox.com Git - mirror_edk2.git/commitdiff
FmpDevicePkg/FmpDxe: Add PcdFmpDeviceImageTypeIdGuid
authorEric Jin <eric.jin@intel.com>
Fri, 26 Jul 2019 07:40:37 +0000 (15:40 +0800)
committerLiming Gao <liming.gao@intel.com>
Thu, 15 Aug 2019 09:22:24 +0000 (17:22 +0800)
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>
FmpDevicePkg/FmpDevicePkg.dec
FmpDevicePkg/FmpDevicePkg.dsc
FmpDevicePkg/FmpDevicePkg.uni
FmpDevicePkg/FmpDxe/FmpDxe.c
FmpDevicePkg/FmpDxe/FmpDxe.inf
FmpDevicePkg/FmpDxe/FmpDxeLib.inf

index c68dbb71533ebe86f11eb8c90ad1608cedc84241..56ed5fbb4aaa04293f99d92cfd8d71f0591a9e6f 100644 (file)
   # @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
index 3356571fffc65e75c744b3c6bfd296df861fe1fc..4e2bd8de3dcc1827f2e8c3cccb6ff6fcaa74c4e9 100644 (file)
@@ -66,6 +66,9 @@
 [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
index cf27ed53168b47573c2242c7560fc9115dd44b1d..b7fe643186f7fd513ac53752e59f4389ff9313f9 100644 (file)
@@ -6,7 +6,7 @@
 // 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
index 3cda86f6c46cca73b49b9d4e4f605437f94749a3..a53ded73807277cd5a4887125b8968bddcececba 100644 (file)
@@ -147,7 +147,9 @@ FmpDxeProgress (
 /**\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
@@ -159,6 +161,7 @@ GetImageTypeIdGuid (
 {\r
   EFI_STATUS  Status;\r
   EFI_GUID    *FmpDeviceLibGuid;\r
+  UINTN       ImageTypeIdGuidSize;\r
 \r
   FmpDeviceLibGuid = NULL;\r
   Status = FmpDeviceGetImageTypeIdGuidPtr (&FmpDeviceLibGuid);\r
@@ -166,11 +169,18 @@ GetImageTypeIdGuid (
     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
index e3f9d174ef07fa066f1c9b16878a6e800be86ab4..65535a7f43f1df7ee789f56fc3e9fa2de6f7f9da 100644 (file)
@@ -68,6 +68,7 @@
   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor                    ## CONSUMES\r
   gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr               ## CONSUMES\r
   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest              ## CONSUMES\r
+  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid                  ## CONSUMES\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed                            ## SOMETIMES_PRODUCES\r
 \r
 [Depex]\r
index 3b639fa74d838c59c21e2d47a15a37a1ee0edc60..3b10b573772f0bb68c9e34d5905755100355f461 100644 (file)
@@ -68,6 +68,7 @@
   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor                    ## CONSUMES\r
   gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr               ## CONSUMES\r
   gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest              ## CONSUMES\r
+  gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid                  ## CONSUMES\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed                            ## SOMETIMES_PRODUCES\r
 \r
 [Depex]\r