]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Bds/BootOption.c
ArmPkg/BdsLib: Move the Generic BDS_LOAD_OPTION structure from Armplatform/Pkg to...
[mirror_edk2.git] / ArmPlatformPkg / Bds / BootOption.c
index f6090d266dcf97e5fc2acee748c153ec8738324f..6a5f010abe85467cbcf36a74e8c453c98b2c98e0 100644 (file)
@@ -22,7 +22,6 @@ BootOptionStart (
   )\r
 {\r
   EFI_STATUS                            Status;\r
-  EFI_DEVICE_PATH*                      FdtDevicePath;\r
   EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL*   EfiDevicePathFromTextProtocol;\r
   UINT32                                LoaderType;\r
   ARM_BDS_LOADER_OPTIONAL_DATA*         OptionalData;\r
@@ -34,6 +33,7 @@ BootOptionStart (
   UINTN                                 InitrdSize;\r
   EFI_DEVICE_PATH*                      Initrd;\r
 \r
+  if (IS_ARM_BDS_BOOTENTRY (BootOption)) {\r
     Status = EFI_UNSUPPORTED;\r
     OptionalData = BootOption->OptionalData;\r
     LoaderType = ReadUnaligned32 ((CONST UINT32*)&OptionalData->Header.LoaderType);\r
@@ -83,6 +83,10 @@ BootOptionStart (
                                 Initrd, // Initrd\r
                                 (CHAR8*)(LinuxArguments + 1),\r
                                 FdtDevicePath);\r
+    }\r
+  } else {\r
+    Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList);\r
+  }\r
 \r
   return Status;\r
 }\r
@@ -159,11 +163,12 @@ BootOptionList (
   IN OUT LIST_ENTRY *BootOptionList\r
   )\r
 {\r
-  EFI_STATUS        Status;\r
-  UINTN             Index;\r
-  UINT16            *BootOrder;\r
-  UINTN             BootOrderSize;\r
-  BDS_LOAD_OPTION   *BdsLoadOption;\r
+  EFI_STATUS                    Status;\r
+  UINTN                         Index;\r
+  UINT16*                       BootOrder;\r
+  UINTN                         BootOrderSize;\r
+  BDS_LOAD_OPTION*              BdsLoadOption;\r
+  BDS_LOAD_OPTION_ENTRY*        BdsLoadOptionEntry;\r
 \r
   InitializeListHead (BootOptionList);\r
 \r
@@ -176,7 +181,9 @@ BootOptionList (
   for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) {\r
     Status = BootOptionFromLoadOptionVariable (BootOrder[Index],&BdsLoadOption);\r
     if (!EFI_ERROR(Status)) {\r
-      InsertTailList (BootOptionList,&BdsLoadOption->Link);\r
+      BdsLoadOptionEntry = (BDS_LOAD_OPTION_ENTRY*)AllocatePool(sizeof(BDS_LOAD_OPTION_ENTRY));\r
+      BdsLoadOptionEntry->BdsLoadOption = BdsLoadOption;\r
+      InsertTailList (BootOptionList,&BdsLoadOptionEntry->Link);\r
     }\r
   }\r
 \r
@@ -327,21 +334,24 @@ BootOptionCreate (
   IN  EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
   IN  ARM_BDS_LOADER_TYPE       BootType,\r
   IN  ARM_BDS_LOADER_ARGUMENTS* BootArguments,\r
-  OUT BDS_LOAD_OPTION           **BdsLoadOption\r
+  OUT BDS_LOAD_OPTION**         BdsLoadOption\r
   )\r
 {\r
-  EFI_STATUS        Status;\r
-  BDS_LOAD_OPTION   *BootOption;\r
-  CHAR16            BootVariableName[9];\r
-  UINT16            *BootOrder;\r
-  UINTN             BootOrderSize;\r
+  EFI_STATUS                    Status;\r
+  BDS_LOAD_OPTION_ENTRY*        BootOptionEntry;\r
+  BDS_LOAD_OPTION*              BootOption;\r
+  CHAR16                        BootVariableName[9];\r
+  UINT16*                       BootOrder;\r
+  UINTN                         BootOrderSize;\r
 \r
   //\r
   // Allocate and fill the memory for the BDS Load Option structure\r
   //\r
-  BootOption = (BDS_LOAD_OPTION*)AllocateZeroPool(sizeof(BDS_LOAD_OPTION));\r
+  BootOptionEntry = (BDS_LOAD_OPTION_ENTRY*)AllocatePool (sizeof (BDS_LOAD_OPTION_ENTRY));\r
+  InitializeListHead (&BootOptionEntry->Link);\r
+  BootOptionEntry->BdsLoadOption = (BDS_LOAD_OPTION*)AllocateZeroPool (sizeof(BDS_LOAD_OPTION));\r
 \r
-  InitializeListHead (&BootOption->Link);\r
+  BootOption = BootOptionEntry->BdsLoadOption;\r
   BootOptionSetFields (BootOption, Attributes, BootDescription, DevicePath, BootType, BootArguments);\r
 \r
   //\r
@@ -419,17 +429,11 @@ BootOptionDelete (
   IN  BDS_LOAD_OPTION *BootOption\r
   )\r
 {\r
-  UINTN Index;\r
-  UINTN BootOrderSize;\r
-  UINT16* BootOrder;\r
-  UINTN BootOrderCount;\r
-  EFI_STATUS  Status;\r
-\r
-  // If the Boot Optiono was attached to a list remove it\r
-  if (!IsListEmpty (&BootOption->Link)) {\r
-    // Remove the entry from the list\r
-    RemoveEntryList (&BootOption->Link);\r
-  }\r
+  UINTN         Index;\r
+  UINTN         BootOrderSize;\r
+  UINT16*       BootOrder;\r
+  UINTN         BootOrderCount;\r
+  EFI_STATUS    Status;\r
 \r
   // Remove the entry from the BootOrder environment variable\r
   Status = GetEnvironmentVariable (L"BootOrder", NULL, &BootOrderSize, (VOID**)&BootOrder);\r