]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
MdeModulePkg/CapsuleLib: Add CapsuleTarget support.
[mirror_edk2.git] / MdeModulePkg / Library / DxeCapsuleLibFmp / DxeCapsuleLib.c
index 5d4670997c49ab6f37cdaf5326dca6dccfef5804..2bb6ac887fdd13be5ba255192a51fc37586f7c3a 100644 (file)
@@ -100,6 +100,7 @@ RecordCapsuleStatusVariable (
   @param[in] CapsuleStatus  The capsule process stauts\r
   @param[in] PayloadIndex   FMP payload index\r
   @param[in] ImageHeader    FMP image header\r
+  @param[in] FmpDevicePath  DevicePath associated with the FMP producer\r
 \r
   @retval EFI_SUCCESS          The capsule status variable is recorded.\r
   @retval EFI_OUT_OF_RESOURCES No resource to record the capsule status variable.\r
@@ -109,7 +110,8 @@ RecordFmpCapsuleStatusVariable (
   IN EFI_CAPSULE_HEADER                            *CapsuleHeader,\r
   IN EFI_STATUS                                    CapsuleStatus,\r
   IN UINTN                                         PayloadIndex,\r
-  IN EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER  *ImageHeader\r
+  IN EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER  *ImageHeader,\r
+  IN EFI_DEVICE_PATH_PROTOCOL                      *FmpDevicePath OPTIONAL\r
   );\r
 \r
 /**\r
@@ -776,8 +778,8 @@ DumpFmpCapsule (
 \r
   This function need support nested FMP capsule.\r
 \r
-  @param[in]  CapsuleHeader         Points to a capsule header.\r
-  @param[in]  AreAllImagesProcessed If all the FMP images in the capsule are processed.\r
+  @param[in]   CapsuleHeader         Points to a capsule header.\r
+  @param[out]  AreAllImagesProcessed If all the FMP images in the capsule are processed.\r
 \r
   @retval EFI_SUCESS            Process Capsule Image successfully.\r
   @retval EFI_UNSUPPORTED       Capsule image is not supported by the firmware.\r
@@ -818,6 +820,7 @@ ProcessFmpCapsuleImage (
   UINTN                                         Index2;\r
   MEMMAP_DEVICE_PATH                            MemMapNode;\r
   EFI_DEVICE_PATH_PROTOCOL                      *DriverDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL                      *FmpDevicePath;\r
   ESRT_MANAGEMENT_PROTOCOL                      *EsrtProtocol;\r
   EFI_SYSTEM_RESOURCE_ENTRY                     EsrtEntry;\r
   VOID                                          *VendorCode;\r
@@ -941,6 +944,13 @@ ProcessFmpCapsuleImage (
         continue;\r
       }\r
 \r
+      FmpDevicePath = NULL;\r
+      gBS->HandleProtocol(\r
+             HandleBuffer[Index1],\r
+             &gEfiDevicePathProtocolGuid,\r
+             (VOID **)&FmpDevicePath\r
+             );\r
+\r
       ImageInfoSize = 0;\r
       Status = Fmp->GetImageInfo (\r
                       Fmp,\r
@@ -1013,8 +1023,7 @@ ProcessFmpCapsuleImage (
             continue;\r
           }\r
 \r
-          if (CompareGuid(&ImageHeader->UpdateImageTypeId, &TempFmpImageInfo->ImageTypeId) &&\r
-              ImageHeader->UpdateImageIndex == TempFmpImageInfo->ImageIndex) {\r
+          if (CompareGuid(&ImageHeader->UpdateImageTypeId, &TempFmpImageInfo->ImageTypeId)) {\r
             AbortReason = NULL;\r
             if (ImageHeader->Version >= EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) {\r
               if(ImageHeader->UpdateHardwareInstance != 0){\r
@@ -1061,7 +1070,8 @@ ProcessFmpCapsuleImage (
               CapsuleHeader,                                 // CapsuleGuid\r
               Status,                                        // CapsuleStatus\r
               Index - FmpCapsuleHeader->EmbeddedDriverCount, // PayloadIndex\r
-              ImageHeader                                    // ImageHeader\r
+              ImageHeader,                                   // ImageHeader\r
+              FmpDevicePath                                  // FmpDevicePath\r
               );\r
             if (StatusRet != EFI_SUCCESS) {\r
               StatusRet = Status;\r