summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg/Bds/BootOption.c
diff options
context:
space:
mode:
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-09-09 10:52:31 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-09-09 10:52:31 +0000
commita6e97d28aa583e4b7959431cbf8bbd7269d5065d (patch)
tree03d733fa48116d6f384808ce52434a9d5202e409 /ArmPlatformPkg/Bds/BootOption.c
parent2ccfb71ebebd54c57aad8f9bb5fb20539e7b892f (diff)
downloadedk2-platforms-a6e97d28aa583e4b7959431cbf8bbd7269d5065d.tar.xz
ArmPkg/BdsLib: Move the Generic BDS_LOAD_OPTION structure from Armplatform/Pkg to ArmPkg/Bds
This structure is defined by the UEFI specification and has a better location in BdsLib. ArmPlatformPkg/Bds: Encapsulate the BDS_LOAD_OPTION into a list entry structure git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12312 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPlatformPkg/Bds/BootOption.c')
-rw-r--r--ArmPlatformPkg/Bds/BootOption.c56
1 files changed, 30 insertions, 26 deletions
diff --git a/ArmPlatformPkg/Bds/BootOption.c b/ArmPlatformPkg/Bds/BootOption.c
index f6090d266d..6a5f010abe 100644
--- a/ArmPlatformPkg/Bds/BootOption.c
+++ b/ArmPlatformPkg/Bds/BootOption.c
@@ -22,7 +22,6 @@ BootOptionStart (
)
{
EFI_STATUS Status;
- EFI_DEVICE_PATH* FdtDevicePath;
EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL* EfiDevicePathFromTextProtocol;
UINT32 LoaderType;
ARM_BDS_LOADER_OPTIONAL_DATA* OptionalData;
@@ -34,6 +33,7 @@ BootOptionStart (
UINTN InitrdSize;
EFI_DEVICE_PATH* Initrd;
+ if (IS_ARM_BDS_BOOTENTRY (BootOption)) {
Status = EFI_UNSUPPORTED;
OptionalData = BootOption->OptionalData;
LoaderType = ReadUnaligned32 ((CONST UINT32*)&OptionalData->Header.LoaderType);
@@ -83,6 +83,10 @@ BootOptionStart (
Initrd, // Initrd
(CHAR8*)(LinuxArguments + 1),
FdtDevicePath);
+ }
+ } else {
+ Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList);
+ }
return Status;
}
@@ -159,11 +163,12 @@ BootOptionList (
IN OUT LIST_ENTRY *BootOptionList
)
{
- EFI_STATUS Status;
- UINTN Index;
- UINT16 *BootOrder;
- UINTN BootOrderSize;
- BDS_LOAD_OPTION *BdsLoadOption;
+ EFI_STATUS Status;
+ UINTN Index;
+ UINT16* BootOrder;
+ UINTN BootOrderSize;
+ BDS_LOAD_OPTION* BdsLoadOption;
+ BDS_LOAD_OPTION_ENTRY* BdsLoadOptionEntry;
InitializeListHead (BootOptionList);
@@ -176,7 +181,9 @@ BootOptionList (
for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) {
Status = BootOptionFromLoadOptionVariable (BootOrder[Index],&BdsLoadOption);
if (!EFI_ERROR(Status)) {
- InsertTailList (BootOptionList,&BdsLoadOption->Link);
+ BdsLoadOptionEntry = (BDS_LOAD_OPTION_ENTRY*)AllocatePool(sizeof(BDS_LOAD_OPTION_ENTRY));
+ BdsLoadOptionEntry->BdsLoadOption = BdsLoadOption;
+ InsertTailList (BootOptionList,&BdsLoadOptionEntry->Link);
}
}
@@ -327,21 +334,24 @@ BootOptionCreate (
IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
IN ARM_BDS_LOADER_TYPE BootType,
IN ARM_BDS_LOADER_ARGUMENTS* BootArguments,
- OUT BDS_LOAD_OPTION **BdsLoadOption
+ OUT BDS_LOAD_OPTION** BdsLoadOption
)
{
- EFI_STATUS Status;
- BDS_LOAD_OPTION *BootOption;
- CHAR16 BootVariableName[9];
- UINT16 *BootOrder;
- UINTN BootOrderSize;
+ EFI_STATUS Status;
+ BDS_LOAD_OPTION_ENTRY* BootOptionEntry;
+ BDS_LOAD_OPTION* BootOption;
+ CHAR16 BootVariableName[9];
+ UINT16* BootOrder;
+ UINTN BootOrderSize;
//
// Allocate and fill the memory for the BDS Load Option structure
//
- BootOption = (BDS_LOAD_OPTION*)AllocateZeroPool(sizeof(BDS_LOAD_OPTION));
+ BootOptionEntry = (BDS_LOAD_OPTION_ENTRY*)AllocatePool (sizeof (BDS_LOAD_OPTION_ENTRY));
+ InitializeListHead (&BootOptionEntry->Link);
+ BootOptionEntry->BdsLoadOption = (BDS_LOAD_OPTION*)AllocateZeroPool (sizeof(BDS_LOAD_OPTION));
- InitializeListHead (&BootOption->Link);
+ BootOption = BootOptionEntry->BdsLoadOption;
BootOptionSetFields (BootOption, Attributes, BootDescription, DevicePath, BootType, BootArguments);
//
@@ -419,17 +429,11 @@ BootOptionDelete (
IN BDS_LOAD_OPTION *BootOption
)
{
- UINTN Index;
- UINTN BootOrderSize;
- UINT16* BootOrder;
- UINTN BootOrderCount;
- EFI_STATUS Status;
-
- // If the Boot Optiono was attached to a list remove it
- if (!IsListEmpty (&BootOption->Link)) {
- // Remove the entry from the list
- RemoveEntryList (&BootOption->Link);
- }
+ UINTN Index;
+ UINTN BootOrderSize;
+ UINT16* BootOrder;
+ UINTN BootOrderCount;
+ EFI_STATUS Status;
// Remove the entry from the BootOrder environment variable
Status = GetEnvironmentVariable (L"BootOrder", NULL, &BootOrderSize, (VOID**)&BootOrder);