]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
Add missing status code in several modules.
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / GenericBdsLib / BdsBoot.c
index 4b4333bd88bd14574cc97d9c99700da26fcefeef..c04c586f50d7ad2bc8e16e832754b3f6642373ba 100644 (file)
@@ -2278,6 +2278,11 @@ BdsLibBootViaBootOption (
           );\r
   }\r
 \r
+  //\r
+  // Report Status Code to indicate ReadyToBoot event will be signalled\r
+  //\r
+  REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT));\r
+\r
   //\r
   // Signal the EVT_SIGNAL_READY_TO_BOOT event\r
   //\r
@@ -2368,47 +2373,40 @@ BdsLibBootViaBootOption (
       // and get the bootable media handle\r
       //\r
       Handle = BdsLibGetBootableHandle(DevicePath);\r
-      if (Handle == NULL) {\r
-        goto Done;\r
-      }\r
-      //\r
-      // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media\r
-      //  machinename is ia32, ia64, x64, ...\r
-      //\r
-      FilePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);\r
-      if (FilePath != NULL) {\r
-        REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));\r
-        Status = gBS->LoadImage (\r
-                        TRUE,\r
-                        gImageHandle,\r
-                        FilePath,\r
-                        NULL,\r
-                        0,\r
-                        &ImageHandle\r
-                        );\r
-       if (EFI_ERROR (Status)) {\r
-          //\r
-          // The DevicePath failed, and it's not a valid\r
-          // removable media device.\r
-          //\r
-          goto Done;\r
+      if (Handle != NULL) {\r
+        //\r
+        // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media\r
+        //  machinename is ia32, ia64, x64, ...\r
+        //\r
+        FilePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);\r
+        if (FilePath != NULL) {\r
+          REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));\r
+          Status = gBS->LoadImage (\r
+                          TRUE,\r
+                          gImageHandle,\r
+                          FilePath,\r
+                          NULL,\r
+                          0,\r
+                          &ImageHandle\r
+                          );\r
         }\r
       }\r
     }\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      //\r
-      // It there is any error from the Boot attempt exit now.\r
-      //\r
-      goto Done;\r
-    }\r
   }\r
   //\r
   // Provide the image with it's load options\r
   //\r
-  if (ImageHandle == NULL) {\r
+  if ((ImageHandle == NULL) || (EFI_ERROR(Status))) {\r
+    //\r
+    // Report Status Code to indicate that the failure to load boot option\r
+    //\r
+    REPORT_STATUS_CODE (\r
+      EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
+      (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_LOAD_ERROR)\r
+      );    \r
     goto Done;\r
   }\r
+\r
   Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &ImageInfo);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -2442,6 +2440,15 @@ BdsLibBootViaBootOption (
 \r
   Status = gBS->StartImage (ImageHandle, ExitDataSize, ExitData);\r
   DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Image Return Status = %r\n", Status));\r
+  if (EFI_ERROR (Status)) {\r
+    //\r
+    // Report Status Code to indicate that boot failure\r
+    //\r
+    REPORT_STATUS_CODE (\r
+      EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
+      (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_FAILED)\r
+      );\r
+  }\r
 \r
   //\r
   // Clear the Watchdog Timer after the image returns\r