]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpBootDxe/HttpBootConfig.c
IntelFsp2Pkg: 41d739e breaks flat tree build
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootConfig.c
index 00e4782f567416a5220a1b4d9f452f42984f6eab..7c883b8397b00708d58d3d160c18b712b929c324 100644 (file)
@@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 #include "HttpBootDxe.h"\r
+#include <Library/UefiBootManagerLib.h>\r
 \r
 CHAR16  mHttpBootConfigStorageName[]     = L"HTTP_BOOT_CONFIG_IFR_NVDATA";\r
 \r
@@ -36,31 +37,18 @@ HttpBootAddBootOption (
   IN   CHAR16                   *Uri\r
   )\r
 {\r
-  EFI_DEV_PATH               *Node;\r
-  EFI_DEVICE_PATH_PROTOCOL   *TmpDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL   *NewDevicePath;\r
-  UINTN                      Length;\r
-  CHAR8                      AsciiUri[URI_STR_MAX_SIZE];\r
-  CHAR16                     *CurrentOrder;\r
-  EFI_STATUS                 Status;\r
-  UINTN                      OrderCount;\r
-  UINTN                      TargetLocation;\r
-  BOOLEAN                    Found;\r
-  UINT8                      *TempByteBuffer;\r
-  UINT8                      *TempByteStart;\r
-  UINTN                      DescSize;\r
-  UINTN                      FilePathSize;\r
-  CHAR16                     OptionStr[10];\r
-  UINT16                     *NewOrder;\r
-  UINTN                      Index;\r
-\r
-  NewOrder      = NULL;\r
-  TempByteStart = NULL;\r
+  EFI_DEV_PATH                      *Node;\r
+  EFI_DEVICE_PATH_PROTOCOL          *TmpDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL          *NewDevicePath;\r
+  UINTN                             Length;\r
+  CHAR8                             AsciiUri[URI_STR_MAX_SIZE];\r
+  EFI_STATUS                        Status;\r
+  UINTN                             Index;\r
+  EFI_BOOT_MANAGER_LOAD_OPTION      NewOption;\r
+\r
   NewDevicePath = NULL;\r
-  NewOrder      = NULL;\r
   Node          = NULL;\r
   TmpDevicePath = NULL;\r
-  CurrentOrder  = NULL;\r
 \r
   if (StrLen (Description) == 0) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -116,7 +104,7 @@ HttpBootAddBootOption (
   //\r
   // Update the URI node with the input boot file URI.\r
   //\r
-  UnicodeStrToAsciiStr (Uri, AsciiUri);\r
+  UnicodeStrToAsciiStrS (Uri, AsciiUri, sizeof (AsciiUri));\r
   Length = sizeof (EFI_DEVICE_PATH_PROTOCOL) + AsciiStrSize (AsciiUri);\r
   Node = AllocatePool (Length);\r
   if (Node == NULL) {\r
@@ -137,105 +125,27 @@ HttpBootAddBootOption (
   }\r
 \r
   //\r
-  // Get current "BootOrder" variable and find a free target.\r
+  // Add a new load option.\r
   //\r
-  Length = 0;\r
-  Status = GetVariable2 (\r
-             L"BootOrder",\r
-             &gEfiGlobalVariableGuid,\r
-             (VOID **)&CurrentOrder,\r
-             &Length \r
-             );\r
-  if (EFI_ERROR (Status) && Status != EFI_NOT_FOUND) {\r
-    goto ON_EXIT;\r
-  }\r
-  OrderCount = Length / sizeof (UINT16);\r
-  Found = FALSE;\r
-  for (TargetLocation=0; TargetLocation < 0xFFFF; TargetLocation++) {\r
-    Found = TRUE;\r
-    for (Index = 0; Index < OrderCount; Index++) {\r
-      if (CurrentOrder[Index] == TargetLocation) {\r
-        Found = FALSE;\r
-        break;\r
-      }\r
-    }\r
-    if (Found) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (TargetLocation == 0xFFFF) {\r
-    DEBUG ((EFI_D_ERROR, "Could not find unused target index.\n"));\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto ON_EXIT;\r
-  } else {\r
-    DEBUG ((EFI_D_INFO, "TargetIndex = %04x.\n", TargetLocation));\r
-  }\r
-  \r
-  //\r
-  // Construct and set the "Boot####" variable\r
-  //\r
-  DescSize = StrSize(Description);\r
-  FilePathSize = GetDevicePathSize (NewDevicePath);\r
-  TempByteBuffer = AllocateZeroPool(sizeof(EFI_LOAD_OPTION) + DescSize + FilePathSize);\r
-  if (TempByteBuffer == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto ON_EXIT;\r
-  }\r
-\r
-  TempByteStart = TempByteBuffer;\r
-  *((UINT32 *) TempByteBuffer) = LOAD_OPTION_ACTIVE;      // Attributes\r
-  TempByteBuffer += sizeof (UINT32);\r
-\r
-  *((UINT16 *) TempByteBuffer) = (UINT16)FilePathSize;    // FilePathListLength\r
-  TempByteBuffer += sizeof (UINT16);\r
-\r
-  CopyMem (TempByteBuffer, Description, DescSize);\r
-  TempByteBuffer += DescSize;\r
-  CopyMem (TempByteBuffer, NewDevicePath, FilePathSize);\r
-\r
-  UnicodeSPrint (OptionStr, sizeof(OptionStr), L"%s%04x", L"Boot", TargetLocation);\r
-  Status = gRT->SetVariable (\r
-                  OptionStr,\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                  sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize,\r
-                  TempByteStart\r
-                  );\r
+  Status = EfiBootManagerInitializeLoadOption (\r
+                 &NewOption,\r
+                 LoadOptionNumberUnassigned,\r
+                 LoadOptionTypeBoot,\r
+                 LOAD_OPTION_ACTIVE,\r
+                 Description,\r
+                 NewDevicePath,\r
+                 NULL,\r
+                 0\r
+                 );\r
   if (EFI_ERROR (Status)) {\r
     goto ON_EXIT;\r
   }\r
 \r
-  //\r
-  // Insert into the order list and set "BootOrder" variable\r
-  //\r
-  NewOrder = AllocateZeroPool ((OrderCount + 1) * sizeof (UINT16));\r
-  if (NewOrder == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto ON_EXIT;\r
-  }\r
-  CopyMem(NewOrder, CurrentOrder, OrderCount * sizeof(UINT16));\r
-  NewOrder[OrderCount] = (UINT16) TargetLocation;\r
-  Status = gRT->SetVariable (\r
-                  L"BootOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                  ((OrderCount + 1) * sizeof (UINT16)),\r
-                  NewOrder\r
-                  );\r
-  \r
+  Status = EfiBootManagerAddLoadOptionVariable (&NewOption, (UINTN) -1);\r
+  EfiBootManagerFreeLoadOption (&NewOption);\r
 \r
 ON_EXIT:\r
 \r
-  if (CurrentOrder != NULL) {\r
-    FreePool (CurrentOrder);\r
-  }\r
-  if (NewOrder != NULL) {\r
-    FreePool (NewOrder);\r
-  }\r
-  if (TempByteStart != NULL) {\r
-    FreePool (TempByteStart);\r
-  }\r
   if (NewDevicePath != NULL) {\r
     FreePool (NewDevicePath);\r
   }\r
@@ -363,7 +273,9 @@ HttpBootFormExtractConfig (
     ConfigRequestHdr = HiiConstructConfigHdr (&gHttpBootConfigGuid, mHttpBootConfigStorageName, CallbackInfo->ChildHandle);\r
     Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
     ConfigRequest = AllocateZeroPool (Size);\r
-    ASSERT (ConfigRequest != NULL);\r
+    if (ConfigRequest == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
     AllocatedRequest = TRUE;\r
     UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize);\r
     FreePool (ConfigRequestHdr);\r
@@ -554,7 +466,6 @@ HttpBootFormCallback (
     // Get user input URI string\r
     //\r
     Uri = HiiGetString (CallbackInfo->RegisteredHandle, Value->string, NULL);\r
-    ASSERT (Uri != NULL);\r
     if (Uri == NULL) {\r
       return EFI_UNSUPPORTED;\r
     }\r