]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Bds/Bds.c
Set network boot option to the default last priority.
[mirror_edk2.git] / ArmPlatformPkg / Bds / Bds.c
index fa9dfbafc429d6839aff6ebf950e17cac8872683..971ab07524d70c22e681adff479c5d6638bc08f9 100644 (file)
@@ -19,9 +19,9 @@
 \r
 #include <Protocol/Bds.h>\r
 \r
-#define EFI_SET_TIMER_TO_SECOND   10000000\r
+#include <Guid/EventGroup.h>\r
 \r
-EFI_HANDLE mImageHandle;\r
+#define EFI_SET_TIMER_TO_SECOND   10000000\r
 \r
 STATIC\r
 EFI_STATUS\r
@@ -337,7 +337,7 @@ DefineDefaultBootEntries (
 \r
       if (DefaultBootArgument == (CHAR16*)PcdGetPtr (PcdDefaultBootArgument)) {\r
         FreePool (AsciiDefaultBootArgument);\r
-      } else {\r
+      } else if (DefaultBootArgument != NULL) {\r
         FreePool (DefaultBootArgument);\r
       }\r
     } else {\r
@@ -345,7 +345,7 @@ DefineDefaultBootEntries (
     }\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+  return Status;\r
 }\r
 \r
 EFI_STATUS\r
@@ -367,8 +367,11 @@ StartDefaultBootOnTimeout (
 \r
   Size = sizeof(UINT16);\r
   Timeout = (UINT16)PcdGet16 (PcdPlatformBootTimeOut);\r
-  TimeoutPtr = &Timeout;\r
-  GetGlobalEnvironmentVariable (L"Timeout", &Timeout, &Size, (VOID**)&TimeoutPtr);\r
+  Status = GetGlobalEnvironmentVariable (L"Timeout", &Timeout, &Size, (VOID**)&TimeoutPtr);\r
+  if (!EFI_ERROR (Status)) {\r
+    Timeout = *TimeoutPtr;\r
+    FreePool (TimeoutPtr);\r
+  }\r
 \r
   if (Timeout != 0xFFFF) {\r
     if (Timeout > 0) {\r
@@ -390,7 +393,7 @@ StartDefaultBootOnTimeout (
       }\r
       // Discard key in the buffer\r
       do {\r
-       Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+        Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
       } while(!EFI_ERROR(Status));\r
       gBS->CloseEvent (WaitList[0]);\r
       Print(L"\n\r");\r
@@ -405,8 +408,8 @@ StartDefaultBootOnTimeout (
         UnicodeSPrint (BootVariableName, 9 * sizeof(CHAR16), L"Boot%04X", BootOrder[Index]);\r
         Status = BdsStartBootOption (BootVariableName);\r
         if(!EFI_ERROR(Status)){\r
-               // Boot option returned successfully, hence don't need to start next boot option\r
-               break;\r
+          // Boot option returned successfully, hence don't need to start next boot option\r
+          break;\r
         }\r
         // In case of success, we should not return from this call.\r
       }\r
@@ -416,6 +419,24 @@ StartDefaultBootOnTimeout (
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  An empty function to pass error checking of CreateEventEx ().\r
+\r
+  @param  Event                 Event whose notification function is being invoked.\r
+  @param  Context               Pointer to the notification function's context,\r
+                                which is implementation-dependent.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+EmptyCallbackFunction (\r
+  IN EFI_EVENT                Event,\r
+  IN VOID                     *Context\r
+  )\r
+{\r
+  return;\r
+}\r
+\r
 /**\r
   This function uses policy data from the platform to determine what operating\r
   system or system utility should be loaded and invoked.  This function call\r
@@ -448,6 +469,22 @@ BdsEntry (
   UINT16             *BootNext;\r
   UINTN               BootNextSize;\r
   CHAR16              BootVariableName[9];\r
+  EFI_EVENT           EndOfDxeEvent;\r
+\r
+  //\r
+  // Signal EndOfDxe PI Event\r
+  //\r
+  Status = gBS->CreateEventEx (\r
+      EVT_NOTIFY_SIGNAL,\r
+      TPL_NOTIFY,\r
+      EmptyCallbackFunction,\r
+      NULL,\r
+      &gEfiEndOfDxeEventGroupGuid,\r
+      &EndOfDxeEvent\r
+      );\r
+  if (!EFI_ERROR (Status)) {\r
+    gBS->SignalEvent (EndOfDxeEvent);\r
+  }\r
 \r
   PERF_END   (NULL, "DXE", NULL, 0);\r
 \r
@@ -539,8 +576,6 @@ BdsInitialize (
 {\r
   EFI_STATUS  Status;\r
 \r
-  mImageHandle = ImageHandle;\r
-\r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &ImageHandle,\r
                   &gEfiBdsArchProtocolGuid, &gBdsProtocol,\r