]> git.proxmox.com Git - mirror_edk2.git/blobdiff - FmpDevicePkg/FmpDxe/FmpDxe.c
FmpDevicePkg: Add Last Attempt Status support to dependency libs
[mirror_edk2.git] / FmpDevicePkg / FmpDxe / FmpDxe.c
index b7fd9c93aea0cee0115dd274f3bffbea3a6b8f1b..de7f1fe53e327a387f8b99592f9d892e03d08796 100644 (file)
@@ -730,6 +730,15 @@ GetAllHeaderSize (
                                  LAST_ATTEMPT_STATUS_DRIVER_MIN_ERROR_CODE_VALUE\r
                                  to LAST_ATTEMPT_STATUS_DRIVER_MAX_ERROR_CODE_VALUE.\r
 \r
+                                 This function might also return error codes that occur within libraries\r
+                                 linked against this module that return last attempt error codes such as:\r
+\r
+                                 LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_LIB_MIN_ERROR_CODE_VALUE to\r
+                                 LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_LIB_MAX_ERROR_CODE_VALUE\r
+\r
+                                 LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_CHECK_LIB_MIN_ERROR_CODE_VALUE to\r
+                                 LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_CHECK_LIB_MAX_ERROR_CODE_VALUE\r
+\r
   @retval EFI_SUCCESS            The image was successfully checked.\r
   @retval EFI_ABORTED            The operation is aborted.\r
   @retval EFI_INVALID_PARAMETER  The Image was NULL.\r
@@ -925,7 +934,16 @@ CheckTheImageInternal (
   //\r
   // Get the dependency from Image.\r
   //\r
-  Dependencies = GetImageDependency ((EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image, ImageSize, &DependenciesSize);\r
+  Dependencies =  GetImageDependency (\r
+                    (EFI_FIRMWARE_IMAGE_AUTHENTICATION *) Image,\r
+                    ImageSize,\r
+                    &DependenciesSize,\r
+                    LastAttemptStatus\r
+                    );\r
+  if (*LastAttemptStatus != LAST_ATTEMPT_STATUS_SUCCESS) {\r
+    Status = EFI_ABORTED;\r
+    goto cleanup;\r
+  }\r
 \r
   //\r
   // Check the FmpPayloadHeader\r
@@ -964,11 +982,18 @@ CheckTheImageInternal (
   //\r
   // Evaluate dependency expression\r
   //\r
-  Private->DependenciesSatisfied = CheckFmpDependency (Private->Descriptor.ImageTypeId, Version, Dependencies, DependenciesSize);\r
+  Private->DependenciesSatisfied =  CheckFmpDependency (\r
+                                      Private->Descriptor.ImageTypeId,\r
+                                      Version,\r
+                                      Dependencies,\r
+                                      DependenciesSize,\r
+                                      &LocalLastAttemptStatus\r
+                                      );\r
   if (!Private->DependenciesSatisfied) {\r
     DEBUG ((DEBUG_ERROR, "FmpDxe(%s): CheckTheImage() - Dependency check failed.\n", mImageIdName));\r
     *ImageUpdatable = IMAGE_UPDATABLE_INVALID;\r
     Status = EFI_SUCCESS;\r
+    *LastAttemptStatus = LocalLastAttemptStatus;\r
     goto cleanup;\r
   }\r
 \r
@@ -1181,7 +1206,7 @@ SetTheImage (
   //\r
   // Get the dependency from Image.\r
   //\r
-  Dependencies = GetImageDependency ((EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image, ImageSize, &DependenciesSize);\r
+  Dependencies = GetImageDependency ((EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image, ImageSize, &DependenciesSize, &LastAttemptStatus);\r
 \r
   //\r
   // No functional error in CheckTheImage.  Attempt to get the Version to\r