]> git.proxmox.com Git - mirror_edk2.git/commitdiff
EdkGenericBdsLib and Logo removed, use EdkGenericPlatformBdsLib
authortgingold <tgingold@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 13 Feb 2007 00:05:13 +0000 (00:05 +0000)
committertgingold <tgingold@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 13 Feb 2007 00:05:13 +0000 (00:05 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2374 6f19259b-4bc3-4df7-8a09-765794883524

55 files changed:
EdkUnixPkg/Dxe/PlatformBds/Bds.dxs [new file with mode: 0644]
EdkUnixPkg/Dxe/PlatformBds/BdsPlatform.c
EdkUnixPkg/Dxe/PlatformBds/Generic/Bds.dxs [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/Bds.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BdsEntry.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BBSsupport.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BBSsupport.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Bm.vfr [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BmLib.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BmString.uni [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootOption.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/ConsoleOption.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Data.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FE.vfr [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FileExplorer.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FormGuid.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/UpdatePage.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Variable.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManagerStrings.uni [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManagerVfr.Vfr [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/Capsules.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManagerStrings.uni [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManagerVfr.Vfr [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPage.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPage.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPageStrings.uni [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPageVfr.Vfr [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/Language.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/Language.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/MemoryTest.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/String.c [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/String.h [deleted file]
EdkUnixPkg/Dxe/PlatformBds/Generic/Strings.uni [deleted file]
EdkUnixPkg/Dxe/PlatformBds/PlatformBds.msa
EdkUnixPkg/Dxe/PlatformBds/PlatformData.c
EdkUnixPkg/Include/Library/EdkGenericBdsLib.h [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/BdsBoot.c [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/BdsBoot.c.orig [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/BdsConnect.c [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/BdsConsole.c [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c.orig [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/DevicePath.c [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/EdkGenericBdsLib.msa [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/Ipf/ShadowRom.c [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/Performance.c [deleted file]
EdkUnixPkg/Library/EdkGenericBdsLib/Performance.h [deleted file]
EdkUnixPkg/Logo/Logo.bmp [deleted file]
EdkUnixPkg/Logo/Logo.msa [deleted file]

diff --git a/EdkUnixPkg/Dxe/PlatformBds/Bds.dxs b/EdkUnixPkg/Dxe/PlatformBds/Bds.dxs
new file mode 100644 (file)
index 0000000..ee8bb9a
--- /dev/null
@@ -0,0 +1,27 @@
+/*++\r
+\r
+Copyright (c) 2006, Intel Corporation                                                         \r
+All rights reserved. This program and the accompanying materials                          \r
+are licensed and made available under the terms and conditions of the BSD License         \r
+which accompanies this distribution.  The full text of the license may be found at        \r
+http://opensource.org/licenses/bsd-license.php                                            \r
+                                                                                          \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+\r
+Module Name:\r
+\r
+  Bds.dxs\r
+\r
+Abstract:\r
+\r
+  Dependency expression source file.  This driver produces an arch protocol, so\r
+  must dipatch early.\r
+  \r
+--*/\r
+#include <AutoGen.h>\r
+#include <DxeDepex.h>\r
+\r
+DEPENDENCY_START\r
+  EFI_HII_PROTOCOL_GUID\r
+DEPENDENCY_END\r
index d1edef3d7ed9cadfda0d91af70c12977e071c099..d77d8488223a1fa836e36d91e15906884de024e3 100644 (file)
@@ -20,11 +20,7 @@ Abstract:
 \r
 --*/\r
 \r
-#include "Generic/Bds.h"\r
 #include "BdsPlatform.h"\r
-#include "Generic/String.h"\r
-#include "Generic/Language.h"\r
-#include "Generic/FrontPage.h"\r
 \r
 CHAR16  mFirmwareVendor[] = L"TianoCore.org";\r
 \r
@@ -68,13 +64,6 @@ Returns:
   //\r
   gBS->CalculateCrc32 ((VOID *) gST, sizeof (EFI_SYSTEM_TABLE), &gST->Hdr.CRC32);\r
 \r
-  //\r
-  // Initialize the platform specific string and language\r
-  //\r
-  InitializeStringSupport ();\r
-  InitializeLanguage (TRUE);\r
-  InitializeFrontPage (FALSE);\r
-\r
 }\r
 \r
 EFI_STATUS\r
@@ -413,85 +402,6 @@ Returns:
 \r
 }\r
 \r
-VOID\r
-PlatformBdsBootSuccess (\r
-  IN  BDS_COMMON_OPTION *Option\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Hook point after a boot attempt succeeds. We don't expect a boot option to\r
-  return, so the EFI 1.0 specification defines that you will default to an\r
-  interactive mode and stop processing the BootOrder list in this case. This\r
-  is alos a platform implementation and can be customized by IBV/OEM.\r
-\r
-Arguments:\r
-\r
-  Option - Pointer to Boot Option that succeeded to boot.\r
-\r
-Returns:\r
-  \r
-  None.\r
-\r
---*/\r
-{\r
-  CHAR16  *TmpStr;\r
-\r
-  //\r
-  // If Boot returned with EFI_SUCCESS and there is not in the boot device\r
-  // select loop then we need to pop up a UI and wait for user input.\r
-  //\r
-  TmpStr = GetStringById (STRING_TOKEN (STR_BOOT_SUCCEEDED));\r
-  if (TmpStr != NULL) {\r
-    BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);\r
-    gBS->FreePool (TmpStr);\r
-  }\r
-}\r
-\r
-VOID\r
-PlatformBdsBootFail (\r
-  IN  BDS_COMMON_OPTION  *Option,\r
-  IN  EFI_STATUS         Status,\r
-  IN  CHAR16             *ExitData,\r
-  IN  UINTN              ExitDataSize\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Hook point after a boot attempt fails.\r
-\r
-Arguments:\r
-  \r
-  Option - Pointer to Boot Option that failed to boot.\r
-\r
-  Status - Status returned from failed boot.\r
-\r
-  ExitData - Exit data returned from failed boot.\r
-\r
-  ExitDataSize - Exit data size returned from failed boot.\r
-\r
-Returns:\r
-  \r
-  None.\r
-\r
---*/\r
-{\r
-  CHAR16  *TmpStr;\r
-\r
-  //\r
-  // If Boot returned with failed status then we need to pop up a UI and wait\r
-  // for user input.\r
-  //\r
-  TmpStr = GetStringById (STRING_TOKEN (STR_BOOT_FAILED));\r
-  if (TmpStr != NULL) {\r
-    BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);\r
-    gBS->FreePool (TmpStr);\r
-  }\r
-\r
-}\r
-\r
 EFI_STATUS\r
 PlatformBdsNoConsoleAction (\r
   VOID\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/Bds.dxs b/EdkUnixPkg/Dxe/PlatformBds/Generic/Bds.dxs
deleted file mode 100644 (file)
index 6647561..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Bds.dxs\r
-\r
-Abstract:\r
-\r
-  Dependency expression source file.  This driver produces an arch protocol, so\r
-  must dipatch early.\r
-  \r
---*/\r
-#include <AutoGen.h>\r
-#include <DxeDepex.h>\r
-\r
-DEPENDENCY_START\r
-  EFI_HII_PROTOCOL_GUID\r
-DEPENDENCY_END
\ No newline at end of file
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/Bds.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/Bds.h
deleted file mode 100644 (file)
index da90227..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Bds.h\r
-\r
-Abstract:\r
-\r
-  Head file for BDS Architectural Protocol implementation\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _BDS_H\r
-#define _BDS_H\r
-\r
-//\r
-// Bds AP Context data\r
-//\r
-#define EFI_BDS_ARCH_PROTOCOL_INSTANCE_SIGNATURE  EFI_SIGNATURE_32 ('B', 'd', 's', 'A')\r
-typedef struct {\r
-  UINTN                     Signature;\r
-\r
-  EFI_HANDLE                Handle;\r
-\r
-  EFI_BDS_ARCH_PROTOCOL     Bds;\r
-\r
-  //\r
-  // Save the current boot mode\r
-  //\r
-  EFI_BOOT_MODE             BootMode;\r
-\r
-  //\r
-  // Set true if boot with default settings\r
-  //\r
-  BOOLEAN                   DefaultBoot;\r
-\r
-  //\r
-  // The system default timeout for choose the boot option\r
-  //\r
-  UINT16                    TimeoutDefault;\r
-\r
-  //\r
-  // Memory Test Level\r
-  //\r
-  EXTENDMEM_COVERAGE_LEVEL  MemoryTestLevel;\r
-\r
-} EFI_BDS_ARCH_PROTOCOL_INSTANCE;\r
-\r
-#define EFI_BDS_ARCH_PROTOCOL_INSTANCE_FROM_THIS(_this) \\r
-  CR (_this, \\r
-      EFI_BDS_ARCH_PROTOCOL_INSTANCE, \\r
-      Bds, \\r
-      EFI_BDS_ARCH_PROTOCOL_INSTANCE_SIGNATURE \\r
-      )\r
-\r
-//\r
-// Prototypes\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-BdsInitialize (\r
-  IN EFI_HANDLE                     ImageHandle,\r
-  IN EFI_SYSTEM_TABLE               *SystemTable\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-BdsEntry (\r
-  IN  EFI_BDS_ARCH_PROTOCOL *This\r
-  );\r
-\r
-#endif\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BdsEntry.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BdsEntry.c
deleted file mode 100644 (file)
index a52b116..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsEntry.c\r
-\r
-Abstract:\r
-\r
-  The entry of the bds\r
-\r
---*/\r
-\r
-#include "Bds.h"\r
-#include "BdsPlatform.h"\r
-#include "FrontPage.h"\r
-\r
-EFI_BDS_ARCH_PROTOCOL_INSTANCE  gBdsInstanceTemplate = {\r
-  EFI_BDS_ARCH_PROTOCOL_INSTANCE_SIGNATURE,\r
-  NULL,\r
-  {\r
-    BdsEntry\r
-  },\r
-  0xFFFF,\r
-  TRUE,\r
-  EXTENSIVE\r
-};\r
-\r
-UINT16                          *mBootNext = NULL;\r
-\r
-EFI_HANDLE                      mBdsImageHandle;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BdsInitialize (\r
-  IN EFI_HANDLE                            ImageHandle,\r
-  IN EFI_SYSTEM_TABLE                      *SystemTable\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Install Boot Device Selection Protocol\r
-\r
-Arguments:\r
-  \r
-  (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
-\r
-Returns:\r
-\r
-  EFI_SUCEESS - BDS has finished initializing.\r
-                Rerun the \r
-                dispatcher and recall BDS.Entry\r
-\r
-  Other       - Return value from EfiLibAllocatePool()\r
-                or gBS->InstallProtocolInterface\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-\r
-  mBdsImageHandle = ImageHandle;\r
-\r
-  //\r
-  // Install protocol interface\r
-  //\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &gBdsInstanceTemplate.Handle,\r
-                  &gEfiBdsArchProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &gBdsInstanceTemplate.Bds\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return Status;\r
-}\r
-\r
-VOID\r
-BdsBootDeviceSelect (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  In the loop of attempt to boot for the boot order\r
-\r
-Arguments:\r
-  \r
-  None.\r
-\r
-Returns:\r
-\r
-  None.\r
-  \r
---*/\r
-{\r
-  EFI_STATUS        Status;\r
-  LIST_ENTRY        *Link;\r
-  BDS_COMMON_OPTION *BootOption;\r
-  UINTN             ExitDataSize;\r
-  CHAR16            *ExitData;\r
-  UINT16            Timeout;\r
-  LIST_ENTRY        BootLists;\r
-  CHAR16            Buffer[20];\r
-  BOOLEAN           BootNextExist;\r
-  LIST_ENTRY        *LinkBootNext;\r
-\r
-  //\r
-  // Got the latest boot option\r
-  //\r
-  BootNextExist = FALSE;\r
-  LinkBootNext  = NULL;\r
-  InitializeListHead (&BootLists);\r
-\r
-  //\r
-  // First check the boot next option\r
-  //\r
-  ZeroMem (Buffer, sizeof (Buffer));\r
-\r
-  if (mBootNext != NULL) {\r
-    //\r
-    // Indicate we have the boot next variable, so this time\r
-    // boot will always have this boot option\r
-    //\r
-    BootNextExist = TRUE;\r
-\r
-    //\r
-    // Clear the this variable so it's only exist in this time boot\r
-    //\r
-    gRT->SetVariable (\r
-          L"BootNext",\r
-          &gEfiGlobalVariableGuid,\r
-          EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-          0,\r
-          mBootNext\r
-          );\r
-\r
-    //\r
-    // Add the boot next boot option\r
-    //\r
-    UnicodeSPrint (Buffer, sizeof (Buffer), L"Boot%04x", *mBootNext);\r
-    BootOption = BdsLibVariableToOption (&BootLists, Buffer);\r
-  }\r
-  //\r
-  // Parse the boot order to get boot option\r
-  //\r
-  BdsLibBuildOptionFromVar (&BootLists, L"BootOrder");\r
-  Link = BootLists.ForwardLink;\r
-\r
-  //\r
-  // Parameter check, make sure the loop will be valid\r
-  //\r
-  if (Link == NULL) {\r
-    return ;\r
-  }\r
-  //\r
-  // Here we make the boot in a loop, every boot success will\r
-  // return to the front page\r
-  //\r
-  for (;;) {\r
-    //\r
-    // Check the boot option list first\r
-    //\r
-    if (Link == &BootLists) {\r
-      //\r
-      // There are two ways to enter here:\r
-      // 1. There is no active boot option, give user chance to\r
-      //    add new boot option\r
-      // 2. All the active boot option processed, and there is no\r
-      //    one is success to boot, then we back here to allow user\r
-      //    add new active boot option\r
-      //\r
-      Timeout = 0xffff;\r
-      PlatformBdsEnterFrontPage (Timeout, FALSE);\r
-      InitializeListHead (&BootLists);\r
-      BdsLibBuildOptionFromVar (&BootLists, L"BootOrder");\r
-      Link = BootLists.ForwardLink;\r
-      continue;\r
-    }\r
-    //\r
-    // Get the boot option from the link list\r
-    //\r
-    BootOption = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);\r
-\r
-    //\r
-    // According to EFI Specification, if a load option is not marked\r
-    // as LOAD_OPTION_ACTIVE, the boot manager will not automatically\r
-    // load the option.\r
-    //\r
-    if (!IS_LOAD_OPTION_TYPE (BootOption->Attribute, LOAD_OPTION_ACTIVE)) {\r
-      //\r
-      // skip the header of the link list, becuase it has no boot option\r
-      //\r
-      Link = Link->ForwardLink;\r
-      continue;\r
-    }\r
-    //\r
-    // Make sure the boot option device path connected,\r
-    // but ignore the BBS device path\r
-    //\r
-    if (DevicePathType (BootOption->DevicePath) != BBS_DEVICE_PATH) {\r
-      //\r
-      // Notes: the internal shell can not been connected with device path\r
-      // so we do not check the status here\r
-      //\r
-      BdsLibConnectDevicePath (BootOption->DevicePath);\r
-    }\r
-    //\r
-    // All the driver options should have been processed since\r
-    // now boot will be performed.\r
-    //\r
-    PERF_END (0, BDS_TOK, NULL, 0);\r
-    Status = BdsLibBootViaBootOption (BootOption, BootOption->DevicePath, &ExitDataSize, &ExitData);\r
-    if (EFI_ERROR (Status)) {\r
-      //\r
-      // Call platform action to indicate the boot fail\r
-      //\r
-      PlatformBdsBootFail (BootOption, Status, ExitData, ExitDataSize);\r
-\r
-      //\r
-      // Check the next boot option\r
-      //\r
-      Link = Link->ForwardLink;\r
-\r
-    } else {\r
-      //\r
-      // Call platform action to indicate the boot success\r
-      //\r
-      PlatformBdsBootSuccess (BootOption);\r
-\r
-      //\r
-      // Boot success, then stop process the boot order, and\r
-      // present the boot manager menu, front page\r
-      //\r
-      Timeout = 0xffff;\r
-      PlatformBdsEnterFrontPage (Timeout, FALSE);\r
-\r
-      //\r
-      // Rescan the boot option list, avoid pertential risk of the boot\r
-      // option change in front page\r
-      //\r
-      if (BootNextExist) {\r
-        LinkBootNext = BootLists.ForwardLink;\r
-      }\r
-\r
-      InitializeListHead (&BootLists);\r
-      if (LinkBootNext != NULL) {\r
-        //\r
-        // Reserve the boot next option\r
-        //\r
-        InsertTailList (&BootLists, LinkBootNext);\r
-      }\r
-\r
-      BdsLibBuildOptionFromVar (&BootLists, L"BootOrder");\r
-      Link = BootLists.ForwardLink;\r
-    }\r
-  }\r
-\r
-  return ;\r
-\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-BdsEntry (\r
-  IN EFI_BDS_ARCH_PROTOCOL  *This\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Service routine for BdsInstance->Entry(). Devices are connected, the \r
-  consoles are initialized, and the boot options are tried. \r
-\r
-Arguments:\r
-\r
-  This - Protocol Instance structure.\r
-\r
-Returns:\r
-\r
-  EFI_SUCEESS - BDS->Entry has finished executing. \r
-                \r
---*/\r
-{\r
-  EFI_BDS_ARCH_PROTOCOL_INSTANCE  *PrivateData;\r
-  LIST_ENTRY                      DriverOptionList;\r
-  LIST_ENTRY                      BootOptionList;\r
-  UINTN                           BootNextSize;\r
-\r
-  //\r
-  // Insert the performance probe\r
-  //\r
-  PERF_END (0, DXE_TOK, NULL, 0);\r
-  PERF_START (0, BDS_TOK, NULL, 0);\r
-\r
-  //\r
-  // Initialize the global system boot option and driver option\r
-  //\r
-  InitializeListHead (&DriverOptionList);\r
-  InitializeListHead (&BootOptionList);\r
-\r
-  //\r
-  // Get the BDS private data\r
-  //\r
-  PrivateData = EFI_BDS_ARCH_PROTOCOL_INSTANCE_FROM_THIS (This);\r
-\r
-  //\r
-  // Do the platform init, can be customized by OEM/IBV\r
-  //\r
-  PERF_START (0, "PlatformBds", "BDS", 0);\r
-  PlatformBdsInit (PrivateData);\r
-\r
-  //\r
-  // Set up the device list based on EFI 1.1 variables\r
-  // process Driver#### and Load the driver's in the\r
-  // driver option list\r
-  //\r
-  BdsLibBuildOptionFromVar (&DriverOptionList, L"DriverOrder");\r
-  if (!IsListEmpty (&DriverOptionList)) {\r
-    BdsLibLoadDrivers (&DriverOptionList);\r
-  }\r
-  //\r
-  // Check if we have the boot next option\r
-  //\r
-  mBootNext = BdsLibGetVariableAndSize (\r
-                L"BootNext",\r
-                &gEfiGlobalVariableGuid,\r
-                &BootNextSize\r
-                );\r
-\r
-  //\r
-  // Setup some platform policy here\r
-  //\r
-  PlatformBdsPolicyBehavior (PrivateData, &DriverOptionList, &BootOptionList);\r
-  PERF_END (0, "PlatformBds", "BDS", 0);\r
-\r
-  //\r
-  // BDS select the boot device to load OS\r
-  //\r
-  BdsBootDeviceSelect ();\r
-\r
-  //\r
-  // Only assert here since this is the right behavior, we should never\r
-  // return back to DxeCore.\r
-  //\r
-  ASSERT (FALSE);\r
-}\r
-\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BBSsupport.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BBSsupport.c
deleted file mode 100644 (file)
index 76dd54f..0000000
+++ /dev/null
@@ -1,1605 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                          \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BBSsupport.c\r
-\r
-Abstract:\r
-\r
-  This function deal with the legacy boot option, it create, delete\r
-  and manage the legacy boot option, all legacy boot option is getting from\r
-  the legacy BBS table.\r
-\r
---*/\r
-\r
-#include "BBSsupport.h"\r
-\r
-EFI_DEVICE_PATH_PROTOCOL  EndDevicePath[] = {\r
-  {\r
-    END_DEVICE_PATH_TYPE,\r
-    END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
-    {\r
-      END_DEVICE_PATH_LENGTH,\r
-      0\r
-    }\r
-  }\r
-};\r
-\r
-VOID\r
-AsciiToUnicodeSize (\r
-  IN UINT8              *a,\r
-  IN UINTN              Size,\r
-  OUT UINT16            *u\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-\r
-    Translate the first n characters of an Ascii string to\r
-    Unicode characters. The count n is indicated by parameter\r
-    Size. If Size is greater than the length of string, then\r
-    the entire string is translated.\r
-\r
-  Arguments:\r
-\r
-    a         - Pointer to input Ascii string.\r
-    Size      - The number of characters to translate.\r
-    u         - Pointer to output Unicode string buffer.\r
-\r
-  Returns:\r
-\r
-    None\r
-\r
---*/\r
-{\r
-  UINTN i;\r
-\r
-  i = 0;\r
-  while (a[i] != 0) {\r
-    u[i] = (CHAR16) a[i];\r
-    if (i == Size) {\r
-      break;\r
-    }\r
-\r
-    i++;\r
-  }\r
-  u[i] = 0;\r
-}\r
-\r
-VOID\r
-BdsBuildLegacyDevNameString (\r
-  IN BBS_TABLE                 *CurBBSEntry,\r
-  IN UINTN                     Index,\r
-  IN UINTN                     BufSize,\r
-  OUT CHAR16                   *BootString\r
-  )\r
-{\r
-  CHAR16  *Fmt;\r
-  CHAR16  *Type;\r
-  UINT8   *StringDesc;\r
-  CHAR16  temp[80];\r
-\r
-  switch (Index) {\r
-  //\r
-  // Primary Master\r
-  //\r
-  case 1:\r
-    Fmt = L"Primary Master %s";\r
-    break;\r
-\r
- //\r
- // Primary Slave\r
- //\r
-  case 2:\r
-    Fmt = L"Primary Slave %s";\r
-    break;\r
-\r
-  //\r
-  // Secondary Master\r
-  //\r
-  case 3:\r
-    Fmt = L"Secondary Master %s";\r
-    break;\r
-\r
-  //\r
-  // Secondary Slave\r
-  //\r
-  case 4:\r
-    Fmt = L"Secondary Slave %s";\r
-    break;\r
-\r
-  default:\r
-    Fmt = L"%s";\r
-    break;\r
-  }\r
-\r
-  switch (CurBBSEntry->DeviceType) {\r
-  case BBS_FLOPPY:\r
-    Type = L"Floppy";\r
-    break;\r
-\r
-  case BBS_HARDDISK:\r
-    Type = L"Harddisk";\r
-    break;\r
-\r
-  case BBS_CDROM:\r
-    Type = L"CDROM";\r
-    break;\r
-\r
-  case BBS_PCMCIA:\r
-    Type = L"PCMCIAe";\r
-    break;\r
-\r
-  case BBS_USB:\r
-    Type = L"USB";\r
-    break;\r
-\r
-  case BBS_EMBED_NETWORK:\r
-    Type = L"Network";\r
-    break;\r
-\r
-  case BBS_BEV_DEVICE:\r
-    Type = L"BEVe";\r
-    break;\r
-\r
-  case BBS_UNKNOWN:\r
-  default:\r
-    Type = L"Unknown";\r
-    break;\r
-  }\r
-  //\r
-  // If current BBS entry has its description then use it.\r
-  //\r
-  StringDesc = (UINT8 *) (UINTN) ((CurBBSEntry->DescStringSegment << 4) + CurBBSEntry->DescStringOffset);\r
-  if (NULL != StringDesc) {\r
-    //\r
-    // Only get fisrt 32 characters, this is suggested by BBS spec\r
-    //\r
-    AsciiToUnicodeSize (StringDesc, 32, temp);\r
-    Fmt   = L"%s";\r
-    Type  = temp;\r
-  }\r
-\r
-  UnicodeSPrint (BootString, BufSize, Fmt, Type);\r
-}\r
-\r
-EFI_STATUS\r
-BdsCreateLegacyBootOption (\r
-  IN BBS_TABLE                        *CurrentBbsEntry,\r
-  IN EFI_DEVICE_PATH_PROTOCOL         *CurrentBbsDevPath,\r
-  IN UINTN                            Index,\r
-  IN OUT UINT16                       **BootOrderList,\r
-  IN OUT UINTN                        *BootOrderListSize\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-\r
-    Create a legacy boot option for the specified entry of\r
-    BBS table, save it as variable, and append it to the boot\r
-    order list.\r
-\r
-  Arguments:\r
-\r
-    CurrentBbsEntry        - Pointer to current BBS table.\r
-    CurrentBbsDevPath      - Pointer to the Device Path Protocol instance of BBS\r
-    Index                  - Index of the specified entry in BBS table.\r
-    BootOrderList          - On input, the original boot order list.\r
-                             On output, the new boot order list attached with the\r
-                             created node.\r
-    BootOrderListSize      - On input, the original size of boot order list.\r
-                           - On output, the size of new boot order list.\r
-\r
-  Returns:\r
-\r
-    EFI_SUCCESS            - Boot Option successfully created.\r
-    EFI_OUT_OF_RESOURCES   - Fail to allocate necessary memory.\r
-    Other                  - Error occurs while setting variable.\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  UINT16      CurrentBootOptionNo;\r
-  UINT16      BootString[10];\r
-  UINT16      BootDesc[100];\r
-  UINT16      *NewBootOrderList;\r
-  UINTN       BufferSize;\r
-  VOID        *Buffer;\r
-  UINT8       *Ptr;\r
-  UINT16      CurrentBbsDevPathSize;\r
-  UINTN       BootOrderIndex;\r
-  UINTN       BootOrderLastIndex;\r
-  UINTN       ArrayIndex;\r
-  BOOLEAN     IndexNotFound;\r
-\r
-  if (NULL == (*BootOrderList)) {\r
-    CurrentBootOptionNo = 0;\r
-  } else {\r
-    for (ArrayIndex = 0; ArrayIndex < (UINTN) (*BootOrderListSize / sizeof (UINT16)); ArrayIndex++) {\r
-      IndexNotFound = TRUE;\r
-      for (BootOrderIndex = 0; BootOrderIndex < (UINTN) (*BootOrderListSize / sizeof (UINT16)); BootOrderIndex++) {\r
-        if ((*BootOrderList)[BootOrderIndex] == ArrayIndex) {\r
-          IndexNotFound = FALSE;\r
-          break;\r
-        }\r
-      }\r
-\r
-      if (!IndexNotFound) {\r
-        continue;\r
-      } else {\r
-        break;\r
-      }\r
-    }\r
-\r
-    CurrentBootOptionNo = (UINT16) ArrayIndex;\r
-  }\r
-\r
-  UnicodeSPrint (\r
-    BootString,\r
-    sizeof (BootString),\r
-    L"Boot%04x",\r
-    CurrentBootOptionNo\r
-    );\r
-\r
-  BdsBuildLegacyDevNameString (CurrentBbsEntry, Index, sizeof (BootDesc), BootDesc);\r
-\r
-  CurrentBbsDevPathSize = (UINT16) (GetDevicePathSize (CurrentBbsDevPath));\r
-\r
-  BufferSize = sizeof (UINT32) +\r
-    sizeof (UINT16) +\r
-    StrSize (BootDesc) +\r
-    CurrentBbsDevPathSize +\r
-    sizeof (BBS_TABLE) +\r
-    sizeof (UINT16);\r
-\r
-  Buffer = AllocateZeroPool (BufferSize);\r
-  if (Buffer == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Ptr               = (UINT8 *) Buffer;\r
-\r
-  *((UINT32 *) Ptr) = LOAD_OPTION_ACTIVE;\r
-  Ptr += sizeof (UINT32);\r
-\r
-  *((UINT16 *) Ptr) = CurrentBbsDevPathSize;\r
-  Ptr += sizeof (UINT16);\r
-\r
-  CopyMem (\r
-    Ptr,\r
-    BootDesc,\r
-    StrSize (BootDesc)\r
-    );\r
-  Ptr += StrSize (BootDesc);\r
-\r
-  CopyMem (\r
-    Ptr,\r
-    CurrentBbsDevPath,\r
-    CurrentBbsDevPathSize\r
-    );\r
-  Ptr += CurrentBbsDevPathSize;\r
-\r
-  CopyMem (\r
-    Ptr,\r
-    CurrentBbsEntry,\r
-    sizeof (BBS_TABLE)\r
-    );\r
-\r
-  Ptr += sizeof (BBS_TABLE);\r
-  *((UINT16 *) Ptr) = (UINT16) Index;\r
-\r
-  Status = gRT->SetVariable (\r
-                  BootString,\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  BufferSize,\r
-                  Buffer\r
-                  );\r
-\r
-  SafeFreePool (Buffer);\r
-  Buffer = NULL;\r
-\r
-  NewBootOrderList = AllocateZeroPool (*BootOrderListSize + sizeof (UINT16));\r
-  if (NULL == NewBootOrderList) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  if (NULL != *BootOrderList) {\r
-    CopyMem (NewBootOrderList, *BootOrderList, *BootOrderListSize);\r
-  }\r
-\r
-  SafeFreePool (*BootOrderList);\r
-\r
-  BootOrderLastIndex                    = (UINTN) (*BootOrderListSize / sizeof (UINT16));\r
-  NewBootOrderList[BootOrderLastIndex]  = CurrentBootOptionNo;\r
-  *BootOrderListSize += sizeof (UINT16);\r
-  *BootOrderList = NewBootOrderList;\r
-\r
-  return Status;\r
-}\r
-\r
-BOOLEAN\r
-BdsIsLegacyBootOption (\r
-  IN UINT8                 *BootOptionVar,\r
-  OUT BBS_TABLE            **BbsEntry,\r
-  OUT UINT16               *BbsIndex\r
-  )\r
-{\r
-  UINT8                     *Ptr;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  BOOLEAN                   Ret;\r
-  UINT16                    DevPathLen;\r
-\r
-  Ptr = BootOptionVar;\r
-  Ptr += sizeof (UINT32);\r
-  DevPathLen = *(UINT16 *) Ptr;\r
-  Ptr += sizeof (UINT16);\r
-  Ptr += StrSize ((UINT16 *) Ptr);\r
-  DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
-  if ((BBS_DEVICE_PATH == DevicePath->Type) && (BBS_BBS_DP == DevicePath->SubType)) {\r
-    Ptr += DevPathLen;\r
-    *BbsEntry = (BBS_TABLE *) Ptr;\r
-    Ptr += sizeof (BBS_TABLE);\r
-    *BbsIndex = *(UINT16 *) Ptr;\r
-    Ret       = TRUE;\r
-  } else {\r
-    *BbsEntry = NULL;\r
-    Ret       = FALSE;\r
-  }\r
-\r
-  return Ret;\r
-}\r
-\r
-EFI_STATUS\r
-BdsDeleteBootOption (\r
-  IN UINTN                       OptionNumber,\r
-  IN OUT UINT16                  *BootOrder,\r
-  IN OUT UINTN                   *BootOrderSize\r
-  )\r
-{\r
-  UINT16      BootOption[100];\r
-  UINTN       Index;\r
-  EFI_STATUS  Status;\r
-  UINTN       Index2Del;\r
-\r
-  Status    = EFI_SUCCESS;\r
-  Index2Del = 0;\r
-\r
-  UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", OptionNumber);\r
-  Status = EfiLibDeleteVariable (BootOption, &gEfiGlobalVariableGuid);\r
-  //\r
-  // adjust boot order array\r
-  //\r
-  for (Index = 0; Index < *BootOrderSize / sizeof (UINT16); Index++) {\r
-    if (BootOrder[Index] == OptionNumber) {\r
-      Index2Del = Index;\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (Index != *BootOrderSize / sizeof (UINT16)) {\r
-    for (Index = 0; Index < *BootOrderSize / sizeof (UINT16) - 1; Index++) {\r
-      if (Index >= Index2Del) {\r
-        BootOrder[Index] = BootOrder[Index + 1];\r
-      }\r
-    }\r
-\r
-    *BootOrderSize -= sizeof (UINT16);\r
-  }\r
-\r
-  return Status;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-BdsDeleteAllInvalidLegacyBootOptions (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-\r
-    Delete all the invalid legacy boot options.\r
-\r
-  Arguments:\r
-\r
-    None.\r
-\r
-  Returns:\r
-\r
-    EFI_SUCCESS            - All invalide legacy boot options are deleted.\r
-    EFI_OUT_OF_RESOURCES   - Fail to allocate necessary memory.\r
-    EFI_NOT_FOUND          - Fail to retrive variable of boot order.\r
-    Other                  - Error occurs while setting variable or locating\r
-                             protocol.\r
-\r
---*/\r
-{\r
-  UINT16                    *BootOrder;\r
-  UINT8                     *BootOptionVar;\r
-  UINTN                     BootOrderSize;\r
-  UINTN                     BootOptionSize;\r
-  EFI_STATUS                Status;\r
-  UINT16                    HddCount;\r
-  UINT16                    BbsCount;\r
-  HDD_INFO                  *LocalHddInfo;\r
-  BBS_TABLE                 *LocalBbsTable;\r
-  BBS_TABLE                 *BbsEntry;\r
-  UINT16                    BbsIndex;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  UINTN                     Index;\r
-  UINT16                    BootOption[10];\r
-  UINT16                    BootDesc[100];\r
-  BOOLEAN                   DescStringMatch;\r
-\r
-  Status        = EFI_SUCCESS;\r
-  BootOrder     = NULL;\r
-  BootOrderSize = 0;\r
-  HddCount      = 0;\r
-  BbsCount      = 0;\r
-  LocalHddInfo  = NULL;\r
-  LocalBbsTable = NULL;\r
-  BbsEntry      = NULL;\r
-\r
-  Status        = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID**) &LegacyBios);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  LegacyBios->GetBbsInfo (\r
-                LegacyBios,\r
-                &HddCount,\r
-                &LocalHddInfo,\r
-                &BbsCount,\r
-                &LocalBbsTable\r
-                );\r
-\r
-  BootOrder = BdsLibGetVariableAndSize (\r
-                L"BootOrder",\r
-                &gEfiGlobalVariableGuid,\r
-                &BootOrderSize\r
-                );\r
-  if (NULL == BootOrder) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  Index = 0;\r
-  while (Index < BootOrderSize / sizeof (UINT16)) {\r
-    UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);\r
-    BootOptionVar = BdsLibGetVariableAndSize (\r
-                      BootOption,\r
-                      &gEfiGlobalVariableGuid,\r
-                      &BootOptionSize\r
-                      );\r
-    if (NULL == BootOptionVar) {\r
-      SafeFreePool (BootOrder);\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, &BbsIndex)) {\r
-      SafeFreePool (BootOptionVar);\r
-      Index++;\r
-      continue;\r
-    }\r
\r
-    //\r
-    // Check if BBS Description String is changed\r
-    //\r
-    DescStringMatch = FALSE;\r
-    \r
-    BdsBuildLegacyDevNameString (\r
-      &LocalBbsTable[BbsIndex], \r
-      BbsIndex, \r
-      sizeof(BootDesc), \r
-      BootDesc\r
-      );\r
-    \r
-    if (StrCmp (BootDesc, (UINT16*)(BootOptionVar + sizeof (UINT32) + sizeof (UINT16))) == 0) {\r
-      DescStringMatch = TRUE;\r
-    }\r
-\r
-    if (!((LocalBbsTable[BbsIndex].BootPriority == BBS_IGNORE_ENTRY) ||\r
-          (LocalBbsTable[BbsIndex].BootPriority == BBS_DO_NOT_BOOT_FROM) ||\r
-          (LocalBbsTable[BbsIndex].BootPriority == BBS_LOWEST_PRIORITY)) &&\r
-        (LocalBbsTable[BbsIndex].DeviceType == BbsEntry->DeviceType) &&\r
-        DescStringMatch) {\r
-      Index++;\r
-      continue;\r
-    }\r
-\r
-    SafeFreePool (BootOptionVar);\r
-    //\r
-    // should delete\r
-    //\r
-    BdsDeleteBootOption (\r
-      BootOrder[Index],\r
-      BootOrder,\r
-      &BootOrderSize\r
-      );\r
-  }\r
-\r
-  if (BootOrderSize) {\r
-    Status = gRT->SetVariable (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    BootOrderSize,\r
-                    BootOrder\r
-                    );\r
-  } else {\r
-    EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);\r
-  }\r
-\r
-  SafeFreePool (BootOrder);\r
-\r
-  return Status;\r
-}\r
-\r
-BOOLEAN\r
-BdsFindLegacyBootOptionByDevType (\r
-  IN UINT16                 *BootOrder,\r
-  IN UINTN                  BootOptionNum,\r
-  IN UINT16                 DevType,\r
-  OUT UINT32                *Attribute,\r
-  OUT UINT16                *BbsIndex,\r
-  OUT UINTN                 *OptionNumber\r
-  )\r
-{\r
-  UINTN     Index;\r
-  UINTN     BootOrderIndex;\r
-  UINT16    BootOption[100];\r
-  UINTN     BootOptionSize;\r
-  UINT8     *BootOptionVar;\r
-  BBS_TABLE *BbsEntry;\r
-  BOOLEAN   Found;\r
-\r
-  BbsEntry  = NULL;\r
-  Found     = FALSE;\r
-\r
-  if (NULL == BootOrder) {\r
-    return Found;\r
-  }\r
-\r
-  for (BootOrderIndex = 0; BootOrderIndex < BootOptionNum; BootOrderIndex++) {\r
-    Index = (UINTN) BootOrder[BootOrderIndex];\r
-    UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", Index);\r
-    BootOptionVar = BdsLibGetVariableAndSize (\r
-                      BootOption,\r
-                      &gEfiGlobalVariableGuid,\r
-                      &BootOptionSize\r
-                      );\r
-    if (NULL == BootOptionVar) {\r
-      continue;\r
-    }\r
-\r
-    if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, BbsIndex)) {\r
-      SafeFreePool (BootOptionVar);\r
-      continue;\r
-    }\r
-\r
-    if (BbsEntry->DeviceType != DevType) {\r
-      SafeFreePool (BootOptionVar);\r
-      continue;\r
-    }\r
-\r
-    *Attribute    = *(UINT32 *) BootOptionVar;\r
-    *OptionNumber = Index;\r
-    Found         = TRUE;\r
-    SafeFreePool (BootOptionVar);\r
-    break;\r
-  }\r
-\r
-  return Found;\r
-}\r
-\r
-EFI_STATUS\r
-BdsCreateOneLegacyBootOption (\r
-  IN BBS_TABLE              *BbsItem,\r
-  IN UINTN                  Index,\r
-  IN OUT UINT16             **BootOrderList,\r
-  IN OUT UINTN              *BootOrderListSize\r
-  )\r
-{\r
-  BBS_BBS_DEVICE_PATH       BbsDevPathNode;\r
-  EFI_STATUS                Status;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevPath;\r
-\r
-  DevPath                       = NULL;\r
-\r
-  BbsDevPathNode.Header.Type    = BBS_DEVICE_PATH;\r
-  BbsDevPathNode.Header.SubType = BBS_BBS_DP;\r
-  SetDevicePathNodeLength (&BbsDevPathNode.Header, sizeof (BBS_BBS_DEVICE_PATH));\r
-  BbsDevPathNode.DeviceType = BbsItem->DeviceType;\r
-  CopyMem (&BbsDevPathNode.StatusFlag, &BbsItem->StatusFlags, sizeof (UINT16));\r
-\r
-  DevPath = AppendDevicePathNode (\r
-              EndDevicePath,\r
-              (EFI_DEVICE_PATH_PROTOCOL *) &BbsDevPathNode\r
-              );\r
-  if (NULL == DevPath) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Status = BdsCreateLegacyBootOption (\r
-            BbsItem,\r
-            DevPath,\r
-            Index,\r
-            BootOrderList,\r
-            BootOrderListSize\r
-            );\r
-  BbsItem->BootPriority = 0x00;\r
-\r
-  gBS->FreePool (DevPath);\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsAddNonExistingLegacyBootOptions (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Add the legacy boot options from BBS table if they do not exist.\r
-\r
-Arguments:\r
-\r
-  None.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS       - The boot options are added successfully or they are already in boot options.\r
-  others            - An error occurred when creating legacy boot options.\r
-\r
---*/\r
-{\r
-  UINT16                    *BootOrder;\r
-  UINTN                     BootOrderSize;\r
-  EFI_STATUS                Status;\r
-  UINT16                    HddCount;\r
-  UINT16                    BbsCount;\r
-  HDD_INFO                  *LocalHddInfo;\r
-  BBS_TABLE                 *LocalBbsTable;\r
-  UINT16                    BbsIndex;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  UINTN                     Index;\r
-  UINT32                    Attribute;\r
-  UINTN                     OptionNumber;\r
-  BOOLEAN                   Ret;\r
-\r
-  BootOrder     = NULL;\r
-  HddCount      = 0;\r
-  BbsCount      = 0;\r
-  LocalHddInfo  = NULL;\r
-  LocalBbsTable = NULL;\r
-\r
-  Status        = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID**)&LegacyBios);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  LegacyBios->GetBbsInfo (\r
-                LegacyBios,\r
-                &HddCount,\r
-                &LocalHddInfo,\r
-                &BbsCount,\r
-                &LocalBbsTable\r
-                );\r
-\r
-  BootOrder = BdsLibGetVariableAndSize (\r
-                L"BootOrder",\r
-                &gEfiGlobalVariableGuid,\r
-                &BootOrderSize\r
-                );\r
-  if (NULL == BootOrder) {\r
-    BootOrderSize = 0;\r
-  }\r
-\r
-  for (Index = 0; Index < BbsCount; Index++) {\r
-    if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||\r
-        (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM)\r
-        ) {\r
-      continue;\r
-    }\r
-\r
-    Ret = BdsFindLegacyBootOptionByDevType (\r
-            BootOrder,\r
-            BootOrderSize / sizeof (UINT16),\r
-            LocalBbsTable[Index].DeviceType,\r
-            &Attribute,\r
-            &BbsIndex,\r
-            &OptionNumber\r
-            );\r
-    if (Ret && (Attribute & LOAD_OPTION_ACTIVE) != 0) {\r
-      continue;\r
-    }\r
-\r
-    if (Ret) {\r
-      if (Index != BbsIndex) {\r
-        BdsDeleteBootOption (\r
-          OptionNumber,\r
-          BootOrder,\r
-          &BootOrderSize\r
-          );\r
-      } else {\r
-        continue;\r
-      }\r
-    }\r
-    //\r
-    // Not found such type of legacy device in boot options or we found but it's disabled\r
-    // so we have to create one and put it to the tail of boot order list\r
-    //\r
-    Status = BdsCreateOneLegacyBootOption (\r
-              &LocalBbsTable[Index],\r
-              Index,\r
-              &BootOrder,\r
-              &BootOrderSize\r
-              );\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (BootOrderSize > 0) {\r
-    Status = gRT->SetVariable (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    BootOrderSize,\r
-                    BootOrder\r
-                    );\r
-  } else {\r
-    EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);\r
-  }\r
-\r
-  if (BootOrder != NULL) {\r
-    SafeFreePool (BootOrder);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-UINT16 *\r
-BdsFillDevOrderBuf (\r
-  IN BBS_TABLE                    *BbsTable,\r
-  IN BBS_TYPE                     BbsType,\r
-  IN UINTN                        BbsCount,\r
-  IN UINT16                       *Buf\r
-  )\r
-{\r
-  UINTN Index;\r
-\r
-  for (Index = 0; Index < BbsCount; Index++) {\r
-    if (BbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) {\r
-      continue;\r
-    }\r
-\r
-    if (BbsTable[Index].DeviceType != BbsType) {\r
-      continue;\r
-    }\r
-\r
-    *Buf = (UINT16) (Index & 0xFF);\r
-    Buf++;\r
-  }\r
-\r
-  return Buf;\r
-}\r
-\r
-EFI_STATUS\r
-BdsCreateDevOrder (\r
-  IN BBS_TABLE                  *BbsTable,\r
-  IN UINT16                     BbsCount\r
-  )\r
-{\r
-  UINTN       Index;\r
-  UINTN       FDCount;\r
-  UINTN       HDCount;\r
-  UINTN       CDCount;\r
-  UINTN       NETCount;\r
-  UINTN       BEVCount;\r
-  UINTN       TotalSize;\r
-  UINTN       HeaderSize;\r
-  UINT8       *DevOrder;\r
-  UINT8       *Ptr;\r
-  EFI_STATUS  Status;\r
-\r
-  FDCount     = 0;\r
-  HDCount     = 0;\r
-  CDCount     = 0;\r
-  NETCount    = 0;\r
-  BEVCount    = 0;\r
-  TotalSize   = 0;\r
-  HeaderSize  = sizeof (BBS_TYPE) + sizeof (UINT16);\r
-  DevOrder    = NULL;\r
-  Ptr         = NULL;\r
-  Status      = EFI_SUCCESS;\r
-\r
-  for (Index = 0; Index < BbsCount; Index++) {\r
-    if (BbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) {\r
-      continue;\r
-    }\r
-\r
-    switch (BbsTable[Index].DeviceType) {\r
-    case BBS_FLOPPY:\r
-      FDCount++;\r
-      break;\r
-\r
-    case BBS_HARDDISK:\r
-      HDCount++;\r
-      break;\r
-\r
-    case BBS_CDROM:\r
-      CDCount++;\r
-      break;\r
-\r
-    case BBS_EMBED_NETWORK:\r
-      NETCount++;\r
-      break;\r
-\r
-    case BBS_BEV_DEVICE:\r
-      BEVCount++;\r
-      break;\r
-\r
-    default:\r
-      break;\r
-    }\r
-  }\r
-\r
-  TotalSize += (HeaderSize + sizeof (UINT16) * FDCount);\r
-  TotalSize += (HeaderSize + sizeof (UINT16) * HDCount);\r
-  TotalSize += (HeaderSize + sizeof (UINT16) * CDCount);\r
-  TotalSize += (HeaderSize + sizeof (UINT16) * NETCount);\r
-  TotalSize += (HeaderSize + sizeof (UINT16) * BEVCount);\r
-\r
-  DevOrder = AllocateZeroPool (TotalSize);\r
-  if (NULL == DevOrder) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Ptr                 = DevOrder;\r
-\r
-  *((BBS_TYPE *) Ptr) = BBS_FLOPPY;\r
-  Ptr += sizeof (BBS_TYPE);\r
-  *((UINT16 *) Ptr) = (UINT16) (sizeof (UINT16) + FDCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-  if (FDCount) {\r
-    Ptr = (UINT8 *) BdsFillDevOrderBuf (BbsTable, BBS_FLOPPY, BbsCount, (UINT16 *) Ptr);\r
-  }\r
-\r
-  *((BBS_TYPE *) Ptr) = BBS_HARDDISK;\r
-  Ptr += sizeof (BBS_TYPE);\r
-  *((UINT16 *) Ptr) = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-  if (HDCount) {\r
-    Ptr = (UINT8 *) BdsFillDevOrderBuf (BbsTable, BBS_HARDDISK, BbsCount, (UINT16 *) Ptr);\r
-  }\r
-\r
-  *((BBS_TYPE *) Ptr) = BBS_CDROM;\r
-  Ptr += sizeof (BBS_TYPE);\r
-  *((UINT16 *) Ptr) = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-  if (CDCount) {\r
-    Ptr = (UINT8 *) BdsFillDevOrderBuf (BbsTable, BBS_CDROM, BbsCount, (UINT16 *) Ptr);\r
-  }\r
-\r
-  *((BBS_TYPE *) Ptr) = BBS_EMBED_NETWORK;\r
-  Ptr += sizeof (BBS_TYPE);\r
-  *((UINT16 *) Ptr) = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-  if (NETCount) {\r
-    Ptr = (UINT8 *) BdsFillDevOrderBuf (BbsTable, BBS_EMBED_NETWORK, BbsCount, (UINT16 *) Ptr);\r
-  }\r
-\r
-  *((BBS_TYPE *) Ptr) = BBS_BEV_DEVICE;\r
-  Ptr += sizeof (BBS_TYPE);\r
-  *((UINT16 *) Ptr) = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-  if (BEVCount) {\r
-    Ptr = (UINT8 *) BdsFillDevOrderBuf (BbsTable, BBS_BEV_DEVICE, BbsCount, (UINT16 *) Ptr);\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  VarLegacyDevOrder,\r
-                  &EfiLegacyDevOrderGuid,\r
-                  VAR_FLAG,\r
-                  TotalSize,\r
-                  DevOrder\r
-                  );\r
-  SafeFreePool (DevOrder);\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsUpdateLegacyDevOrder (\r
-  VOID\r
-  )\r
-/*++\r
-Format of LegacyDevOrder variable:\r
-|-----------------------------------------------------------------------------------------------------------------\r
-| BBS_FLOPPY | Length | Index0 | Index1 | ... | BBS_HARDDISK | Length | Index0 | Index1 | ... | BBS_CDROM | Length | Index0 | ...\r
-|-----------------------------------------------------------------------------------------------------------------\r
-\r
-Length is a 16 bit integer, it indicates how many Indexes follows, including the size of itself.\r
-Index# is a 16 bit integer, the low byte of it stands for the index in BBS table\r
-           the high byte of it only have two value 0 and 0xFF, 0xFF means this device has been\r
-           disabled by user.\r
---*/\r
-{\r
-  UINT8                     *DevOrder;\r
-  UINT8                     *NewDevOrder;\r
-  UINTN                     DevOrderSize;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  EFI_STATUS                Status;\r
-  UINT16                    HddCount;\r
-  UINT16                    BbsCount;\r
-  HDD_INFO                  *LocalHddInfo;\r
-  BBS_TABLE                 *LocalBbsTable;\r
-  UINTN                     Index;\r
-  UINTN                     Index2;\r
-  UINTN                     *Idx;\r
-  UINTN                     FDCount;\r
-  UINTN                     HDCount;\r
-  UINTN                     CDCount;\r
-  UINTN                     NETCount;\r
-  UINTN                     BEVCount;\r
-  UINTN                     TotalSize;\r
-  UINTN                     HeaderSize;\r
-  UINT8                     *Ptr;\r
-  UINT8                     *NewPtr;\r
-  UINT16                    *NewFDPtr;\r
-  UINT16                    *NewHDPtr;\r
-  UINT16                    *NewCDPtr;\r
-  UINT16                    *NewNETPtr;\r
-  UINT16                    *NewBEVPtr;\r
-  UINT16                    *NewDevPtr;\r
-  UINT16                    Length;\r
-  UINT16                    tmp;\r
-  UINTN                     FDIndex;\r
-  UINTN                     HDIndex;\r
-  UINTN                     CDIndex;\r
-  UINTN                     NETIndex;\r
-  UINTN                     BEVIndex;\r
-\r
-  LocalHddInfo  = NULL;\r
-  LocalBbsTable = NULL;\r
-  Idx           = NULL;\r
-  FDCount       = 0;\r
-  HDCount       = 0;\r
-  CDCount       = 0;\r
-  NETCount      = 0;\r
-  BEVCount      = 0;\r
-  TotalSize     = 0;\r
-  HeaderSize    = sizeof (BBS_TYPE) + sizeof (UINT16);\r
-  FDIndex       = 0;\r
-  HDIndex       = 0;\r
-  CDIndex       = 0;\r
-  NETIndex      = 0;\r
-  BEVIndex      = 0;\r
-  NewDevPtr     = NULL;\r
-\r
-  Status        = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID**) &LegacyBios);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  LegacyBios->GetBbsInfo (\r
-                LegacyBios,\r
-                &HddCount,\r
-                &LocalHddInfo,\r
-                &BbsCount,\r
-                &LocalBbsTable\r
-                );\r
-\r
-  DevOrder = (UINT8 *) BdsLibGetVariableAndSize (\r
-                        VarLegacyDevOrder,\r
-                        &EfiLegacyDevOrderGuid,\r
-                        &DevOrderSize\r
-                        );\r
-  if (NULL == DevOrder) {\r
-    return BdsCreateDevOrder (LocalBbsTable, BbsCount);\r
-  }\r
-  //\r
-  // First we figure out how many boot devices with same device type respectively\r
-  //\r
-  for (Index = 0; Index < BbsCount; Index++) {\r
-    if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||\r
-        (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM) ||\r
-        (LocalBbsTable[Index].BootPriority == BBS_LOWEST_PRIORITY)\r
-        ) {\r
-      continue;\r
-    }\r
-\r
-    switch (LocalBbsTable[Index].DeviceType) {\r
-    case BBS_FLOPPY:\r
-      FDCount++;\r
-      break;\r
-\r
-    case BBS_HARDDISK:\r
-      HDCount++;\r
-      break;\r
-\r
-    case BBS_CDROM:\r
-      CDCount++;\r
-      break;\r
-\r
-    case BBS_EMBED_NETWORK:\r
-      NETCount++;\r
-      break;\r
-\r
-    case BBS_BEV_DEVICE:\r
-      BEVCount++;\r
-      break;\r
-\r
-    default:\r
-      break;\r
-    }\r
-  }\r
-\r
-  TotalSize += (HeaderSize + FDCount * sizeof (UINT16));\r
-  TotalSize += (HeaderSize + HDCount * sizeof (UINT16));\r
-  TotalSize += (HeaderSize + CDCount * sizeof (UINT16));\r
-  TotalSize += (HeaderSize + NETCount * sizeof (UINT16));\r
-  TotalSize += (HeaderSize + BEVCount * sizeof (UINT16));\r
-\r
-  NewDevOrder = AllocateZeroPool (TotalSize);\r
-  if (NULL == NewDevOrder) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  NewFDPtr  = (UINT16 *) (NewDevOrder + HeaderSize);\r
-  NewHDPtr  = (UINT16 *) ((UINT8 *) NewFDPtr + FDCount * sizeof (UINT16) + HeaderSize);\r
-  NewCDPtr  = (UINT16 *) ((UINT8 *) NewHDPtr + HDCount * sizeof (UINT16) + HeaderSize);\r
-  NewNETPtr = (UINT16 *) ((UINT8 *) NewCDPtr + CDCount * sizeof (UINT16) + HeaderSize);\r
-  NewBEVPtr = (UINT16 *) ((UINT8 *) NewNETPtr + NETCount * sizeof (UINT16) + HeaderSize);\r
-\r
-  //\r
-  // copy FD\r
-  //\r
-  Ptr                     = DevOrder;\r
-  NewPtr                  = NewDevOrder;\r
-  *((BBS_TYPE *) NewPtr)  = *((BBS_TYPE *) Ptr);\r
-  Ptr += sizeof (BBS_TYPE);\r
-  NewPtr += sizeof (BBS_TYPE);\r
-  Length                = *((UINT16 *) Ptr);\r
-  *((UINT16 *) NewPtr)  = (UINT16) (sizeof (UINT16) + FDCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-\r
-  for (Index = 0; Index < Length / sizeof (UINT16) - 1; Index++) {\r
-    if (LocalBbsTable[*Ptr].BootPriority == BBS_IGNORE_ENTRY ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_DO_NOT_BOOT_FROM ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_LOWEST_PRIORITY ||\r
-        LocalBbsTable[*Ptr].DeviceType != BBS_FLOPPY\r
-        ) {\r
-      Ptr += sizeof (UINT16);\r
-      continue;\r
-    }\r
-\r
-    NewFDPtr[FDIndex] = *(UINT16 *) Ptr;\r
-    FDIndex++;\r
-    Ptr += sizeof (UINT16);\r
-  }\r
-  //\r
-  // copy HD\r
-  //\r
-  NewPtr                  = (UINT8 *) NewHDPtr - HeaderSize;\r
-  *((BBS_TYPE *) NewPtr)  = *((BBS_TYPE *) Ptr);\r
-  Ptr += sizeof (BBS_TYPE);\r
-  NewPtr += sizeof (BBS_TYPE);\r
-  Length                = *((UINT16 *) Ptr);\r
-  *((UINT16 *) NewPtr)  = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-\r
-  for (Index = 0; Index < Length / sizeof (UINT16) - 1; Index++) {\r
-    if (LocalBbsTable[*Ptr].BootPriority == BBS_IGNORE_ENTRY ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_DO_NOT_BOOT_FROM ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_LOWEST_PRIORITY ||\r
-        LocalBbsTable[*Ptr].DeviceType != BBS_HARDDISK\r
-        ) {\r
-      Ptr += sizeof (UINT16);\r
-      continue;\r
-    }\r
-\r
-    NewHDPtr[HDIndex] = *(UINT16 *) Ptr;\r
-    HDIndex++;\r
-    Ptr += sizeof (UINT16);\r
-  }\r
-  //\r
-  // copy CD\r
-  //\r
-  NewPtr                  = (UINT8 *) NewCDPtr - HeaderSize;\r
-  *((BBS_TYPE *) NewPtr)  = *((BBS_TYPE *) Ptr);\r
-  Ptr += sizeof (BBS_TYPE);\r
-  NewPtr += sizeof (BBS_TYPE);\r
-  Length                = *((UINT16 *) Ptr);\r
-  *((UINT16 *) NewPtr)  = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-\r
-  for (Index = 0; Index < Length / sizeof (UINT16) - 1; Index++) {\r
-    if (LocalBbsTable[*Ptr].BootPriority == BBS_IGNORE_ENTRY ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_DO_NOT_BOOT_FROM ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_LOWEST_PRIORITY ||\r
-        LocalBbsTable[*Ptr].DeviceType != BBS_CDROM\r
-        ) {\r
-      Ptr += sizeof (UINT16);\r
-      continue;\r
-    }\r
-\r
-    NewCDPtr[CDIndex] = *(UINT16 *) Ptr;\r
-    CDIndex++;\r
-    Ptr += sizeof (UINT16);\r
-  }\r
-  //\r
-  // copy NET\r
-  //\r
-  NewPtr                  = (UINT8 *) NewNETPtr - HeaderSize;\r
-  *((BBS_TYPE *) NewPtr)  = *((BBS_TYPE *) Ptr);\r
-  Ptr += sizeof (BBS_TYPE);\r
-  NewPtr += sizeof (BBS_TYPE);\r
-  Length                = *((UINT16 *) Ptr);\r
-  *((UINT16 *) NewPtr)  = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-\r
-  for (Index = 0; Index < Length / sizeof (UINT16) - 1; Index++) {\r
-    if (LocalBbsTable[*Ptr].BootPriority == BBS_IGNORE_ENTRY ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_DO_NOT_BOOT_FROM ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_LOWEST_PRIORITY ||\r
-        LocalBbsTable[*Ptr].DeviceType != BBS_EMBED_NETWORK\r
-        ) {\r
-      Ptr += sizeof (UINT16);\r
-      continue;\r
-    }\r
-\r
-    NewNETPtr[NETIndex] = *(UINT16 *) Ptr;\r
-    NETIndex++;\r
-    Ptr += sizeof (UINT16);\r
-  }\r
-  //\r
-  // copy BEV\r
-  //\r
-  NewPtr                  = (UINT8 *) NewBEVPtr - HeaderSize;\r
-  *((BBS_TYPE *) NewPtr)  = *((BBS_TYPE *) Ptr);\r
-  Ptr += sizeof (BBS_TYPE);\r
-  NewPtr += sizeof (BBS_TYPE);\r
-  Length                = *((UINT16 *) Ptr);\r
-  *((UINT16 *) NewPtr)  = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16));\r
-  Ptr += sizeof (UINT16);\r
-\r
-  for (Index = 0; Index < Length / sizeof (UINT16) - 1; Index++) {\r
-    if (LocalBbsTable[*Ptr].BootPriority == BBS_IGNORE_ENTRY ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_DO_NOT_BOOT_FROM ||\r
-        LocalBbsTable[*Ptr].BootPriority == BBS_LOWEST_PRIORITY ||\r
-        LocalBbsTable[*Ptr].DeviceType != BBS_BEV_DEVICE\r
-        ) {\r
-      Ptr += sizeof (UINT16);\r
-      continue;\r
-    }\r
-\r
-    NewBEVPtr[BEVIndex] = *(UINT16 *) Ptr;\r
-    BEVIndex++;\r
-    Ptr += sizeof (UINT16);\r
-  }\r
-\r
-  for (Index = 0; Index < BbsCount; Index++) {\r
-    if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||\r
-        (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM) ||\r
-        (LocalBbsTable[Index].BootPriority == BBS_LOWEST_PRIORITY)\r
-        ) {\r
-      continue;\r
-    }\r
-\r
-    switch (LocalBbsTable[Index].DeviceType) {\r
-    case BBS_FLOPPY:\r
-      Idx       = &FDIndex;\r
-      NewDevPtr = NewFDPtr;\r
-      break;\r
-\r
-    case BBS_HARDDISK:\r
-      Idx       = &HDIndex;\r
-      NewDevPtr = NewHDPtr;\r
-      break;\r
-\r
-    case BBS_CDROM:\r
-      Idx       = &CDIndex;\r
-      NewDevPtr = NewCDPtr;\r
-      break;\r
-\r
-    case BBS_EMBED_NETWORK:\r
-      Idx       = &NETIndex;\r
-      NewDevPtr = NewNETPtr;\r
-      break;\r
-\r
-    case BBS_BEV_DEVICE:\r
-      Idx       = &BEVIndex;\r
-      NewDevPtr = NewBEVPtr;\r
-      break;\r
-\r
-    default:\r
-      Idx = NULL;\r
-      break;\r
-    }\r
-    //\r
-    // at this point we have copied those valid indexes to new buffer\r
-    // and we should check if there is any new appeared boot device\r
-    //\r
-    if (Idx) {\r
-      for (Index2 = 0; Index2 < *Idx; Index2++) {\r
-        if ((NewDevPtr[Index2] & 0xFF) == (UINT16) Index) {\r
-          break;\r
-        }\r
-      }\r
-\r
-      if (Index2 == *Idx) {\r
-        //\r
-        // Index2 == *Idx means we didn't find Index\r
-        // so Index is a new appeared device's index in BBS table\r
-        // save it.\r
-        //\r
-        NewDevPtr[*Idx] = (UINT16) (Index & 0xFF);\r
-        (*Idx)++;\r
-      }\r
-    }\r
-  }\r
-\r
-  if (FDCount) {\r
-    //\r
-    // Just to make sure that disabled indexes are all at the end of the array\r
-    //\r
-    for (Index = 0; Index < FDIndex - 1; Index++) {\r
-      if (0xFF00 != (NewFDPtr[Index] & 0xFF00)) {\r
-        continue;\r
-      }\r
-\r
-      for (Index2 = Index + 1; Index2 < FDIndex; Index2++) {\r
-        if (0 == (NewFDPtr[Index2] & 0xFF00)) {\r
-          tmp               = NewFDPtr[Index];\r
-          NewFDPtr[Index]   = NewFDPtr[Index2];\r
-          NewFDPtr[Index2]  = tmp;\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  if (HDCount) {\r
-    //\r
-    // Just to make sure that disabled indexes are all at the end of the array\r
-    //\r
-    for (Index = 0; Index < HDIndex - 1; Index++) {\r
-      if (0xFF00 != (NewHDPtr[Index] & 0xFF00)) {\r
-        continue;\r
-      }\r
-\r
-      for (Index2 = Index + 1; Index2 < HDIndex; Index2++) {\r
-        if (0 == (NewHDPtr[Index2] & 0xFF00)) {\r
-          tmp               = NewHDPtr[Index];\r
-          NewHDPtr[Index]   = NewHDPtr[Index2];\r
-          NewHDPtr[Index2]  = tmp;\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  if (CDCount) {\r
-    //\r
-    // Just to make sure that disabled indexes are all at the end of the array\r
-    //\r
-    for (Index = 0; Index < CDIndex - 1; Index++) {\r
-      if (0xFF00 != (NewCDPtr[Index] & 0xFF00)) {\r
-        continue;\r
-      }\r
-\r
-      for (Index2 = Index + 1; Index2 < CDIndex; Index2++) {\r
-        if (0 == (NewCDPtr[Index2] & 0xFF00)) {\r
-          tmp               = NewCDPtr[Index];\r
-          NewCDPtr[Index]   = NewCDPtr[Index2];\r
-          NewCDPtr[Index2]  = tmp;\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  if (NETCount) {\r
-    //\r
-    // Just to make sure that disabled indexes are all at the end of the array\r
-    //\r
-    for (Index = 0; Index < NETIndex - 1; Index++) {\r
-      if (0xFF00 != (NewNETPtr[Index] & 0xFF00)) {\r
-        continue;\r
-      }\r
-\r
-      for (Index2 = Index + 1; Index2 < NETIndex; Index2++) {\r
-        if (0 == (NewNETPtr[Index2] & 0xFF00)) {\r
-          tmp               = NewNETPtr[Index];\r
-          NewNETPtr[Index]  = NewNETPtr[Index2];\r
-          NewNETPtr[Index2] = tmp;\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  if (BEVCount) {\r
-    //\r
-    // Just to make sure that disabled indexes are all at the end of the array\r
-    //\r
-    for (Index = 0; Index < BEVIndex - 1; Index++) {\r
-      if (0xFF00 != (NewBEVPtr[Index] & 0xFF00)) {\r
-        continue;\r
-      }\r
-\r
-      for (Index2 = Index + 1; Index2 < BEVIndex; Index2++) {\r
-        if (0 == (NewBEVPtr[Index2] & 0xFF00)) {\r
-          tmp               = NewBEVPtr[Index];\r
-          NewBEVPtr[Index]  = NewBEVPtr[Index2];\r
-          NewBEVPtr[Index2] = tmp;\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  SafeFreePool (DevOrder);\r
-\r
-  Status = gRT->SetVariable (\r
-                  VarLegacyDevOrder,\r
-                  &EfiLegacyDevOrderGuid,\r
-                  VAR_FLAG,\r
-                  TotalSize,\r
-                  NewDevOrder\r
-                  );\r
-  SafeFreePool (NewDevOrder);\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsSetBootPriority4SameTypeDev (\r
-  IN UINT16                                              DeviceType,\r
-  IN OUT BBS_TABLE                                       *LocalBbsTable,\r
-  IN OUT UINT16                                          *Priority\r
-  )\r
-/*++\r
-DeviceType           - BBS_FLOPPY, BBS_HARDDISK, BBS_CDROM and so on\r
-LocalBbsTable       - BBS table instance\r
-Priority                 - As input arg, it is the start point of boot priority, as output arg, it is the start point of boot\r
-                              priority can be used next time.\r
---*/\r
-{\r
-  UINT8   *DevOrder;\r
-\r
-  UINT8   *OrigBuffer;\r
-  UINT16  *DevIndex;\r
-  UINTN   DevOrderSize;\r
-  UINTN   DevCount;\r
-  UINTN   Index;\r
-\r
-  DevOrder = BdsLibGetVariableAndSize (\r
-              VarLegacyDevOrder,\r
-              &EfiLegacyDevOrderGuid,\r
-              &DevOrderSize\r
-              );\r
-  if (NULL == DevOrder) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  OrigBuffer = DevOrder;\r
-  while (DevOrder < OrigBuffer + DevOrderSize) {\r
-    if (DeviceType == * (BBS_TYPE *) DevOrder) {\r
-      break;\r
-    }\r
-\r
-    DevOrder += sizeof (BBS_TYPE);\r
-    DevOrder += *(UINT16 *) DevOrder;\r
-  }\r
-\r
-  if (DevOrder >= OrigBuffer + DevOrderSize) {\r
-    SafeFreePool (OrigBuffer);\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  DevOrder += sizeof (BBS_TYPE);\r
-  DevCount  = (*((UINT16 *) DevOrder) - sizeof (UINT16)) / sizeof (UINT16);\r
-  DevIndex  = (UINT16 *) (DevOrder + sizeof (UINT16));\r
-  //\r
-  // If the high byte of the DevIndex is 0xFF, it indicates that this device has been disabled.\r
-  //\r
-  for (Index = 0; Index < DevCount; Index++) {\r
-    if ((DevIndex[Index] & 0xFF00) == 0xFF00) {\r
-      //\r
-      // LocalBbsTable[DevIndex[Index] & 0xFF].BootPriority = BBS_DISABLED_ENTRY;\r
-      //\r
-    } else {\r
-      LocalBbsTable[DevIndex[Index] & 0xFF].BootPriority = *Priority;\r
-      (*Priority)++;\r
-    }\r
-  }\r
-\r
-  SafeFreePool (OrigBuffer);\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-PrintBbsTable (\r
-  IN BBS_TABLE                      *LocalBbsTable\r
-  )\r
-{\r
-  UINT16  Idx;\r
-\r
-  DEBUG ((EFI_D_ERROR, "\n"));\r
-  DEBUG ((EFI_D_ERROR, " NO  Prio bb/dd/ff cl/sc Type Stat segm:offs\n"));\r
-  DEBUG ((EFI_D_ERROR, "=============================================\n"));\r
-  for (Idx = 0; Idx < MAX_BBS_ENTRIES; Idx++) {\r
-    if ((LocalBbsTable[Idx].BootPriority == BBS_IGNORE_ENTRY) ||\r
-        (LocalBbsTable[Idx].BootPriority == BBS_DO_NOT_BOOT_FROM) ||\r
-        (LocalBbsTable[Idx].BootPriority == BBS_LOWEST_PRIORITY)\r
-        ) {\r
-      continue;\r
-    }\r
-\r
-    DEBUG (\r
-      (EFI_D_ERROR,\r
-      " %02x: %04x %02x/%02x/%02x %02x/02%x %04x %04x %04x:%04x\n",\r
-      (UINTN) Idx,\r
-      (UINTN) LocalBbsTable[Idx].BootPriority,\r
-      (UINTN) LocalBbsTable[Idx].Bus,\r
-      (UINTN) LocalBbsTable[Idx].Device,\r
-      (UINTN) LocalBbsTable[Idx].Function,\r
-      (UINTN) LocalBbsTable[Idx].Class,\r
-      (UINTN) LocalBbsTable[Idx].SubClass,\r
-      (UINTN) LocalBbsTable[Idx].DeviceType,\r
-      (UINTN) * (UINT16 *) &LocalBbsTable[Idx].StatusFlags,\r
-      (UINTN) LocalBbsTable[Idx].BootHandlerSegment,\r
-      (UINTN) LocalBbsTable[Idx].BootHandlerOffset,\r
-      (UINTN) ((LocalBbsTable[Idx].MfgStringSegment << 4) + LocalBbsTable[Idx].MfgStringOffset),\r
-      (UINTN) ((LocalBbsTable[Idx].DescStringSegment << 4) + LocalBbsTable[Idx].DescStringOffset))\r
-      );\r
-  }\r
-\r
-  DEBUG ((EFI_D_ERROR, "\n"));\r
-}\r
-\r
-EFI_STATUS\r
-BdsRefreshBbsTableForBoot (\r
-  IN BDS_COMMON_OPTION        *Entry\r
-  )\r
-{\r
-  EFI_STATUS                Status;\r
-  UINT16                    HddCount;\r
-  UINT16                    BbsCount;\r
-  HDD_INFO                  *LocalHddInfo;\r
-  BBS_TABLE                 *LocalBbsTable;\r
-  UINT16                    DevType;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  UINTN                     Index;\r
-  UINT16                    Priority;\r
-  UINT16                    *BootOrder;\r
-  UINTN                     BootOrderSize;\r
-  UINT8                     *BootOptionVar;\r
-  UINTN                     BootOptionSize;\r
-  UINT16                    BootOption[100];\r
-  UINT8                     *Ptr;\r
-  UINT16                    DevPathLen;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevPath;\r
-\r
-  HddCount      = 0;\r
-  BbsCount      = 0;\r
-  LocalHddInfo  = NULL;\r
-  LocalBbsTable = NULL;\r
-  DevType       = BBS_UNKNOWN;\r
-\r
-  Status        = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID**) &LegacyBios);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  LegacyBios->GetBbsInfo (\r
-                LegacyBios,\r
-                &HddCount,\r
-                &LocalHddInfo,\r
-                &BbsCount,\r
-                &LocalBbsTable\r
-                );\r
-  //\r
-  // First, set all the present devices' boot priority to BBS_UNPRIORITIZED_ENTRY\r
-  // We will set them according to the settings setup by user\r
-  //\r
-  for (Index = 0; Index < BbsCount; Index++) {\r
-    if (!((BBS_IGNORE_ENTRY == LocalBbsTable[Index].BootPriority) ||\r
-        (BBS_DO_NOT_BOOT_FROM == LocalBbsTable[Index].BootPriority) ||\r
-         (BBS_LOWEST_PRIORITY == LocalBbsTable[Index].BootPriority))) {\r
-      LocalBbsTable[Index].BootPriority = BBS_UNPRIORITIZED_ENTRY;\r
-    }\r
-  }\r
-  //\r
-  // boot priority always starts at 0\r
-  //\r
-  Priority = 0;\r
-  if (Entry->LoadOptionsSize == sizeof (BBS_TABLE) + sizeof (UINT16)) {\r
-    //\r
-    // If Entry stands for a legacy boot option, we prioritize the devices with the same type first.\r
-    //\r
-    DevType = ((BBS_TABLE *) Entry->LoadOptions)->DeviceType;\r
-    Status = BdsSetBootPriority4SameTypeDev (\r
-              DevType,\r
-              LocalBbsTable,\r
-              &Priority\r
-              );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-  //\r
-  // we have to set the boot priority for other BBS entries with different device types\r
-  //\r
-  BootOrder = (UINT16 *) BdsLibGetVariableAndSize (\r
-                          L"BootOrder",\r
-                          &gEfiGlobalVariableGuid,\r
-                          &BootOrderSize\r
-                          );\r
-  for (Index = 0; BootOrder && Index < BootOrderSize / sizeof (UINT16); Index++) {\r
-    UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);\r
-    BootOptionVar = BdsLibGetVariableAndSize (\r
-                      BootOption,\r
-                      &gEfiGlobalVariableGuid,\r
-                      &BootOptionSize\r
-                      );\r
-    if (NULL == BootOptionVar) {\r
-      continue;\r
-    }\r
-\r
-    Ptr = BootOptionVar;\r
-\r
-    Ptr += sizeof (UINT32);\r
-    DevPathLen = *(UINT16 *) Ptr;\r
-    Ptr += sizeof (UINT16);\r
-    Ptr += StrSize ((UINT16 *) Ptr);\r
-    DevPath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
-    if (BBS_DEVICE_PATH != DevPath->Type || BBS_BBS_DP != DevPath->SubType) {\r
-      SafeFreePool (BootOptionVar);\r
-      continue;\r
-    }\r
-\r
-    Ptr += DevPathLen;\r
-    if (DevType == ((BBS_TABLE *) Ptr)->DeviceType) {\r
-      //\r
-      // We don't want to process twice for a device type\r
-      //\r
-      SafeFreePool (BootOptionVar);\r
-      continue;\r
-    }\r
-\r
-    Status = BdsSetBootPriority4SameTypeDev (\r
-              ((BBS_TABLE *) Ptr)->DeviceType,\r
-              LocalBbsTable,\r
-              &Priority\r
-              );\r
-    SafeFreePool (BootOptionVar);\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (BootOrder) {\r
-    SafeFreePool (BootOrder);\r
-  }\r
-  //\r
-  // For debug\r
-  //\r
-  PrintBbsTable (LocalBbsTable);\r
-\r
-  return Status;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BBSsupport.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BBSsupport.h
deleted file mode 100644 (file)
index 37778f4..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BBSsupport.h\r
-\r
-Abstract:\r
-\r
-  declares interface functions\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _EFI_BDS_BBS_SUPPORT_H\r
-#define _EFI_BDS_BBS_SUPPORT_H\r
-\r
-#include "Generic/BootMaint/BootMaint.h"\r
-\r
-#ifdef EFI32\r
-#define REFRESH_LEGACY_BOOT_OPTIONS \\r
-        BdsDeleteAllInvalidLegacyBootOptions ();\\r
-        BdsAddNonExistingLegacyBootOptions (); \\r
-        BdsUpdateLegacyDevOrder ()\r
-#else\r
-#define REFRESH_LEGACY_BOOT_OPTIONS\r
-#endif\r
-\r
-VOID\r
-BdsBuildLegacyDevNameString (\r
-  IN BBS_TABLE                     *CurBBSEntry,\r
-  IN UINTN                         Index,\r
-  IN UINTN                         BufSize,\r
-  OUT CHAR16                       *BootString\r
-  );\r
-\r
-EFI_STATUS\r
-BdsDeleteAllInvalidLegacyBootOptions (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsAddNonExistingLegacyBootOptions (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Add the legacy boot options from BBS table if they do not exist.\r
-\r
-Arguments:\r
-\r
-  None.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS       - The boot options are added successfully or they are already in boot options.\r
-  others            - An error occurred when creating legacy boot options.\r
-\r
---*/\r
-;\r
-\r
-EFI_STATUS\r
-BdsUpdateLegacyDevOrder (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsRefreshBbsTableForBoot (\r
-  IN BDS_COMMON_OPTION        *Entry\r
-  );\r
-\r
-#endif\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Bm.vfr b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Bm.vfr
deleted file mode 100644 (file)
index 9b6cf5c..0000000
+++ /dev/null
@@ -1,495 +0,0 @@
-// *++\r
-//\r
-// Copyright (c) 2006, Intel Corporation                                                         \r
-// All rights reserved. This program and the accompanying materials                          \r
-// are licensed and made available under the terms and conditions of the BSD License         \r
-// which accompanies this distribution.  The full text of the license may be found at        \r
-// http://opensource.org/licenses/bsd-license.php                                            \r
-//                                                                                           \r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-// \r
-// Module Name:\r
-//\r
-//   bm.vfr \r
-// \r
-// Abstract:\r
-// \r
-//   Boot Maintenance Utility Formset\r
-// \r
-// Revision History: \r
-// \r
-// --*/\r
-\r
-#include "BdsStrDefs.h" \r
-#include "FormGuid.h"\r
-\r
-#pragma pack(1)\r
-\r
-//\r
-// This is the structure that will be used to store the \r
-// question's current value. Use it at initialize time to \r
-// set default value for each question. When using at run\r
-// time, this map is returned by the callback function,\r
-// so dynamically changing the question's value will be\r
-// possible through this mechanism\r
-//\r
-typedef struct {\r
-\r
-//\r
-// Three questions displayed at the main page\r
-// for Timeout, BootNext Variables respectively\r
-//\r
-  UINT16                    BootTimeOut;\r
-  UINT16                    BootNext;\r
-\r
-//\r
-// This is the COM1 Attributes value storage\r
-//\r
-  UINT8                     COM1BaudRate;\r
-  UINT8                     COM1DataRate;\r
-  UINT8                     COM1StopBits;\r
-  UINT8                     COM1Parity;\r
-  UINT8                     COM1TerminalType;\r
-  \r
-//\r
-// This is the COM2 Attributes value storage\r
-//\r
-  UINT8                     COM2BaudRate;\r
-  UINT8                     COM2DataRate;\r
-  UINT8                     COM2StopBits;\r
-  UINT8                     COM2Parity;\r
-  UINT8                     COM2TerminalType;\r
-\r
-// \r
-// Driver Option Add Handle page storage\r
-//\r
-  UINT16                    DriverAddHandleDesc[100];\r
-  UINT16                    DriverAddHandleOptionalData[100];\r
-  UINT8                     DriverAddActive;\r
-  UINT8                     DriverAddForceReconnect;\r
-  \r
-//\r
-// Console Input/Output/Errorout using COM port check storage\r
-//\r
-  UINT8                     ConsoleInputCOM1;\r
-  UINT8                     ConsoleInputCOM2;\r
-  UINT8                     ConsoleOutputCOM1;\r
-  UINT8                     ConsoleOutputCOM2;\r
-  UINT8                     ConsoleErrorCOM1;\r
-  UINT8                     ConsoleErrorCOM2;\r
-\r
-//\r
-// At most 100 input/output/errorout device for console storage\r
-//\r
-  UINT8                     ConsoleCheck[100];\r
-\r
-//\r
-// Boot or Driver Option Order storage\r
-//\r
-  UINT8                     OptionOrder[100];\r
-  UINT8                     DriverOptionToBeDeleted[100];\r
-\r
-//\r
-// Boot Option Delete storage\r
-// \r
-  UINT8                     BootOptionDel[100];\r
-  UINT8                     DriverOptionDel[100];\r
-  \r
-//\r
-// This is the Terminal Attributes value storage\r
-//\r
-  UINT8                     COMBaudRate;\r
-  UINT8                     COMDataRate;\r
-  UINT8                     COMStopBits;\r
-  UINT8                     COMParity;\r
-  UINT8                     COMTerminalType;\r
-  \r
-//\r
-// Legacy Device Order Selection Storage\r
-//\r
-  UINT8                     LegacyFD[100];\r
-  UINT8                     LegacyHD[100];\r
-  UINT8                     LegacyCD[100];\r
-  UINT8                     LegacyNET[100];\r
-  UINT8                     LegacyBEV[100];\r
-} BMM_FAKE_NV_DATA;\r
-#pragma pack()\r
-\r
-\r
-#define FORM_MAIN_ID                         0x0001\r
-#define FORM_BOOT_ADD_ID                     0x0002\r
-#define FORM_BOOT_DEL_ID                     0x0003\r
-#define FORM_BOOT_CHG_ID                     0x0004\r
-#define FORM_DRV_ADD_ID                      0x0005\r
-#define FORM_DRV_DEL_ID                      0x0006\r
-#define FORM_DRV_CHG_ID                      0x0007\r
-#define FORM_CON_MAIN_ID                     0x0008\r
-#define FORM_CON_IN_ID                       0x0009\r
-#define FORM_CON_OUT_ID                      0x000A\r
-#define FORM_CON_ERR_ID                      0x000B\r
-#define FORM_FILE_SEEK_ID                    0x000C\r
-#define FORM_FILE_NEW_SEEK_ID                0x000D\r
-#define FORM_DRV_ADD_FILE_ID                 0x000E\r
-#define FORM_DRV_ADD_HANDLE_ID               0x000F\r
-#define FORM_DRV_ADD_HANDLE_DESC_ID          0x0010\r
-#define FORM_BOOT_NEXT_ID                    0x0011\r
-#define FORM_TIME_OUT_ID                     0x0012\r
-#define FORM_RESET                           0x0013\r
-#define FORM_BOOT_SETUP_ID                   0x0014\r
-#define FORM_DRIVER_SETUP_ID                 0x0015\r
-#define FORM_BOOT_LEGACY_DEVICE_ID           0x0016\r
-#define FORM_CON_COM_ID                      0x0017\r
-#define FORM_CON_COM_SETUP_ID                0x0018\r
-#define FORM_SET_FD_ORDER_ID                 0x0019\r
-#define FORM_SET_HD_ORDER_ID                 0x001A\r
-#define FORM_SET_CD_ORDER_ID                 0x001B\r
-#define FORM_SET_NET_ORDER_ID                0x001C\r
-#define FORM_SET_BEV_ORDER_ID                0x001D\r
-                                                                       \r
-#define KEY_VALUE_BOOT_FROM_FILE             0x0092\r
-\r
-formset \r
-  guid = MAIN_FORMSET_GUID,\r
-  title = STRING_TOKEN(STR_FORM_MAIN_TITLE),  // uint8 opcode, uint8 length, guid Handle, uint16 Title\r
-  help = STRING_TOKEN(STR_NULL_STRING),\r
-  class = 0,      \r
-  subclass = 0,\r
-\r
-  form formid = FORM_MAIN_ID,\r
-       title = STRING_TOKEN(STR_FORM_MAIN_TITLE);\r
-\r
-    goto FORM_BOOT_SETUP_ID,\r
-         prompt = STRING_TOKEN(STR_FORM_BOOT_SETUP_TITLE),\r
-         help = STRING_TOKEN(STR_FORM_BOOT_SETUP_HELP),\r
-         flags = INTERACTIVE | NV_ACCESS,\r
-         key = FORM_BOOT_SETUP_ID;\r
-\r
-    subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
-\r
-    goto FORM_DRIVER_SETUP_ID,\r
-         prompt = STRING_TOKEN(STR_FORM_DRIVER_SETUP_TITLE),\r
-         help = STRING_TOKEN(STR_FORM_DRIVER_SETUP_HELP),\r
-         flags = INTERACTIVE | NV_ACCESS,\r
-         key = FORM_DRIVER_SETUP_ID;\r
-\r
-    subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
-\r
-    goto FORM_CON_MAIN_ID,\r
-         prompt = STRING_TOKEN(STR_FORM_CON_MAIN_TITLE),\r
-         help = STRING_TOKEN(STR_FORM_CON_MAIN_HELP),\r
-         flags = INTERACTIVE | NV_ACCESS,\r
-         key = FORM_CON_MAIN_ID;\r
-   \r
-    subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
-\r
-    text \r
-         help   = STRING_TOKEN(STR_BOOT_FROM_FILE_HELP),  \r
-         text   = STRING_TOKEN(STR_BOOT_FROM_FILE),\r
-         text   = STRING_TOKEN(STR_NULL_STRING),\r
-         flags  = INTERACTIVE | NV_ACCESS,\r
-         key    = KEY_VALUE_BOOT_FROM_FILE;\r
-\r
-    subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
-\r
-//    label FORM_MAIN_ID;\r
-\r
-    goto FORM_BOOT_NEXT_ID,\r
-         prompt = STRING_TOKEN(STR_FORM_BOOT_NEXT_TITLE),\r
-         help = STRING_TOKEN(STR_FORM_BOOT_NEXT_HELP),\r
-         flags = INTERACTIVE | NV_ACCESS,\r
-         key = FORM_BOOT_NEXT_ID;            \r
-\r
-    goto FORM_TIME_OUT_ID,\r
-         prompt = STRING_TOKEN(STR_FORM_TIME_OUT_TITLE),\r
-         help = STRING_TOKEN(STR_FORM_TIME_OUT_HELP),\r
-         flags = INTERACTIVE | NV_ACCESS,\r
-         key = FORM_TIME_OUT_ID;\r
-         \r
-    subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
-\r
-    goto FORM_MAIN_ID,\r
-         prompt = STRING_TOKEN(STR_RESET),\r
-         help = STRING_TOKEN(STR_RESET),\r
-         flags = INTERACTIVE | NV_ACCESS,\r
-         key = FORM_RESET;\r
-         \r
-  endform;       \r
-\r
-  form formid = FORM_BOOT_SETUP_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_SETUP_TITLE);\r
-\r
-       goto FORM_MAIN_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-            help = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_MAIN_ID;\r
-\r
-       goto FORM_BOOT_ADD_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE),\r
-            help = STRING_TOKEN(STR_FORM_BOOT_ADD_HELP),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_BOOT_ADD_ID;\r
-      \r
-       goto FORM_BOOT_DEL_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_BOOT_DEL_TITLE),\r
-            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_BOOT_DEL_ID;\r
-       \r
-       goto FORM_BOOT_CHG_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE),\r
-            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_BOOT_CHG_ID;\r
-\r
-       subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
-       //\r
-          // We will add "Select Legacy Boot Floppy Drive" and "Select Legacy Boot Hard Drive" \r
-          // here dynamically\r
-          //\r
-       label FORM_BOOT_LEGACY_DEVICE_ID;\r
-\r
-  endform;       \r
-\r
-  form formid = FORM_DRIVER_SETUP_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRIVER_SETUP_TITLE);\r
-\r
-       goto FORM_MAIN_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-            help = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_MAIN_ID;\r
-\r
-       goto FORM_DRV_ADD_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_DRV_ADD_TITLE),\r
-            help = STRING_TOKEN(STR_FORM_DRV_ADD_HELP),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_DRV_ADD_ID;\r
-     \r
-       goto FORM_DRV_DEL_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_DRV_DEL_TITLE),\r
-            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_DRV_DEL_ID;\r
-       \r
-       goto FORM_DRV_CHG_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE),\r
-            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_DRV_CHG_ID;\r
-  endform;       \r
-\r
-  form formid = FORM_BOOT_ADD_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE);\r
-\r
-       label FORM_BOOT_ADD_ID;\r
-  endform;\r
-\r
-  form formid = FORM_BOOT_DEL_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_DEL_TITLE);\r
-\r
-       label FORM_BOOT_DEL_ID;\r
-  endform;\r
-\r
-  form formid = FORM_BOOT_CHG_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE);\r
-\r
-       label FORM_BOOT_CHG_ID;\r
-       \r
-       //\r
-       // This tag is added for bypassing issue of setup browser\r
-       // setup browser could not support dynamic form very well.\r
-       //\r
-       checkbox varid    = BMM_FAKE_NV_DATA.OptionOrder[0],\r
-           prompt   = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE),\r
-           help     = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE),  \r
-           flags    = 1,\r
-           key      = 0,\r
-       endcheckbox;\r
-      \r
-  endform;\r
-\r
-  form formid = FORM_BOOT_NEXT_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_NEXT_TITLE);\r
-\r
-       label FORM_BOOT_NEXT_ID;\r
-  endform;\r
-  \r
-  form formid = FORM_TIME_OUT_ID,\r
-       title = STRING_TOKEN(STR_FORM_TIME_OUT_TITLE);\r
-       \r
-       label FORM_TIME_OUT_ID;\r
-  endform;\r
-  \r
-  form formid = FORM_DRV_ADD_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_ADD_TITLE);\r
-\r
-       goto FORM_MAIN_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-            help = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_MAIN_ID;\r
-              \r
-       goto FORM_DRV_ADD_FILE_ID,\r
-            prompt = STRING_TOKEN(STR_FORM_DRV_ADD_FILE_TITLE),\r
-            help = STRING_TOKEN(STR_FORM_DRV_ADD_FILE_TITLE),\r
-            flags = INTERACTIVE | NV_ACCESS,\r
-            key = FORM_DRV_ADD_FILE_ID;\r
-\r
-  endform;\r
-\r
-  form formid = FORM_DRV_DEL_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_DEL_TITLE);\r
-\r
-       label FORM_DRV_DEL_ID;\r
-\r
-  endform;\r
-\r
-  form formid = FORM_DRV_CHG_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE);\r
-\r
-       label FORM_DRV_CHG_ID;\r
-      \r
-       //\r
-       // This tag is added for bypassing issue of setup browser\r
-       // setup browser could not support dynamic form very well.\r
-       //\r
-       checkbox varid    = BMM_FAKE_NV_DATA.OptionOrder[0],\r
-           prompt   = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE),\r
-           help     = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE),  \r
-           flags    = 1,\r
-           key      = 0,\r
-       endcheckbox;\r
-       \r
-  endform;\r
-\r
-  form formid = FORM_CON_MAIN_ID,\r
-       title = STRING_TOKEN(STR_FORM_CON_MAIN_TITLE);\r
-\r
-       goto FORM_MAIN_ID,\r
-       prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-       help = STRING_TOKEN(STR_FORM_GOTO_MAIN),\r
-       flags = INTERACTIVE | NV_ACCESS,\r
-       key = FORM_MAIN_ID;\r
-\r
-       goto FORM_CON_IN_ID,\r
-       prompt = STRING_TOKEN(STR_FORM_CON_IN_TITLE),\r
-       help = STRING_TOKEN(STR_FORM_CON_IN_HELP),\r
-       flags = INTERACTIVE | NV_ACCESS,\r
-       key = FORM_CON_IN_ID;\r
-\r
-       goto FORM_CON_OUT_ID,\r
-       prompt = STRING_TOKEN(STR_FORM_CON_OUT_TITLE),\r
-       help = STRING_TOKEN(STR_FORM_CON_OUT_HELP),\r
-       flags = INTERACTIVE | NV_ACCESS,\r
-       key = FORM_CON_OUT_ID;\r
-  \r
-       goto FORM_CON_ERR_ID,\r
-       prompt = STRING_TOKEN(STR_FORM_STD_ERR_TITLE),\r
-       help = STRING_TOKEN(STR_FORM_STD_ERR_HELP),\r
-       flags = INTERACTIVE | NV_ACCESS,\r
-       key = FORM_CON_ERR_ID;\r
-\r
-       goto FORM_CON_COM_ID,\r
-       prompt = STRING_TOKEN(STR_FORM_COM_TITLE),\r
-       help = STRING_TOKEN(STR_FORM_COM_HELP),\r
-       flags = INTERACTIVE | NV_ACCESS,\r
-       key = FORM_CON_COM_ID;\r
-  endform;\r
-\r
-  form formid = FORM_CON_COM_ID,\r
-       title = STRING_TOKEN(STR_FORM_COM_TITLE);\r
-\r
-       label FORM_CON_COM_ID;\r
-  endform;\r
-\r
-  form formid = FORM_CON_COM_SETUP_ID,\r
-       title = STRING_TOKEN(STR_CON_COM_SETUP);\r
-\r
-       label FORM_CON_COM_SETUP_ID;\r
-  endform;\r
-\r
-  form formid = FORM_FILE_SEEK_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE);\r
-\r
-       label FORM_FILE_SEEK_ID;\r
-  endform;\r
-\r
-  form formid = FORM_FILE_NEW_SEEK_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE);\r
-\r
-       label FORM_FILE_NEW_SEEK_ID;\r
-  endform;\r
-\r
-  form formid = FORM_DRV_ADD_FILE_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_ADD_FILE_TITLE);\r
-\r
-       label FORM_DRV_ADD_FILE_ID;\r
-  endform;\r
-\r
-  form formid = FORM_DRV_ADD_HANDLE_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_ADD_HANDLE_TITLE);\r
-\r
-       label FORM_DRV_ADD_HANDLE_ID;\r
-  endform;     \r
-\r
-  form formid = FORM_DRV_ADD_HANDLE_DESC_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_ADD_DESC_TITLE);\r
-\r
-       label FORM_DRV_ADD_HANDLE_DESC_ID;\r
-\r
-  endform;\r
-\r
-  form formid = FORM_CON_IN_ID,\r
-       title = STRING_TOKEN(STR_FORM_CON_IN_TITLE);\r
-\r
-       label FORM_CON_IN_ID;\r
-\r
-  endform;\r
-\r
-  form formid = FORM_CON_OUT_ID,\r
-       title = STRING_TOKEN(STR_FORM_CON_OUT_TITLE);\r
-\r
-       label FORM_CON_OUT_ID;\r
-\r
-  endform;\r
-\r
-  form formid = FORM_CON_ERR_ID,\r
-       title = STRING_TOKEN(STR_FORM_STD_ERR_TITLE);\r
-\r
-       label FORM_CON_ERR_ID;\r
-\r
-  endform;\r
-\r
-  form formid = FORM_SET_FD_ORDER_ID,\r
-       title = STRING_TOKEN(STR_FORM_SET_FD_ORDER_TITLE);\r
-\r
-       label FORM_SET_FD_ORDER_ID;\r
-  endform;\r
-  \r
-  form formid = FORM_SET_HD_ORDER_ID,\r
-       title = STRING_TOKEN(STR_FORM_SET_HD_ORDER_TITLE);\r
-\r
-       label FORM_SET_HD_ORDER_ID;\r
-  endform;\r
-\r
-  form formid = FORM_SET_CD_ORDER_ID,\r
-       title = STRING_TOKEN(STR_FORM_SET_CD_ORDER_TITLE);\r
-\r
-       label FORM_SET_CD_ORDER_ID;\r
-  endform;\r
-\r
-  form formid = FORM_SET_NET_ORDER_ID,\r
-       title = STRING_TOKEN(STR_FORM_SET_NET_ORDER_TITLE);\r
-\r
-       label FORM_SET_NET_ORDER_ID;\r
-  endform;\r
-\r
-  form formid = FORM_SET_BEV_ORDER_ID,\r
-       title = STRING_TOKEN(STR_FORM_SET_BEV_ORDER_TITLE);\r
-\r
-       label FORM_SET_BEV_ORDER_ID;\r
-  endform;\r
-\r
-endformset;\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BmLib.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BmLib.c
deleted file mode 100644 (file)
index e9245d2..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BmLib.c\r
-    \r
-AgBStract:\r
-\r
-  Boot Maintainence Helper functions\r
-\r
---*/\r
-\r
-#include "BootMaint.h"\r
-\r
-EFI_STATUS\r
-EfiLibLocateProtocol (\r
-  IN  EFI_GUID    *ProtocolGuid,\r
-  OUT VOID        **Interface\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Find the first instance of this Protocol \r
-  in the system and return it's interface\r
-\r
-Arguments:\r
-\r
-  ProtocolGuid    - Provides the protocol to search for\r
-  Interface       - On return, a pointer to the first interface \r
-                    that matches ProtocolGuid\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS     - A protocol instance matching ProtocolGuid was found\r
-\r
-  EFI_NOT_FOUND   - No protocol instances were found that match ProtocolGuid\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-\r
-  Status = gBS->LocateProtocol (\r
-                  ProtocolGuid,\r
-                  NULL,\r
-                  Interface\r
-                  );\r
-  return Status;\r
-}\r
-\r
-EFI_FILE_HANDLE\r
-EfiLibOpenRoot (\r
-  IN EFI_HANDLE                   DeviceHandle\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function opens and returns a file handle to the root directory of a volume.\r
-\r
-Arguments:\r
-\r
-  DeviceHandle         - A handle for a device\r
-\r
-Returns:\r
-  \r
-  A valid file handle or NULL is returned\r
-\r
---*/\r
-{\r
-  EFI_STATUS                      Status;\r
-  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Volume;\r
-  EFI_FILE_HANDLE                 File;\r
-\r
-  File = NULL;\r
-\r
-  //\r
-  // File the file system interface to the device\r
-  //\r
-  Status = gBS->HandleProtocol (\r
-                  DeviceHandle,\r
-                  &gEfiSimpleFileSystemProtocolGuid,\r
-                  (VOID *) &Volume\r
-                  );\r
-\r
-  //\r
-  // Open the root directory of the volume\r
-  //\r
-  if (!EFI_ERROR (Status)) {\r
-    Status = Volume->OpenVolume (\r
-                      Volume,\r
-                      &File\r
-                      );\r
-  }\r
-  //\r
-  // Done\r
-  //\r
-  return EFI_ERROR (Status) ? NULL : File;\r
-}\r
-\r
-BOOLEAN\r
-EfiGrowBuffer (\r
-  IN OUT EFI_STATUS   *Status,\r
-  IN OUT VOID         **Buffer,\r
-  IN UINTN            BufferSize\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-    Helper function called as part of the code needed\r
-    to allocate the proper sized buffer for various \r
-    EFI interfaces.\r
-\r
-Arguments:\r
-\r
-    Status      - Current status\r
-\r
-    Buffer      - Current allocated buffer, or NULL\r
-\r
-    BufferSize  - Current buffer size needed\r
-    \r
-Returns:\r
-    \r
-    TRUE - if the buffer was reallocated and the caller \r
-    should try the API again.\r
-\r
---*/\r
-{\r
-  BOOLEAN TryAgain;\r
-\r
-  //\r
-  // If this is an initial request, buffer will be null with a new buffer size\r
-  //\r
-  if (!*Buffer && BufferSize) {\r
-    *Status = EFI_BUFFER_TOO_SMALL;\r
-  }\r
-  //\r
-  // If the status code is "buffer too small", resize the buffer\r
-  //\r
-  TryAgain = FALSE;\r
-  if (*Status == EFI_BUFFER_TOO_SMALL) {\r
-\r
-    SafeFreePool (*Buffer);\r
-\r
-    *Buffer = AllocateZeroPool (BufferSize);\r
-\r
-    if (*Buffer) {\r
-      TryAgain = TRUE;\r
-    } else {\r
-      *Status = EFI_OUT_OF_RESOURCES;\r
-    }\r
-  }\r
-  //\r
-  // If there's an error, free the buffer\r
-  //\r
-  if (!TryAgain && EFI_ERROR (*Status) && *Buffer) {\r
-    SafeFreePool (*Buffer);\r
-    *Buffer = NULL;\r
-  }\r
-\r
-  return TryAgain;\r
-}\r
-\r
-VOID *\r
-EfiLibGetVariable (\r
-  IN CHAR16               *Name,\r
-  IN EFI_GUID             *VendorGuid\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Function returns the value of the specified variable.\r
-\r
-Arguments:\r
-  Name                - A Null-terminated Unicode string that is \r
-                        the name of the vendor's variable.\r
-\r
-  VendorGuid          - A unique identifier for the vendor.\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  UINTN VarSize;\r
-\r
-  return BdsLibGetVariableAndSize (Name, VendorGuid, &VarSize);\r
-}\r
-\r
-EFI_STATUS\r
-EfiLibDeleteVariable (\r
-  IN CHAR16   *VarName,\r
-  IN EFI_GUID *VarGuid\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Function deletes the variable specified by VarName and VarGuid.\r
-\r
-Arguments:\r
-  VarName              - A Null-terminated Unicode string that is \r
-                         the name of the vendor's variable.\r
-\r
-  VendorGuid           - A unique identifier for the vendor.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS          - The variable was found and removed\r
-\r
-  EFI_UNSUPPORTED      - The variable store was inaccessible\r
-\r
-  EFI_OUT_OF_RESOURCES - The temporary buffer was not available\r
-\r
-  EFI_NOT_FOUND        - The variable was not found\r
-\r
---*/\r
-{\r
-  VOID        *VarBuf;\r
-  EFI_STATUS  Status;\r
-\r
-  VarBuf  = EfiLibGetVariable (VarName, VarGuid);\r
-  Status  = EFI_NOT_FOUND;\r
-\r
-  if (VarBuf) {\r
-    //\r
-    // Delete variable from Storage\r
-    //\r
-    Status = gRT->SetVariable (VarName, VarGuid, VAR_FLAG, 0, NULL);\r
-    ASSERT (!EFI_ERROR (Status));\r
-    SafeFreePool (VarBuf);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *\r
-EfiLibFileSystemVolumeLabelInfo (\r
-  IN EFI_FILE_HANDLE      FHand\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function gets the file system information from an open file descriptor, \r
-  and stores it in a buffer allocated from pool.\r
-\r
-Arguments:\r
-\r
-  Fhand         - A file handle\r
-\r
-Returns:\r
-  \r
-  A pointer to a buffer with file information or NULL is returned\r
-\r
---*/\r
-{\r
-  EFI_STATUS                        Status;\r
-  EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *Buffer;\r
-  UINTN                             BufferSize;\r
-  //\r
-  // Initialize for GrowBuffer loop\r
-  //\r
-  Buffer      = NULL;\r
-  BufferSize  = SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO + 200;\r
-\r
-  //\r
-  // Call the real function\r
-  //\r
-  while (EfiGrowBuffer (&Status, (VOID **) &Buffer, BufferSize)) {\r
-    Status = FHand->GetInfo (\r
-                      FHand,\r
-                      &gEfiFileSystemVolumeLabelInfoIdGuid,\r
-                      &BufferSize,\r
-                      Buffer\r
-                      );\r
-  }\r
-\r
-  return Buffer;\r
-}\r
-\r
-CHAR16 *\r
-EfiStrDuplicate (\r
-  IN CHAR16   *Src\r
-  )\r
-{\r
-  CHAR16  *Dest;\r
-  UINTN   Size;\r
-\r
-  Size  = StrSize (Src);\r
-  Dest  = AllocateZeroPool (Size);\r
-  ASSERT (Dest != NULL);\r
-  if (Dest) {\r
-    CopyMem (Dest, Src, Size);\r
-  }\r
-\r
-  return Dest;\r
-}\r
-\r
-EFI_FILE_INFO *\r
-EfiLibFileInfo (\r
-  IN EFI_FILE_HANDLE      FHand\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function gets the file information from an open file descriptor, and stores it \r
-  in a buffer allocated from pool.\r
-\r
-Arguments:\r
-\r
-  Fhand         - A file handle\r
-\r
-Returns:\r
-  \r
-  A pointer to a buffer with file information or NULL is returned\r
-\r
---*/\r
-{\r
-  EFI_STATUS    Status;\r
-  EFI_FILE_INFO *Buffer;\r
-  UINTN         BufferSize;\r
-\r
-  //\r
-  // Initialize for GrowBuffer loop\r
-  //\r
-  Buffer      = NULL;\r
-  BufferSize  = SIZE_OF_EFI_FILE_INFO + 200;\r
-\r
-  //\r
-  // Call the real function\r
-  //\r
-  while (EfiGrowBuffer (&Status, (VOID **) &Buffer, BufferSize)) {\r
-    Status = FHand->GetInfo (\r
-                      FHand,\r
-                      &gEfiFileInfoGuid,\r
-                      &BufferSize,\r
-                      Buffer\r
-                      );\r
-  }\r
-\r
-  return Buffer;\r
-}\r
-\r
-UINTN\r
-EfiDevicePathInstanceCount (\r
-  IN EFI_DEVICE_PATH_PROTOCOL      *DevicePath\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Function is used to determine the number of device path instances \r
-  that exist in a device path.\r
-\r
-Arguments:\r
-  DevicePath           - A pointer to a device path data structure.\r
-\r
-Returns:\r
-\r
-  This function counts and returns the number of device path instances \r
-  in DevicePath.\r
-\r
---*/\r
-{\r
-  UINTN Count;\r
-  UINTN Size;\r
-\r
-  Count = 0;\r
-  while (GetNextDevicePathInstance (&DevicePath, &Size)) {\r
-    Count += 1;\r
-  }\r
-\r
-  return Count;\r
-}\r
-\r
-VOID *\r
-EfiReallocatePool (\r
-  IN VOID                 *OldPool,\r
-  IN UINTN                OldSize,\r
-  IN UINTN                NewSize\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Adjusts the size of a previously allocated buffer.\r
-\r
-Arguments:\r
-  OldPool               - A pointer to the buffer whose size is being adjusted.\r
-  OldSize               - The size of the current buffer.\r
-  NewSize               - The size of the new buffer.\r
-\r
-Returns:\r
-\r
-  EFI_SUCEESS           - The requested number of bytes were allocated.\r
-\r
-  EFI_OUT_OF_RESOURCES  - The pool requested could not be allocated.\r
-\r
-  EFI_INVALID_PARAMETER - The buffer was invalid.\r
-\r
---*/\r
-{\r
-  VOID  *NewPool;\r
-\r
-  NewPool = NULL;\r
-  if (NewSize) {\r
-    NewPool = AllocateZeroPool (NewSize);\r
-  }\r
-\r
-  if (OldPool) {\r
-    if (NewPool) {\r
-      CopyMem (NewPool, OldPool, OldSize < NewSize ? OldSize : NewSize);\r
-    }\r
-\r
-    SafeFreePool (OldPool);\r
-  }\r
-\r
-  return NewPool;\r
-}\r
-\r
-EFI_STATUS\r
-EfiLibGetStringFromToken (\r
-  IN      EFI_GUID                  *ProducerGuid,\r
-  IN      STRING_REF                Token,\r
-  OUT     CHAR16                    **String\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Acquire the string associated with the ProducerGuid and return it.\r
-\r
-Arguments:\r
-  \r
-  ProducerGuid - The Guid to search the HII database for\r
-  Token        - The token value of the string to extract\r
-  String       - The string that is extracted\r
-  \r
-Returns:\r
-\r
-  EFI_SUCCESS           -  Buffer filled with the requested forms. BufferLength\r
-                           was updated.\r
-  EFI_BUFFER_TOO_SMALL  -  The buffer provided was not large enough to allow the form to be stored.\r
-\r
---*/\r
-{\r
-  EFI_STATUS        Status;\r
-  UINT16            HandleBufferLength;\r
-  EFI_HII_HANDLE    *HiiHandleBuffer;\r
-  UINTN             StringBufferLength;\r
-  UINTN             NumberOfHiiHandles;\r
-  UINTN             Index;\r
-  UINT16            Length;\r
-  EFI_GUID          HiiGuid;\r
-  EFI_HII_PROTOCOL  *Hii;\r
-\r
-  //\r
-  // Initialize params.\r
-  //\r
-  HandleBufferLength  = 0;\r
-  HiiHandleBuffer     = NULL;\r
-  \r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiHiiProtocolGuid,\r
-                  NULL,\r
-                  (VOID**) &Hii\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    *String = NULL;\r
-    return Status;\r
-  }\r
-  //\r
-  // Get all the Hii handles\r
-  //\r
-  Status = BdsLibGetHiiHandles (Hii, &HandleBufferLength, &HiiHandleBuffer);\r
-  ASSERT_EFI_ERROR (Status);\r
-  \r
-  //\r
-  // Get the Hii Handle that matches the StructureNode->ProducerName\r
-  //\r
-  NumberOfHiiHandles = HandleBufferLength / sizeof (EFI_HII_HANDLE);\r
-  for (Index = 0; Index < NumberOfHiiHandles; Index++) {\r
-    Length = 0;\r
-    Status = ExtractDataFromHiiHandle (\r
-              HiiHandleBuffer[Index],\r
-              &Length,\r
-              NULL,\r
-              &HiiGuid\r
-              );\r
-    if (CompareGuid (ProducerGuid, &HiiGuid)) {\r
-      break;\r
-    }\r
-  }\r
-  //\r
-  // Find the string based on the current language\r
-  //\r
-  StringBufferLength  = 0x100;\r
-  *String             = AllocateZeroPool (0x100);\r
-  ASSERT (*String != NULL);\r
-\r
-  Status = Hii->GetString (\r
-                  Hii,\r
-                  HiiHandleBuffer[Index],\r
-                  Token,\r
-                  FALSE,\r
-                  NULL,\r
-                  &StringBufferLength,\r
-                  *String\r
-                  );\r
-\r
-  gBS->FreePool (HiiHandleBuffer);\r
-\r
-  return Status;\r
-}\r
-\r
-BOOLEAN\r
-TimeCompare (\r
-  IN EFI_TIME               *FirstTime,\r
-  IN EFI_TIME               *SecondTime\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Compare two EFI_TIME data.\r
-\r
-Arguments:\r
-\r
-  FirstTime         - A pointer to the first EFI_TIME data.\r
-  SecondTime        - A pointer to the second EFI_TIME data.\r
-\r
-Returns:\r
-  TRUE              The FirstTime is not later than the SecondTime.\r
-  FALSE             The FirstTime is later than the SecondTime.\r
-  \r
---*/\r
-{\r
-  if (FirstTime->Year != SecondTime->Year) {\r
-    return (BOOLEAN) (FirstTime->Year < SecondTime->Year);\r
-  } else if (FirstTime->Month != SecondTime->Month) {\r
-    return (BOOLEAN) (FirstTime->Month < SecondTime->Month);\r
-  } else if (FirstTime->Day != SecondTime->Day) {\r
-    return (BOOLEAN) (FirstTime->Day < SecondTime->Day);\r
-  } else if (FirstTime->Hour != SecondTime->Hour) {\r
-    return (BOOLEAN) (FirstTime->Hour < SecondTime->Hour);\r
-  } else if (FirstTime->Minute != SecondTime->Minute) {\r
-    return (BOOLEAN) (FirstTime->Minute < FirstTime->Minute);\r
-  } else if (FirstTime->Second != SecondTime->Second) {\r
-    return (BOOLEAN) (FirstTime->Second < SecondTime->Second);\r
-  }\r
-\r
-  return (BOOLEAN) (FirstTime->Nanosecond <= SecondTime->Nanosecond);\r
-}\r
-\r
-UINT16 *\r
-EfiLibStrFromDatahub (\r
-  IN EFI_DEVICE_PATH_PROTOCOL                 *DevPath\r
-  )\r
-{\r
-  EFI_STATUS                                  Status;\r
-  UINT16                                      *Desc;\r
-  EFI_DATA_HUB_PROTOCOL                       *Datahub;\r
-  UINT64                                      Count;\r
-  EFI_DATA_RECORD_HEADER                      *Record;\r
-  EFI_SUBCLASS_TYPE1_HEADER                   *DataHdr;\r
-  EFI_GUID                                    MiscGuid = EFI_MISC_SUBCLASS_GUID;\r
-  EFI_MISC_ONBOARD_DEVICE_DATA                *ob;\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *Port;\r
-  EFI_TIME                                    CurTime;\r
-\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiDataHubProtocolGuid,\r
-                  NULL,\r
-                  (VOID**) &Datahub\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return NULL;\r
-  }\r
-\r
-  Status = gRT->GetTime (&CurTime, NULL);\r
-  if (EFI_ERROR (Status)) {\r
-    return NULL;\r
-  }\r
-\r
-  Count = 0;\r
-  do {\r
-    Status = Datahub->GetNextRecord (Datahub, &Count, NULL, &Record);\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-\r
-    if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA && CompareGuid (&Record->DataRecordGuid, &MiscGuid)) {\r
-      //\r
-      // This record is what we need\r
-      //\r
-      DataHdr = (EFI_SUBCLASS_TYPE1_HEADER *) (Record + 1);\r
-      if (EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER == DataHdr->RecordType) {\r
-        ob = (EFI_MISC_ONBOARD_DEVICE_DATA *) (DataHdr + 1);\r
-        if (BdsLibMatchDevicePaths ((EFI_DEVICE_PATH_PROTOCOL *) &ob->OnBoardDevicePath, DevPath)) {\r
-          EfiLibGetStringFromToken (&Record->ProducerName, ob->OnBoardDeviceDescription, &Desc);\r
-          return Desc;\r
-        }\r
-      }\r
-\r
-      if (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER == DataHdr->RecordType) {\r
-        Port = (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) (DataHdr + 1);\r
-        if (BdsLibMatchDevicePaths ((EFI_DEVICE_PATH_PROTOCOL *) &Port->PortPath, DevPath)) {\r
-          EfiLibGetStringFromToken (&Record->ProducerName, Port->PortExternalConnectorDesignator, &Desc);\r
-          return Desc;\r
-        }\r
-      }\r
-    }\r
-\r
-  } while (TimeCompare (&Record->LogTime, &CurTime) && Count != 0);\r
-\r
-  return NULL;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BmString.uni b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BmString.uni
deleted file mode 100644 (file)
index f646d8b..0000000
Binary files a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BmString.uni and /dev/null differ
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.c
deleted file mode 100644 (file)
index 69da676..0000000
+++ /dev/null
@@ -1,1319 +0,0 @@
-/*++ \r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BootMaint.c\r
-    \r
-Abstract:\r
-\r
-  Boot Maintainence Main File\r
-\r
---*/\r
-\r
-#include "Generic/Bds.h"\r
-#include "BootMaint.h"\r
-#include "BdsStrDefs.h"\r
-#include "FormGuid.h"\r
-\r
-//\r
-// Form binary for Boot Maintenance\r
-//\r
-extern UINT8    BmBin[];\r
-extern UINT8    FEBin[];\r
-extern EFI_GUID gBdsStringPackGuid;\r
-extern BOOLEAN  gConnectAllHappened;\r
-\r
-EFI_GUID        EfiLegacyDevOrderGuid = EFI_LEGACY_DEV_ORDER_VARIABLE_GUID;\r
-\r
-VOID\r
-InitAllMenu (\r
-  IN  BMM_CALLBACK_DATA    *CallbackData\r
-  );\r
-\r
-VOID\r
-FreeAllMenu (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-CreateMenuStringToken (\r
-  IN BMM_CALLBACK_DATA                *CallbackData,\r
-  IN EFI_HII_HANDLE                   HiiHandle,\r
-  IN BM_MENU_OPTION                   *MenuOption\r
-  )\r
-/*++\r
-Routine Description:\r
-\r
-  Create string tokens for a menu from its help strings and display strings\r
-\r
-Arguments:\r
-\r
-  HiiHandle       - Hii Handle of the package to be updated.\r
-  \r
-  MenuOption      - The Menu whose string tokens need to be created\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS     - string tokens created successfully\r
-  \r
-  others          - contain some errors\r
-  \r
---*/\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINTN         Index;\r
-\r
-  for (Index = 0; Index < MenuOption->MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (MenuOption, Index);\r
-    CallbackData->Hii->NewString (\r
-                        CallbackData->Hii,\r
-                        NULL,\r
-                        HiiHandle,\r
-                        &NewMenuEntry->DisplayStringToken,\r
-                        NewMenuEntry->DisplayString\r
-                        );\r
-\r
-    if (NULL == NewMenuEntry->HelpString) {\r
-      NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;\r
-    } else {\r
-      CallbackData->Hii->NewString (\r
-                          CallbackData->Hii,\r
-                          NULL,\r
-                          HiiHandle,\r
-                          &NewMenuEntry->HelpStringToken,\r
-                          NewMenuEntry->HelpString\r
-                          );\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DriverCallback (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *Data,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  )\r
-/*++\r
-Routine Description:\r
-\r
-  Callback Function for boot maintenance utility user interface interaction.\r
-\r
-Arguments:\r
-\r
-  This            - File explorer callback protocol pointer.     \r
-  KeyValue        - Key value to identify the type of data to expect.\r
-  Data            - A pointer to the data being sent to the original exporting driver.\r
-  Packet          - A pointer to a packet of information which a driver passes back to the browser.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS     - Callback ended successfully.\r
-  Others          - Contain some errors.\r
-  \r
---*/\r
-{\r
-  BMM_CALLBACK_DATA *Private;\r
-  BM_MENU_ENTRY     *NewMenuEntry;\r
-  BMM_FAKE_NV_DATA  *CurrentFakeNVMap;\r
-  EFI_STATUS        Status;\r
-  UINTN             OldValue;\r
-  UINTN             NewValue;\r
-  UINTN             Number;\r
-  UINTN             Pos;\r
-  UINTN             Bit;\r
-  UINT16            NewValuePos;\r
-  UINT16            Index2;\r
-  UINT16            Index;\r
-  UINT8             *OldLegacyDev;\r
-  UINT8             *NewLegacyDev;\r
-  UINT8             *Location;\r
-  UINT8             *DisMap;\r
-  FORM_ID           FormId;\r
-\r
-  OldValue                        = 0;\r
-  NewValue                        = 0;\r
-  Number                          = 0;\r
-  OldLegacyDev                    = NULL;\r
-  NewLegacyDev                    = NULL;\r
-  NewValuePos                     = 0;\r
-  DisMap                          = NULL;\r
-\r
-  Private                         = BMM_CALLBACK_DATA_FROM_THIS (This);\r
-  UpdateData->FormCallbackHandle  = (EFI_PHYSICAL_ADDRESS) (UINTN) Private->BmmCallbackHandle;\r
-  CurrentFakeNVMap                = (BMM_FAKE_NV_DATA *) Data->NvRamMap;\r
-  Private->BmmFakeNvData          = CurrentFakeNVMap;\r
-  Location                        = (UINT8 *) &UpdateData->Data;\r
-\r
-  UpdatePageId (Private, KeyValue);\r
-\r
-  //\r
-  // need to be subtituded.\r
-  //\r
-  // Update Select FD/HD/CD/NET/BEV Order Form\r
-  //\r
-  if (FORM_SET_FD_ORDER_ID == Private->BmmPreviousPageId ||\r
-      FORM_SET_HD_ORDER_ID == Private->BmmPreviousPageId ||\r
-      FORM_SET_CD_ORDER_ID == Private->BmmPreviousPageId ||\r
-      FORM_SET_NET_ORDER_ID == Private->BmmPreviousPageId ||\r
-      FORM_SET_BEV_ORDER_ID == Private->BmmPreviousPageId ||\r
-      ((FORM_BOOT_SETUP_ID == Private->BmmPreviousPageId) &&\r
-      (KeyValue >= LEGACY_FD_QUESTION_ID) &&\r
-       (KeyValue < (LEGACY_BEV_QUESTION_ID + 100)) )\r
-      ) {\r
-\r
-    DisMap  = Private->BmmOldFakeNVData.DisableMap;\r
-\r
-    FormId  = Private->BmmPreviousPageId;\r
-    if (FormId == FORM_BOOT_SETUP_ID) {\r
-      FormId = Private->BmmCurrentPageId;\r
-    }\r
-\r
-    switch (FormId) {\r
-    case FORM_SET_FD_ORDER_ID:\r
-      Number        = (UINT16) LegacyFDMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyFD;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyFD;\r
-      break;\r
-\r
-    case FORM_SET_HD_ORDER_ID:\r
-      Number        = (UINT16) LegacyHDMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyHD;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyHD;\r
-      break;\r
-\r
-    case FORM_SET_CD_ORDER_ID:\r
-      Number        = (UINT16) LegacyCDMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyCD;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyCD;\r
-      break;\r
-\r
-    case FORM_SET_NET_ORDER_ID:\r
-      Number        = (UINT16) LegacyNETMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyNET;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyNET;\r
-      break;\r
-\r
-    case FORM_SET_BEV_ORDER_ID:\r
-      Number        = (UINT16) LegacyBEVMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyBEV;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyBEV;\r
-      break;\r
-\r
-    default:\r
-      break;\r
-    }\r
-    //\r
-    //  First, find the different position\r
-    //  if there is change, it should be only one\r
-    //\r
-    for (Index = 0; Index < Number; Index++) {\r
-      if (OldLegacyDev[Index] != NewLegacyDev[Index]) {\r
-        OldValue  = OldLegacyDev[Index];\r
-        NewValue  = NewLegacyDev[Index];\r
-        break;\r
-      }\r
-    }\r
-\r
-    if (Index != Number) {\r
-      //\r
-      // there is change, now process\r
-      //\r
-      if (0xFF == NewValue) {\r
-        //\r
-        // This item will be disable\r
-        // Just move the items behind this forward to overlap it\r
-        //\r
-        Pos = OldValue / 8;\r
-        Bit = 7 - (OldValue % 8);\r
-        DisMap[Pos] |= (UINT8) (1 << Bit);\r
-        for (Index2 = Index; Index2 < Number - 1; Index2++) {\r
-          NewLegacyDev[Index2] = NewLegacyDev[Index2 + 1];\r
-        }\r
-\r
-        NewLegacyDev[Index2] = 0xFF;\r
-      } else {\r
-        for (Index2 = 0; Index2 < Number; Index2++) {\r
-          if (Index2 == Index) {\r
-            continue;\r
-          }\r
-\r
-          if (OldLegacyDev[Index2] == NewValue) {\r
-            //\r
-            // If NewValue is in OldLegacyDev array\r
-            // remember its old position\r
-            //\r
-            NewValuePos = Index2;\r
-            break;\r
-          }\r
-        }\r
-\r
-        if (Index2 != Number) {\r
-          //\r
-          // We will change current item to an existing item\r
-          // (It's hard to describe here, please read code, it's like a cycle-moving)\r
-          //\r
-          for (Index2 = NewValuePos; Index2 != Index;) {\r
-            if (NewValuePos < Index) {\r
-              NewLegacyDev[Index2] = OldLegacyDev[Index2 + 1];\r
-              Index2++;\r
-            } else {\r
-              NewLegacyDev[Index2] = OldLegacyDev[Index2 - 1];\r
-              Index2--;\r
-            }\r
-          }\r
-        } else {\r
-          //\r
-          // If NewValue is not in OldlegacyDev array, we are changing to a disabled item\r
-          // so we should modify DisMap to reflect the change\r
-          //\r
-          Pos = NewValue / 8;\r
-          Bit = 7 - (NewValue % 8);\r
-          DisMap[Pos] &= ~ (UINT8) (1 << Bit);\r
-          if (0xFF != OldValue) {\r
-            //\r
-            // Because NewValue is a item that was disabled before\r
-            // so after changing the OldValue should be disabled\r
-            // actually we are doing a swap of enable-disable states of two items\r
-            //\r
-            Pos = OldValue / 8;\r
-            Bit = 7 - (OldValue % 8);\r
-            DisMap[Pos] |= (UINT8) (1 << Bit);\r
-          }\r
-        }\r
-      }\r
-      //\r
-      // To prevent DISABLE appears in the middle of the list\r
-      // we should perform a re-ordering\r
-      //\r
-      Index = 0;\r
-      while (Index < Number) {\r
-        if (0xFF != NewLegacyDev[Index]) {\r
-          Index++;\r
-          continue;\r
-        }\r
-\r
-        Index2 = Index;\r
-        Index2++;\r
-        while (Index2 < Number) {\r
-          if (0xFF != NewLegacyDev[Index2]) {\r
-            break;\r
-          }\r
-\r
-          Index2++;\r
-        }\r
-\r
-        if (Index2 < Number) {\r
-          NewLegacyDev[Index]   = NewLegacyDev[Index2];\r
-          NewLegacyDev[Index2]  = 0xFF;\r
-        }\r
-\r
-        Index++;\r
-      }\r
-\r
-      CopyMem (\r
-        OldLegacyDev,\r
-        NewLegacyDev,\r
-        Number\r
-        );\r
-    }\r
-  }\r
-\r
-  if (KeyValue < FILE_OPTION_OFFSET) {\r
-    if (KeyValue < NORMAL_GOTO_OFFSET) {\r
-      switch (KeyValue) {\r
-      case KEY_VALUE_BOOT_FROM_FILE:\r
-        Private->FeCurrentState = BOOT_FROM_FILE_STATE;\r
-\r
-        //\r
-        // Exit Bmm main formset to send File Explorer formset.\r
-        //\r
-        CreateCallbackPacket (Packet, EXIT_REQUIRED);\r
-\r
-        break;\r
-\r
-      case FORM_BOOT_ADD_ID:\r
-        Private->FeCurrentState = ADD_BOOT_OPTION_STATE;\r
-\r
-        //\r
-        // Exit Bmm main formset to send File Explorer formset.\r
-        //\r
-        CreateCallbackPacket (Packet, EXIT_REQUIRED);\r
-        break;\r
-\r
-      case FORM_DRV_ADD_FILE_ID:\r
-        Private->FeCurrentState = ADD_DRIVER_OPTION_STATE;\r
-\r
-        //\r
-        // Exit Bmm main formset to send File Explorer formset.\r
-        //\r
-        CreateCallbackPacket (Packet, EXIT_REQUIRED);\r
-\r
-        break;\r
-\r
-      case FORM_DRV_ADD_HANDLE_ID:\r
-        CleanUpPage (FORM_DRV_ADD_HANDLE_ID, Private);\r
-        UpdateDrvAddHandlePage (Private);\r
-        break;\r
-\r
-      case FORM_BOOT_DEL_ID:\r
-        CleanUpPage (FORM_BOOT_DEL_ID, Private);\r
-        UpdateBootDelPage (Private);\r
-        break;\r
-\r
-      case FORM_BOOT_CHG_ID:\r
-      case FORM_DRV_CHG_ID:\r
-        UpdatePageBody (KeyValue, Private);\r
-        break;\r
-\r
-      case FORM_DRV_DEL_ID:\r
-        CleanUpPage (FORM_DRV_DEL_ID, Private);\r
-        UpdateDrvDelPage (Private);\r
-        break;\r
-\r
-      case FORM_BOOT_NEXT_ID:\r
-        CleanUpPage (FORM_BOOT_NEXT_ID, Private);\r
-        UpdateBootNextPage (Private);\r
-        break;\r
-\r
-      case FORM_TIME_OUT_ID:\r
-        CleanUpPage (FORM_TIME_OUT_ID, Private);\r
-        UpdateTimeOutPage (Private);\r
-        break;\r
-\r
-      case FORM_RESET:\r
-        gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
-        return EFI_UNSUPPORTED;\r
-\r
-      case FORM_CON_IN_ID:\r
-      case FORM_CON_OUT_ID:\r
-      case FORM_CON_ERR_ID:\r
-        UpdatePageBody (KeyValue, Private);\r
-        break;\r
-\r
-      case FORM_CON_COM_ID:\r
-        CleanUpPage (FORM_CON_COM_ID, Private);\r
-        UpdateConCOMPage (Private);\r
-        break;\r
-\r
-      case FORM_SET_FD_ORDER_ID:\r
-      case FORM_SET_HD_ORDER_ID:\r
-      case FORM_SET_CD_ORDER_ID:\r
-      case FORM_SET_NET_ORDER_ID:\r
-      case FORM_SET_BEV_ORDER_ID:\r
-        CleanUpPage (KeyValue, Private);\r
-        UpdateSetLegacyDeviceOrderPage (KeyValue, Private);\r
-        break;\r
-\r
-      case KEY_VALUE_SAVE_AND_EXIT:\r
-      case KEY_VALUE_NO_SAVE_AND_EXIT:\r
-\r
-        if (KeyValue == KEY_VALUE_SAVE_AND_EXIT) {\r
-          Status = ApplyChangeHandler (Private, CurrentFakeNVMap, Private->BmmPreviousPageId);\r
-          if (EFI_ERROR (Status)) {\r
-            return Status;\r
-          }\r
-        } else if (KeyValue == KEY_VALUE_NO_SAVE_AND_EXIT) {\r
-          DiscardChangeHandler (Private, CurrentFakeNVMap);\r
-        }\r
-        //\r
-        // Tell browser not to ask for confirmation of changes,\r
-        // since we have already applied or discarded.\r
-        //\r
-        CreateCallbackPacket (Packet, NV_NOT_CHANGED);\r
-        break;\r
-\r
-      default:\r
-        break;\r
-      }\r
-    } else if ((KeyValue >= TERMINAL_OPTION_OFFSET) && (KeyValue < CONSOLE_OPTION_OFFSET)) {\r
-      Index2                    = (UINT16) (KeyValue - TERMINAL_OPTION_OFFSET);\r
-      Private->CurrentTerminal  = Index2;\r
-\r
-      CleanUpPage (FORM_CON_COM_SETUP_ID, Private);\r
-      UpdateTerminalPage (Private);\r
-\r
-    } else if (KeyValue >= HANDLE_OPTION_OFFSET) {\r
-      Index2                  = (UINT16) (KeyValue - HANDLE_OPTION_OFFSET);\r
-\r
-      NewMenuEntry            = BOpt_GetMenuEntry (&DriverMenu, Index2);\r
-      ASSERT (NewMenuEntry != NULL);\r
-      Private->HandleContext  = (BM_HANDLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-      CleanUpPage (FORM_DRV_ADD_HANDLE_DESC_ID, Private);\r
-\r
-      Private->MenuEntry                  = NewMenuEntry;\r
-      Private->LoadContext->FilePathList  = Private->HandleContext->DevicePath;\r
-\r
-      UpdateDriverAddHandleDescPage (Private);\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-ApplyChangeHandler (\r
-  IN  BMM_CALLBACK_DATA               *Private,\r
-  IN  BMM_FAKE_NV_DATA                *CurrentFakeNVMap,\r
-  IN  FORM_ID                         FormId\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function handling request to apply changes for BMM pages.\r
-\r
-Arguments:\r
-\r
-  Private          - Pointer to callback data buffer.\r
-  CurrentFakeNVMap - Pointer to buffer holding data of various values used by BMM\r
-  FormId           - ID of the form which has sent the request to apply change.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS      - Change successfully applied.\r
-  Other            - Error occurs while trying to apply changes.\r
-\r
---*/\r
-{\r
-  BM_CONSOLE_CONTEXT  *NewConsoleContext;\r
-  BM_TERMINAL_CONTEXT *NewTerminalContext;\r
-  BM_LOAD_CONTEXT     *NewLoadContext;\r
-  BM_MENU_ENTRY       *NewMenuEntry;\r
-  EFI_STATUS          Status;\r
-  UINT16              Index;\r
-\r
-  Status = EFI_SUCCESS;\r
-\r
-  switch (FormId) {\r
-  case FORM_SET_FD_ORDER_ID:\r
-  case FORM_SET_HD_ORDER_ID:\r
-  case FORM_SET_CD_ORDER_ID:\r
-  case FORM_SET_NET_ORDER_ID:\r
-  case FORM_SET_BEV_ORDER_ID:\r
-    Var_UpdateBBSOption (Private);\r
-    break;\r
-\r
-  case FORM_BOOT_DEL_ID:\r
-    for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-      NewMenuEntry            = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
-      NewLoadContext          = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewLoadContext->Deleted = CurrentFakeNVMap->BootOptionDel[Index];\r
-    }\r
-\r
-    Var_DelBootOption ();\r
-    break;\r
-\r
-  case FORM_DRV_DEL_ID:\r
-    for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
-      NewMenuEntry            = BOpt_GetMenuEntry (&DriverOptionMenu, Index);\r
-      NewLoadContext          = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewLoadContext->Deleted = CurrentFakeNVMap->DriverOptionDel[Index];\r
-    }\r
-\r
-    Var_DelDriverOption ();\r
-    break;\r
-\r
-  case FORM_BOOT_CHG_ID:\r
-    Status = Var_UpdateBootOrder (Private);\r
-    break;\r
-\r
-  case FORM_DRV_CHG_ID:\r
-    Status = Var_UpdateDriverOrder (Private);\r
-    break;\r
-\r
-  case FORM_TIME_OUT_ID:\r
-    Status = gRT->SetVariable (\r
-                    L"Timeout",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    sizeof (UINT16),\r
-                    &(CurrentFakeNVMap->BootTimeOut)\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Error;\r
-    }\r
-\r
-    Private->BmmOldFakeNVData.BootTimeOut = CurrentFakeNVMap->BootTimeOut;\r
-    break;\r
-\r
-  case FORM_BOOT_NEXT_ID:\r
-    Status = Var_UpdateBootNext (Private);\r
-    break;\r
-\r
-  case FORM_CON_COM_ID:\r
-    NewMenuEntry                      = BOpt_GetMenuEntry (&TerminalMenu, Private->CurrentTerminal);\r
-\r
-    ASSERT (NewMenuEntry != NULL);\r
-\r
-    NewTerminalContext                = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-    NewTerminalContext->BaudRateIndex = CurrentFakeNVMap->COMBaudRate;\r
-    NewTerminalContext->BaudRate      = BaudRateList[CurrentFakeNVMap->COMBaudRate].Value;\r
-    NewTerminalContext->DataBitsIndex = CurrentFakeNVMap->COMDataRate;\r
-    NewTerminalContext->DataBits      = (UINT8) DataBitsList[CurrentFakeNVMap->COMDataRate].Value;\r
-    NewTerminalContext->StopBitsIndex = CurrentFakeNVMap->COMStopBits;\r
-    NewTerminalContext->StopBits      = (UINT8) StopBitsList[CurrentFakeNVMap->COMStopBits].Value;\r
-    NewTerminalContext->ParityIndex   = CurrentFakeNVMap->COMParity;\r
-    NewTerminalContext->Parity        = (UINT8) ParityList[CurrentFakeNVMap->COMParity].Value;\r
-    NewTerminalContext->TerminalType  = CurrentFakeNVMap->COMTerminalType;\r
-\r
-    ChangeTerminalDevicePath (\r
-      NewTerminalContext->DevicePath,\r
-      FALSE\r
-      );\r
-\r
-    Var_UpdateConsoleInpOption ();\r
-    Var_UpdateConsoleOutOption ();\r
-    Var_UpdateErrorOutOption ();\r
-    break;\r
-\r
-  case FORM_CON_IN_ID:\r
-    for (Index = 0; Index < ConsoleInpMenu.MenuNumber; Index++) {\r
-      NewMenuEntry                = BOpt_GetMenuEntry (&ConsoleInpMenu, Index);\r
-      NewConsoleContext           = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewConsoleContext->IsActive = CurrentFakeNVMap->ConsoleCheck[Index];\r
-    }\r
-\r
-    for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-      NewMenuEntry                = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
-      NewTerminalContext          = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewTerminalContext->IsConIn = CurrentFakeNVMap->ConsoleCheck[Index + ConsoleInpMenu.MenuNumber];\r
-    }\r
-\r
-    Var_UpdateConsoleInpOption ();\r
-    break;\r
-\r
-  case FORM_CON_OUT_ID:\r
-    for (Index = 0; Index < ConsoleOutMenu.MenuNumber; Index++) {\r
-      NewMenuEntry                = BOpt_GetMenuEntry (&ConsoleOutMenu, Index);\r
-      NewConsoleContext           = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewConsoleContext->IsActive = CurrentFakeNVMap->ConsoleCheck[Index];\r
-    }\r
-\r
-    for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-      NewMenuEntry                  = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
-      NewTerminalContext            = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewTerminalContext->IsConOut  = CurrentFakeNVMap->ConsoleCheck[Index + ConsoleOutMenu.MenuNumber];\r
-    }\r
-\r
-    Var_UpdateConsoleOutOption ();\r
-    break;\r
-\r
-  case FORM_CON_ERR_ID:\r
-    for (Index = 0; Index < ConsoleErrMenu.MenuNumber; Index++) {\r
-      NewMenuEntry                = BOpt_GetMenuEntry (&ConsoleErrMenu, Index);\r
-      NewConsoleContext           = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewConsoleContext->IsActive = CurrentFakeNVMap->ConsoleCheck[Index];\r
-    }\r
-\r
-    for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-      NewMenuEntry                  = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
-      NewTerminalContext            = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewTerminalContext->IsStdErr  = CurrentFakeNVMap->ConsoleCheck[Index + ConsoleErrMenu.MenuNumber];\r
-    }\r
-\r
-    Var_UpdateErrorOutOption ();\r
-    break;\r
-\r
-  case FORM_DRV_ADD_HANDLE_DESC_ID:\r
-    Status = Var_UpdateDriverOption (\r
-               Private,\r
-               Private->BmmHiiHandle,\r
-               CurrentFakeNVMap->DriverAddHandleDesc,\r
-               CurrentFakeNVMap->DriverAddHandleOptionalData,\r
-               CurrentFakeNVMap->DriverAddForceReconnect\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Error;\r
-    }\r
-\r
-    BOpt_GetDriverOptions (Private);\r
-    CreateMenuStringToken (Private, Private->BmmHiiHandle, &DriverOptionMenu);\r
-    break;\r
-\r
-  default:\r
-    break;\r
-  }\r
-\r
-Error:\r
-  return Status;\r
-}\r
-\r
-VOID\r
-DiscardChangeHandler (\r
-  IN  BMM_CALLBACK_DATA               *Private,\r
-  IN  BMM_FAKE_NV_DATA                *CurrentFakeNVMap\r
-  )\r
-{\r
-  UINT16  Index;\r
-\r
-  switch (Private->BmmPreviousPageId) {\r
-  case FORM_BOOT_CHG_ID:\r
-  case FORM_DRV_CHG_ID:\r
-    CopyMem (CurrentFakeNVMap->OptionOrder, Private->BmmOldFakeNVData.OptionOrder, 100);\r
-    break;\r
-\r
-  case FORM_BOOT_DEL_ID:\r
-    for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-      CurrentFakeNVMap->BootOptionDel[Index] = 0x00;\r
-    }\r
-    break;\r
-\r
-  case FORM_DRV_DEL_ID:\r
-    for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
-      CurrentFakeNVMap->DriverOptionDel[Index] = 0x00;\r
-    }\r
-    break;\r
-\r
-  case FORM_BOOT_NEXT_ID:\r
-    CurrentFakeNVMap->BootNext = Private->BmmOldFakeNVData.BootNext;\r
-    break;\r
-\r
-  case FORM_TIME_OUT_ID:\r
-    CurrentFakeNVMap->BootTimeOut = Private->BmmOldFakeNVData.BootTimeOut;\r
-    break;\r
-\r
-  case FORM_DRV_ADD_HANDLE_DESC_ID:\r
-  case FORM_DRV_ADD_FILE_ID:\r
-  case FORM_DRV_ADD_HANDLE_ID:\r
-    CurrentFakeNVMap->DriverAddHandleDesc[0]          = 0x0000;\r
-    CurrentFakeNVMap->DriverAddHandleOptionalData[0]  = 0x0000;\r
-    break;\r
-\r
-  default:\r
-    break;\r
-  }\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-NvWrite (\r
-  IN     EFI_FORM_CALLBACK_PROTOCOL              *This,\r
-  IN     CHAR16                                  *VariableName,\r
-  IN     EFI_GUID                                *VendorGuid,\r
-  OUT    UINT32                                  Attributes OPTIONAL,\r
-  IN OUT UINTN                                   DataSize,\r
-  OUT    VOID                                    *Buffer,\r
-  OUT    BOOLEAN                                 *ResetRequired\r
-  )\r
-{\r
-  //\r
-  // Do nothing here. Just to catch the F10, we use "Apply Changes" tag to save.\r
-  //\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-InitializeBM (\r
-  VOID\r
-  )\r
-/*++\r
-Routine Description:\r
-\r
-  Initialize the Boot Maintenance Utitliy\r
-\r
-Arguments:\r
-\r
-  ImageHandle     - caller provided handle\r
-  \r
-  SystemTable     - caller provided system tables\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS     - utility ended successfully\r
-  \r
-  others          - contain some errors\r
-  \r
---*/\r
-{\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  EFI_HII_PACKAGES          *PackageList;\r
-  BMM_CALLBACK_DATA         *BmmCallbackInfo;\r
-  EFI_HII_PROTOCOL          *Hii;\r
-  EFI_HII_HANDLE            HiiHandle;\r
-  EFI_STATUS                Status;\r
-  EFI_HANDLE                Handle;\r
-  UINT8                     *Ptr;\r
-  UINT8                     *Location;\r
-\r
-  Status      = EFI_SUCCESS;\r
-  UpdateData  = NULL;\r
-  //\r
-  // Initialize EfiUtilityLib and EfiDriverLib\r
-  // Since many functions in UtilityLib must be used and\r
-  // SetupBrowser use DriverLib\r
-  //\r
-  //\r
-  // There should be only one EFI_HII_PROTOCOL Image\r
-  //\r
-  Status = EfiLibLocateProtocol (&gEfiHiiProtocolGuid, (VOID**)&Hii);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-  //\r
-  // Create CallbackData structures for Driver Callback\r
-  //\r
-  BmmCallbackInfo = AllocateZeroPool (sizeof (BMM_CALLBACK_DATA));\r
-  if (!BmmCallbackInfo) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  // Create LoadOption in BmmCallbackInfo for Driver Callback\r
-  //\r
-  Ptr = AllocateZeroPool (sizeof (BM_LOAD_CONTEXT) + sizeof (BM_FILE_CONTEXT) + sizeof (BM_HANDLE_CONTEXT) + sizeof (BM_MENU_ENTRY));\r
-  if (!Ptr) {\r
-    SafeFreePool (BmmCallbackInfo);\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  // Initialize Bmm callback data.\r
-  //\r
-  BmmCallbackInfo->LoadContext = (BM_LOAD_CONTEXT *) Ptr;\r
-  Ptr += sizeof (BM_LOAD_CONTEXT);\r
-\r
-  BmmCallbackInfo->FileContext = (BM_FILE_CONTEXT *) Ptr;\r
-  Ptr += sizeof (BM_FILE_CONTEXT);\r
-\r
-  BmmCallbackInfo->HandleContext = (BM_HANDLE_CONTEXT *) Ptr;\r
-  Ptr += sizeof (BM_HANDLE_CONTEXT);\r
-\r
-  BmmCallbackInfo->MenuEntry      = (BM_MENU_ENTRY *) Ptr;\r
-\r
-  BmmCallbackInfo->BmmFakeNvData  = &BmmCallbackInfo->BmmOldFakeNVData;\r
-\r
-  ZeroMem (BmmCallbackInfo->BmmFakeNvData, sizeof (BMM_FAKE_NV_DATA));\r
-\r
-  BmmCallbackInfo->Signature                  = BMM_CALLBACK_DATA_SIGNATURE;\r
-  BmmCallbackInfo->Hii                        = Hii;\r
-  BmmCallbackInfo->BmmDriverCallback.NvRead   = NULL;\r
-  BmmCallbackInfo->BmmDriverCallback.NvWrite  = NvWrite;\r
-  BmmCallbackInfo->BmmDriverCallback.Callback = DriverCallback;\r
-  BmmCallbackInfo->BmmPreviousPageId          = FORM_MAIN_ID;\r
-  BmmCallbackInfo->BmmCurrentPageId           = FORM_MAIN_ID;\r
-  BmmCallbackInfo->FeDriverCallback.NvRead    = NULL;\r
-  BmmCallbackInfo->FeDriverCallback.NvWrite   = NvWrite;\r
-  BmmCallbackInfo->FeDriverCallback.Callback  = FileExplorerCallback;\r
-  BmmCallbackInfo->FeCurrentState             = INACTIVE_STATE;\r
-  BmmCallbackInfo->FeDisplayContext           = UNKNOWN_CONTEXT;\r
-\r
-  //\r
-  // Install bmm callback protocol interface\r
-  //\r
-  Handle = NULL;\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &Handle,\r
-                  &gEfiFormCallbackProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &BmmCallbackInfo->BmmDriverCallback\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  BmmCallbackInfo->BmmCallbackHandle = Handle;\r
-\r
-  //\r
-  // Install file explorer callback protocol interface\r
-  //\r
-  Handle = NULL;\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &Handle,\r
-                  &gEfiFormCallbackProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &BmmCallbackInfo->FeDriverCallback\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  BmmCallbackInfo->FeCallbackHandle = Handle;\r
-\r
-  //\r
-  // Post our VFR to the HII database.\r
-  //\r
-  PackageList = PreparePackages (1, &gBdsStringPackGuid, BmBin);\r
-  Status      = Hii->NewPack (Hii, PackageList, &HiiHandle);\r
-  gBS->FreePool (PackageList);\r
-\r
-  BmmCallbackInfo->BmmHiiHandle = HiiHandle;\r
-\r
-  PackageList                   = PreparePackages (1, &gBdsStringPackGuid, FEBin);\r
-  Status                        = Hii->NewPack (Hii, PackageList, &HiiHandle);\r
-  gBS->FreePool (PackageList);\r
-\r
-  BmmCallbackInfo->FeHiiHandle = HiiHandle;\r
-\r
-  //\r
-  // Allocate space for creation of Buffer\r
-  //\r
-  UpdateData = AllocateZeroPool (UPDATE_DATA_SIZE);\r
-  if (!UpdateData) {\r
-    SafeFreePool (BmmCallbackInfo->LoadContext);\r
-    SafeFreePool (BmmCallbackInfo);\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  // Initialize UpdateData structure\r
-  //\r
-  RefreshUpdateData (TRUE, (EFI_PHYSICAL_ADDRESS) (UINTN) BmmCallbackInfo->BmmCallbackHandle, FALSE, 0, 0);\r
-\r
-  Location = (UINT8 *) &UpdateData->Data;\r
-\r
-  InitializeStringDepository ();\r
-\r
-  InitAllMenu (BmmCallbackInfo);\r
-\r
-  CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &ConsoleInpMenu);\r
-  CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &ConsoleOutMenu);\r
-  CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &ConsoleErrMenu);\r
-  CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &BootOptionMenu);\r
-  CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &DriverOptionMenu);\r
-  CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &TerminalMenu);\r
-  CreateMenuStringToken (BmmCallbackInfo, BmmCallbackInfo->BmmHiiHandle, &DriverMenu);\r
-\r
-  UpdateBootDelPage (BmmCallbackInfo);\r
-  UpdateDrvDelPage (BmmCallbackInfo);\r
-\r
-  if (TerminalMenu.MenuNumber > 0) {\r
-    BmmCallbackInfo->CurrentTerminal = 0;\r
-    UpdateTerminalPage (BmmCallbackInfo);\r
-  }\r
-\r
-  Location  = (UINT8 *) &UpdateData->Data;\r
-  Status    = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID**) &LegacyBios);\r
-  if (!EFI_ERROR (Status)) {\r
-    //\r
-    // If LegacyBios Protocol is installed, add 3 tags about legacy boot option\r
-    // in BootOption form: legacy FD/HD/CD/NET/BEV\r
-    //\r
-    UpdateData->DataCount = 5;\r
-    CreateGotoOpCode (\r
-      FORM_SET_FD_ORDER_ID,\r
-      STRING_TOKEN (STR_FORM_SET_FD_ORDER_TITLE),\r
-      STRING_TOKEN (STR_FORM_SET_FD_ORDER_TITLE),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      FORM_SET_FD_ORDER_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-    CreateGotoOpCode (\r
-      FORM_SET_HD_ORDER_ID,\r
-      STRING_TOKEN (STR_FORM_SET_HD_ORDER_TITLE),\r
-      STRING_TOKEN (STR_FORM_SET_HD_ORDER_TITLE),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      FORM_SET_HD_ORDER_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-    CreateGotoOpCode (\r
-      FORM_SET_CD_ORDER_ID,\r
-      STRING_TOKEN (STR_FORM_SET_CD_ORDER_TITLE),\r
-      STRING_TOKEN (STR_FORM_SET_CD_ORDER_TITLE),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      FORM_SET_CD_ORDER_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-    CreateGotoOpCode (\r
-      FORM_SET_NET_ORDER_ID,\r
-      STRING_TOKEN (STR_FORM_SET_NET_ORDER_TITLE),\r
-      STRING_TOKEN (STR_FORM_SET_NET_ORDER_TITLE),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      FORM_SET_NET_ORDER_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-    CreateGotoOpCode (\r
-      FORM_SET_BEV_ORDER_ID,\r
-      STRING_TOKEN (STR_FORM_SET_BEV_ORDER_TITLE),\r
-      STRING_TOKEN (STR_FORM_SET_BEV_ORDER_TITLE),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      FORM_SET_BEV_ORDER_ID,\r
-      Location\r
-      );\r
-\r
-    Hii->UpdateForm (\r
-          Hii,\r
-          BmmCallbackInfo->BmmHiiHandle,\r
-          (EFI_FORM_LABEL) FORM_BOOT_LEGACY_DEVICE_ID,\r
-          TRUE,\r
-          UpdateData\r
-          );\r
-  }\r
-  //\r
-  // Dispatch BMM main formset and File Explorer formset.\r
-  //\r
-  FormSetDispatcher (BmmCallbackInfo);\r
-\r
-  Hii->ResetStrings (Hii, HiiHandle);\r
-\r
-  CleanUpStringDepository ();\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  FreeAllMenu ();\r
-\r
-  SafeFreePool (BmmCallbackInfo->LoadContext);\r
-  BmmCallbackInfo->LoadContext = NULL;\r
-  SafeFreePool (BmmCallbackInfo);\r
-  BmmCallbackInfo = NULL;\r
-  SafeFreePool (UpdateData);\r
-  UpdateData = NULL;\r
-\r
-  return Status;\r
-}\r
-\r
-VOID\r
-InitAllMenu (\r
-  IN  BMM_CALLBACK_DATA    *CallbackData\r
-  )\r
-{\r
-  InitializeListHead (&BootOptionMenu.Head);\r
-  InitializeListHead (&DriverOptionMenu.Head);\r
-  BOpt_GetBootOptions (CallbackData);\r
-  BOpt_GetDriverOptions (CallbackData);\r
-  BOpt_GetLegacyOptions ();\r
-  InitializeListHead (&FsOptionMenu.Head);\r
-  BOpt_FindDrivers ();\r
-  InitializeListHead (&DirectoryMenu.Head);\r
-  InitializeListHead (&ConsoleInpMenu.Head);\r
-  InitializeListHead (&ConsoleOutMenu.Head);\r
-  InitializeListHead (&ConsoleErrMenu.Head);\r
-  InitializeListHead (&TerminalMenu.Head);\r
-  LocateSerialIo ();\r
-  GetAllConsoles ();\r
-}\r
-\r
-VOID\r
-FreeAllMenu (\r
-  VOID\r
-  )\r
-{\r
-  BOpt_FreeMenu (&DirectoryMenu);\r
-  BOpt_FreeMenu (&FsOptionMenu);\r
-  BOpt_FreeMenu (&BootOptionMenu);\r
-  BOpt_FreeMenu (&DriverOptionMenu);\r
-  BOpt_FreeMenu (&DriverMenu);\r
-  BOpt_FreeLegacyOptions ();\r
-  FreeAllConsoles ();\r
-}\r
-\r
-VOID\r
-InitializeStringDepository (\r
-  VOID\r
-  )\r
-/*++\r
-Routine Description:\r
-  Intialize all the string depositories.\r
-\r
-Arguments:\r
-  None.\r
-\r
-Returns:\r
-  None.  \r
---*/\r
-{\r
-  STRING_DEPOSITORY *StringDepository;\r
-  StringDepository              = AllocateZeroPool (sizeof (STRING_DEPOSITORY) * STRING_DEPOSITORY_NUMBER);\r
-  FileOptionStrDepository       = StringDepository++;\r
-  ConsoleOptionStrDepository    = StringDepository++;\r
-  BootOptionStrDepository       = StringDepository++;\r
-  BootOptionHelpStrDepository   = StringDepository++;\r
-  DriverOptionStrDepository     = StringDepository++;\r
-  DriverOptionHelpStrDepository = StringDepository++;\r
-  TerminalStrDepository         = StringDepository;\r
-}\r
-\r
-STRING_REF\r
-GetStringTokenFromDepository (\r
-  IN   BMM_CALLBACK_DATA     *CallbackData,\r
-  IN   STRING_DEPOSITORY     *StringDepository\r
-  )\r
-/*++\r
-Routine Description:\r
-  Fetch a usable string node from the string depository and return the string token.\r
-\r
-Arguments:\r
-  StringDepository       - Pointer of the string depository.\r
-\r
-Returns:\r
-  STRING_REF             - String token.\r
---*/\r
-{\r
-  STRING_LIST_NODE  *CurrentListNode;\r
-  STRING_LIST_NODE  *NextListNode;\r
-\r
-  CurrentListNode = StringDepository->CurrentNode;\r
-\r
-  if ((NULL != CurrentListNode) && (NULL != CurrentListNode->Next)) {\r
-    //\r
-    // Fetch one reclaimed node from the list.\r
-    //\r
-    NextListNode = StringDepository->CurrentNode->Next;\r
-  } else {\r
-    //\r
-    // If there is no usable node in the list, update the list.\r
-    //\r
-    NextListNode = AllocateZeroPool (sizeof (STRING_LIST_NODE));\r
-\r
-    CallbackData->Hii->NewString (\r
-                        CallbackData->Hii,\r
-                        NULL,\r
-                        CallbackData->BmmHiiHandle,\r
-                        &(NextListNode->StringToken),\r
-                        L" "\r
-                        );\r
-\r
-    ASSERT (NextListNode->StringToken != 0);\r
-\r
-    StringDepository->TotalNodeNumber++;\r
-\r
-    if (NULL == CurrentListNode) {\r
-      StringDepository->ListHead = NextListNode;\r
-    } else {\r
-      CurrentListNode->Next = NextListNode;\r
-    }\r
-  }\r
-\r
-  StringDepository->CurrentNode = NextListNode;\r
-\r
-  return StringDepository->CurrentNode->StringToken;\r
-}\r
-\r
-VOID\r
-ReclaimStringDepository (\r
-  VOID\r
-  )\r
-/*++\r
-Routine Description:\r
-  Reclaim string depositories by moving the current node pointer to list head..\r
-\r
-Arguments:\r
-  None.\r
-\r
-Returns:\r
-  None.\r
---*/\r
-{\r
-  UINTN             DepositoryIndex;\r
-  STRING_DEPOSITORY *StringDepository;\r
-\r
-  StringDepository = FileOptionStrDepository;\r
-  for (DepositoryIndex = 0; DepositoryIndex < STRING_DEPOSITORY_NUMBER; DepositoryIndex++) {\r
-    StringDepository->CurrentNode = StringDepository->ListHead;\r
-    StringDepository++;\r
-  }\r
-}\r
-\r
-VOID\r
-CleanUpStringDepository (\r
-  VOID\r
-  )\r
-/*++\r
-Routine Description:\r
-  Release resource for all the string depositories.\r
-\r
-Arguments:\r
-  None.\r
-\r
-Returns:\r
-  None.\r
---*/\r
-{\r
-  UINTN             NodeIndex;\r
-  UINTN             DepositoryIndex;\r
-  STRING_LIST_NODE  *CurrentListNode;\r
-  STRING_LIST_NODE  *NextListNode;\r
-  STRING_DEPOSITORY *StringDepository;\r
-\r
-  //\r
-  // Release string list nodes.\r
-  //\r
-  StringDepository = FileOptionStrDepository;\r
-  for (DepositoryIndex = 0; DepositoryIndex < STRING_DEPOSITORY_NUMBER; DepositoryIndex++) {\r
-    CurrentListNode = StringDepository->ListHead;\r
-    for (NodeIndex = 0; NodeIndex < StringDepository->TotalNodeNumber; NodeIndex++) {\r
-      NextListNode = CurrentListNode->Next;\r
-      SafeFreePool (CurrentListNode);\r
-      CurrentListNode = NextListNode;\r
-    }\r
-\r
-    StringDepository++;\r
-  }\r
-  //\r
-  // Release string depository.\r
-  //\r
-  SafeFreePool (FileOptionStrDepository);\r
-}\r
-\r
-EFI_STATUS\r
-BdsStartBootMaint (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Start boot maintenance manager\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  LIST_ENTRY  BdsBootOptionList;\r
-\r
-  InitializeListHead (&BdsBootOptionList);\r
-\r
-  //\r
-  // Connect all prior to entering the platform setup menu.\r
-  //\r
-  if (!gConnectAllHappened) {\r
-    BdsLibConnectAllDriversToAllControllers ();\r
-    gConnectAllHappened = TRUE;\r
-  }\r
-  //\r
-  // Have chance to enumerate boot device\r
-  //\r
-  BdsLibEnumerateAllBootOption (&BdsBootOptionList);\r
-\r
-  //\r
-  // Init the BMM\r
-  //\r
-  Status = InitializeBM ();\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-FormSetDispatcher (\r
-  IN  BMM_CALLBACK_DATA    *CallbackData\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Dispatch BMM formset and FileExplorer formset.\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_FORM_BROWSER_PROTOCOL *FormConfig;\r
-  UINT8                     *Location;\r
-  EFI_STATUS                Status;\r
-  UINTN                     Index;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-  BM_FILE_CONTEXT           *NewFileContext;\r
-  BOOLEAN                       BootMaintMenuResetRequired;\r
-\r
-  Location        = NULL;\r
-  Index           = 0;\r
-  NewMenuEntry    = NULL;\r
-  NewFileContext  = NULL;\r
-\r
-  //\r
-  // There should only be one Form Configuration protocol\r
-  //\r
-  Status = EfiLibLocateProtocol (&gEfiFormBrowserProtocolGuid, (VOID**) &FormConfig);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  while (1) {\r
-    UpdatePageId (CallbackData, FORM_MAIN_ID);\r
-\r
-    BootMaintMenuResetRequired = FALSE;\r
-    Status = FormConfig->SendForm (\r
-                          FormConfig,\r
-                          TRUE,\r
-                          &(CallbackData->BmmHiiHandle),\r
-                          1,\r
-                          NULL,\r
-                          NULL,\r
-                          (UINT8 *) CallbackData->BmmFakeNvData,\r
-                          NULL,\r
-                          &BootMaintMenuResetRequired\r
-                          );\r
-\r
-    if (BootMaintMenuResetRequired) {\r
-      EnableResetRequired ();\r
-    }\r
-\r
-    ReclaimStringDepository ();\r
-\r
-    //\r
-    // When this Formset returns, check if we are going to explore files.\r
-    //\r
-    if (INACTIVE_STATE != CallbackData->FeCurrentState) {\r
-      UpdateFileExplorer (CallbackData, 0);\r
-\r
-      BootMaintMenuResetRequired = FALSE;\r
-      Status = FormConfig->SendForm (\r
-                            FormConfig,\r
-                            TRUE,\r
-                            &(CallbackData->FeHiiHandle),\r
-                            1,\r
-                            NULL,\r
-                            NULL,\r
-                            NULL,\r
-                            NULL,\r
-                            &BootMaintMenuResetRequired\r
-                            );\r
-\r
-      if (BootMaintMenuResetRequired) {\r
-        EnableResetRequired ();\r
-      }\r
-\r
-      CallbackData->FeCurrentState    = INACTIVE_STATE;\r
-      CallbackData->FeDisplayContext  = UNKNOWN_CONTEXT;\r
-      ReclaimStringDepository ();\r
-    } else {\r
-      break;\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-VOID\r
-CreateCallbackPacket (\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet,\r
-  IN  UINT16                          Flags\r
-  )\r
-{\r
-  *Packet = (EFI_HII_CALLBACK_PACKET *) AllocateZeroPool (sizeof (EFI_HII_CALLBACK_PACKET) + 2);\r
-  ASSERT (*Packet != NULL);\r
-\r
-  (*Packet)->DataArray.EntryCount   = 1;\r
-  (*Packet)->DataArray.NvRamMap     = NULL;\r
-  ((EFI_IFR_DATA_ENTRY *) (&((*Packet)->DataArray) + 1))->Flags  = Flags;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h
deleted file mode 100644 (file)
index 7312f57..0000000
+++ /dev/null
@@ -1,1161 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BootMaint.h\r
-\r
-Abstract:\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _BOOT_MAINT_H\r
-#define _BOOT_MAINT_H\r
-\r
-#include "BdsStrDefs.h"\r
-#include "Generic/BootMaint/BBSsupport.h"\r
-\r
-//\r
-// Constants which are variable names used to access variables\r
-//\r
-#define VarLegacyDevOrder L"LegacyDevOrder"\r
-\r
-//\r
-// Guid of a NV Variable which store the information about the\r
-// FD/HD/CD/NET/BEV order\r
-//\r
-#define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \\r
-  { \\r
-    0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52 } \\r
-  }\r
-\r
-//\r
-// String Contant\r
-//\r
-#define StrFloppy       L"Floppy Drive #%02x"\r
-#define StrHardDisk     L"HardDisk Drive #%02x"\r
-#define StrCDROM        L"ATAPI CDROM Drive #%02x"\r
-#define StrNET          L"NET Drive #%02x"\r
-#define StrBEV          L"BEV Drive #%02x"\r
-#define StrFloppyHelp   L"Select Floppy Drive #%02x"\r
-#define StrHardDiskHelp L"Select HardDisk Drive #%02x"\r
-#define StrCDROMHelp    L"Select ATAPI CDROM Drive #%02x"\r
-#define StrNETHelp      L"NET Drive #%02x"\r
-#define StrBEVHelp      L"BEV Drive #%02x"\r
-\r
-//\r
-// Constant will be used in display and file system navigation\r
-//\r
-#define UPDATE_DATA_SIZE        0x100000\r
-#define MAX_BBS_OFFSET          0xE000\r
-#define NET_OPTION_OFFSET       0xD800\r
-#define BEV_OPTION_OFFSET       0xD000\r
-#define FD_OPTION_OFFSET        0xC000\r
-#define HD_OPTION_OFFSET        0xB000\r
-#define CD_OPTION_OFFSET        0xA000\r
-#define FILE_OPTION_OFFSET      0x8000\r
-#define FILE_OPTION_MASK        0x7FFF\r
-#define HANDLE_OPTION_OFFSET    0x7000\r
-#define CONSOLE_OPTION_OFFSET   0x0A00\r
-#define TERMINAL_OPTION_OFFSET  0x0700\r
-#define NORMAL_GOTO_OFFSET      0x0100\r
-#define MAX_STRING_TOKEN_COUNT  0x00FF\r
-//\r
-// Variable created with this flag will be "Efi:...."\r
-//\r
-#define VAR_FLAG  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE\r
-\r
-//\r
-// Define Maxmim characters that will be accepted\r
-//\r
-#define MAX_CHAR      480\r
-#define MAX_CHAR_SIZE (MAX_CHAR * 2)\r
-\r
-//\r
-// Check to see if current build support option active feature of\r
-// some driver option\r
-//\r
-#ifndef LOAD_OPTION_ACTIVE\r
-#define LOAD_OPTION_ACTIVE  0x00000001\r
-#endif\r
-//\r
-// Check to see if current build support force reconnect feature of\r
-// some driver option\r
-//\r
-#ifndef LOAD_OPTION_FORCE_RECONNECT\r
-#define LOAD_OPTION_FORCE_RECONNECT 0x00000002\r
-#endif\r
-//\r
-// Below are the form ids for display, form id is used as callback key value,\r
-// some key value definitions are also defined here. By defining this enum type,\r
-// We can easy know where we are. The int to UINT16 convertion should be ok because\r
-// there is a MAXIMUM_FORM_ID which in within the range of UINT16.\r
-//\r
-typedef enum {\r
-  IplRelative,\r
-  BcvRelative\r
-} BBS_TYPE;\r
-\r
-typedef enum {\r
-  FORM_RESERVED_ID                    = 0,\r
-  FORM_MAIN_ID,                         // 0x0001\r
-  FORM_BOOT_ADD_ID,                     // 0x0002\r
-  FORM_BOOT_DEL_ID,                     // 0x0003\r
-  FORM_BOOT_CHG_ID,                     // 0x0004\r
-  FORM_DRV_ADD_ID,                      // 0x0005\r
-  FORM_DRV_DEL_ID,                      // 0x0006\r
-  FORM_DRV_CHG_ID,                      // 0x0007\r
-  FORM_CON_MAIN_ID,                     // 0x0008\r
-  FORM_CON_IN_ID,                       // 0x0009\r
-  FORM_CON_OUT_ID,                      // 0x000A\r
-  FORM_CON_ERR_ID,                      // 0x000B\r
-  FORM_FILE_SEEK_ID,                    // 0x000C\r
-  FORM_FILE_NEW_SEEK_ID,                // 0x000D\r
-  FORM_DRV_ADD_FILE_ID,                 // 0x000E\r
-  FORM_DRV_ADD_HANDLE_ID,               // 0x000F\r
-  FORM_DRV_ADD_HANDLE_DESC_ID,          // 0x0010\r
-  FORM_BOOT_NEXT_ID,                    // 0x0011\r
-  FORM_TIME_OUT_ID,                     // 0x0012\r
-  FORM_RESET,                           // 0x0013\r
-  FORM_BOOT_SETUP_ID,                   // 0x0014\r
-  FORM_DRIVER_SETUP_ID,                 // 0x0015\r
-  FORM_BOOT_LEGACY_DEVICE_ID,           // 0x0016\r
-  FORM_CON_COM_ID,                      // 0x0017\r
-  FORM_CON_COM_SETUP_ID,                // 0x0018\r
-  FORM_SET_FD_ORDER_ID,                 // 0x0019\r
-  FORM_SET_HD_ORDER_ID,                 // 0x001A\r
-  FORM_SET_CD_ORDER_ID,                 // 0x001B\r
-  FORM_SET_NET_ORDER_ID,                // 0x001C\r
-  FORM_SET_BEV_ORDER_ID,                // 0x001D\r
-  FORM_FILE_EXPLORER_ID,                // 0x001E\r
-  FORM_BOOT_ADD_DESCRIPTION_ID,         // 0x001F\r
-  FORM_DRIVER_ADD_FILE_DESCRIPTION_ID,  // 0x0020\r
-} FORM_ID;\r
-\r
-#define MAXIMUM_FORM_ID                 0x007F\r
-\r
-#define KEY_VALUE_COM_SET_BAUD_RATE     0x0080\r
-#define KEY_VALUE_COM_SET_DATA_BITS     0x0081\r
-#define KEY_VALUE_COM_SET_STOP_BITS     0x0082\r
-#define KEY_VALUE_COM_SET_PARITY        0x0083\r
-#define KEY_VALUE_COM_SET_TERMI_TYPE    0x0084\r
-#define KEY_VALUE_MAIN_BOOT_NEXT        0x0085\r
-#define KEY_VALUE_BOOT_ADD_DESC_DATA    0x0086\r
-#define KEY_VALUE_BOOT_ADD_OPT_DATA     0x0087\r
-#define KEY_VALUE_DRIVER_ADD_DESC_DATA  0x0088\r
-#define KEY_VALUE_DRIVER_ADD_OPT_DATA   0x0089\r
-#define KEY_VALUE_SAVE_AND_EXIT         0x0090\r
-#define KEY_VALUE_NO_SAVE_AND_EXIT      0x0091\r
-#define KEY_VALUE_BOOT_FROM_FILE        0x0092\r
-\r
-#define MAXIMUM_NORMAL_KEY_VALUE        NORMAL_GOTO_OFFSET\r
-//\r
-// Below are the number of options in Baudrate, Databits,\r
-// Parity and Stopbits selection for serial ports.\r
-//\r
-#define BM_COM_ATTR_BUADRATE  19\r
-#define BM_COM_ATTR_DATABITS  4\r
-#define BM_COM_ATTR_PARITY    5\r
-#define BM_COM_ATTR_STOPBITS  3\r
-\r
-//\r
-// Callback function helper\r
-//\r
-#define BMM_CALLBACK_DATA_SIGNATURE     EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')\r
-#define BMM_CALLBACK_DATA_FROM_THIS(a)  CR (a, BMM_CALLBACK_DATA, BmmDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)\r
-\r
-#define FE_CALLBACK_DATA_FROM_THIS(a)   CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)\r
-\r
-//\r
-// Enumeration type definition\r
-//\r
-typedef enum {\r
-  PC_ANSI                             = 0,\r
-  VT_100,\r
-  VT_100_PLUS,\r
-  VT_UTF8\r
-} TYPE_OF_TERMINAL;\r
-\r
-typedef enum {\r
-  COM1                                = 0,\r
-  COM2,\r
-  UNKNOW_COM\r
-} TYPE_OF_COM;\r
-\r
-typedef enum {\r
-  CONIN                               = 0,\r
-  CONOUT,\r
-  CONERR,\r
-  UNKNOWN_CON\r
-} TYPE_OF_CON;\r
-\r
-typedef enum {\r
-  BAUDRATE                            = 0,\r
-  DATABITS,\r
-  PARITY,\r
-  STOPBITS,\r
-  UNKNOW_ATTR\r
-} TYPE_OF_ATTRIBUTE;\r
-\r
-typedef enum {\r
-  MANNER_GOTO                         = 0,\r
-  MANNER_CHECK,\r
-  MANNER_ONEOF,\r
-  MANNER_USER_DEFINE\r
-} TYPE_OF_UPATE_MANNER;\r
-\r
-typedef enum {\r
-  INACTIVE_STATE                      = 0,\r
-  BOOT_FROM_FILE_STATE,\r
-  ADD_BOOT_OPTION_STATE,\r
-  ADD_DRIVER_OPTION_STATE,\r
-  UNKNOWN_STATE\r
-} FILE_EXPLORER_STATE;\r
-\r
-typedef enum {\r
-  FILE_SYSTEM,\r
-  DIRECTORY,\r
-  UNKNOWN_CONTEXT\r
-} FILE_EXPLORER_DISPLAY_CONTEXT;\r
-\r
-//\r
-// All of the signatures that will be used in list structure\r
-//\r
-#define BM_MENU_OPTION_SIGNATURE      EFI_SIGNATURE_32 ('m', 'e', 'n', 'u')\r
-#define BM_LOAD_OPTION_SIGNATURE      EFI_SIGNATURE_32 ('l', 'o', 'a', 'd')\r
-#define BM_CONSOLE_OPTION_SIGNATURE   EFI_SIGNATURE_32 ('c', 'n', 's', 'l')\r
-#define BM_FILE_OPTION_SIGNATURE      EFI_SIGNATURE_32 ('f', 'i', 'l', 'e')\r
-#define BM_HANDLE_OPTION_SIGNATURE    EFI_SIGNATURE_32 ('h', 'n', 'd', 'l')\r
-#define BM_TERMINAL_OPTION_SIGNATURE  EFI_SIGNATURE_32 ('t', 'r', 'm', 'l')\r
-#define BM_MENU_ENTRY_SIGNATURE       EFI_SIGNATURE_32 ('e', 'n', 't', 'r')\r
-\r
-#define BM_LOAD_CONTEXT_SELECT        0x0\r
-#define BM_CONSOLE_CONTEXT_SELECT     0x1\r
-#define BM_FILE_CONTEXT_SELECT        0x2\r
-#define BM_HANDLE_CONTEXT_SELECT      0x3\r
-#define BM_TERMINAL_CONTEXT_SELECT    0x5\r
-\r
-#define BM_CONSOLE_IN_CONTEXT_SELECT  0x6\r
-#define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7\r
-#define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8\r
-#define BM_LEGACY_DEV_CONTEXT_SELECT  0x9\r
-\r
-//\r
-// Question Id that will be used to create question\r
-// all these values are computed from the structure\r
-// defined below\r
-//\r
-#define QUESTION_ID(Field)              ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))\r
-\r
-#define BOOT_TIME_OUT_QUESTION_ID       QUESTION_ID (BootTimeOut)\r
-#define BOOT_NEXT_QUESTION_ID           QUESTION_ID (BootNext)\r
-#define COM1_BAUD_RATE_QUESTION_ID      QUESTION_ID (COM1BaudRate)\r
-#define COM1_DATA_RATE_QUESTION_ID      QUESTION_ID (COM1DataRate)\r
-#define COM1_STOP_BITS_QUESTION_ID      QUESTION_ID (COM1StopBits)\r
-#define COM1_PARITY_QUESTION_ID         QUESTION_ID (COM1Parity)\r
-#define COM1_TERMINAL_QUESTION_ID       QUESTION_ID (COM2TerminalType)\r
-#define COM2_BAUD_RATE_QUESTION_ID      QUESTION_ID (COM2BaudRate)\r
-#define COM2_DATA_RATE_QUESTION_ID      QUESTION_ID (COM2DataRate)\r
-#define COM2_STOP_BITS_QUESTION_ID      QUESTION_ID (COM2StopBits)\r
-#define COM2_PARITY_QUESTION_ID         QUESTION_ID (COM2Parity)\r
-#define COM2_TERMINAL_QUESTION_ID       QUESTION_ID (COM2TerminalType)\r
-#define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)\r
-#define DRV_ADD_ACTIVE_QUESTION_ID      QUESTION_ID (DriverAddActive)\r
-#define DRV_ADD_RECON_QUESTION_ID       QUESTION_ID (DriverAddForceReconnect)\r
-#define CON_IN_COM1_QUESTION_ID         QUESTION_ID (ConsoleInputCOM1)\r
-#define CON_IN_COM2_QUESTION_ID         QUESTION_ID (ConsoleInputCOM2)\r
-#define CON_OUT_COM1_QUESTION_ID        QUESTION_ID (ConsoleOutputCOM1)\r
-#define CON_OUT_COM2_QUESTION_ID        QUESTION_ID (ConsoleOutputCOM2)\r
-#define CON_ERR_COM1_QUESTION_ID        QUESTION_ID (ConsoleErrorCOM1)\r
-#define CON_ERR_COM2_QUESTION_ID        QUESTION_ID (ConsoleErrorCOM2)\r
-#define CON_DEVICE_QUESTION_ID          QUESTION_ID (ConsoleCheck)\r
-#define OPTION_ORDER_QUESTION_ID        QUESTION_ID (OptionOrder)\r
-#define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)\r
-#define BOOT_OPTION_DEL_QUESTION_ID     QUESTION_ID (BootOptionDel)\r
-#define DRIVER_OPTION_DEL_QUESTION_ID   QUESTION_ID (DriverOptionDel)\r
-#define DRIVER_ADD_OPTION_QUESTION_ID   QUESTION_ID (DriverAddHandleOptionalData)\r
-#define COM_BAUD_RATE_QUESTION_ID       QUESTION_ID (COMBaudRate)\r
-#define COM_DATA_RATE_QUESTION_ID       QUESTION_ID (COMDataRate)\r
-#define COM_STOP_BITS_QUESTION_ID       QUESTION_ID (COMStopBits)\r
-#define COM_PARITY_QUESTION_ID          QUESTION_ID (COMParity)\r
-#define COM_TERMINAL_QUESTION_ID        QUESTION_ID (COMTerminalType)\r
-#define LEGACY_FD_QUESTION_ID           QUESTION_ID (LegacyFD)\r
-#define LEGACY_HD_QUESTION_ID           QUESTION_ID (LegacyHD)\r
-#define LEGACY_CD_QUESTION_ID           QUESTION_ID (LegacyCD)\r
-#define LEGACY_NET_QUESTION_ID          QUESTION_ID (LegacyNET)\r
-#define LEGACY_BEV_QUESTION_ID          QUESTION_ID (LegacyBEV)\r
-\r
-#define STRING_DEPOSITORY_NUMBER        8\r
-\r
-//\r
-// #pragma pack(1)\r
-//\r
-// Serial Ports attributes, first one is the value for\r
-// return from callback function, stringtoken is used to\r
-// display the value properly\r
-//\r
-typedef struct {\r
-  UINTN   Value;\r
-  UINT16  StringToken;\r
-} COM_ATTR;\r
-\r
-//\r
-// This is the structure that will be used to store the\r
-// question's current value. Use it at initialize time to\r
-// set default value for each question. When using at run\r
-// time, this map is returned by the callback function,\r
-// so dynamically changing the question's value will be\r
-// possible through this mechanism\r
-//\r
-typedef struct {\r
-  //\r
-  // Three questions displayed at the main page\r
-  // for Timeout, BootNext Variables respectively\r
-  //\r
-  UINT16  BootTimeOut;\r
-  UINT16  BootNext;\r
-\r
-  //\r
-  // This is the COM1 Attributes value storage\r
-  //\r
-  UINT8   COM1BaudRate;\r
-  UINT8   COM1DataRate;\r
-  UINT8   COM1StopBits;\r
-  UINT8   COM1Parity;\r
-  UINT8   COM1TerminalType;\r
-\r
-  //\r
-  // This is the COM2 Attributes value storage\r
-  //\r
-  UINT8   COM2BaudRate;\r
-  UINT8   COM2DataRate;\r
-  UINT8   COM2StopBits;\r
-  UINT8   COM2Parity;\r
-  UINT8   COM2TerminalType;\r
-\r
-  //\r
-  // Driver Option Add Handle page storage\r
-  //\r
-  UINT16  DriverAddHandleDesc[100];\r
-  UINT16  DriverAddHandleOptionalData[100];\r
-  UINT8   DriverAddActive;\r
-  UINT8   DriverAddForceReconnect;\r
-\r
-  //\r
-  // Console Input/Output/Errorout using COM port check storage\r
-  //\r
-  UINT8   ConsoleInputCOM1;\r
-  UINT8   ConsoleInputCOM2;\r
-  UINT8   ConsoleOutputCOM1;\r
-  UINT8   ConsoleOutputCOM2;\r
-  UINT8   ConsoleErrorCOM1;\r
-  UINT8   ConsoleErrorCOM2;\r
-\r
-  //\r
-  // At most 100 input/output/errorout device for console storage\r
-  //\r
-  UINT8   ConsoleCheck[100];\r
-\r
-  //\r
-  // Boot or Driver Option Order storage\r
-  //\r
-  UINT8   OptionOrder[100];\r
-  UINT8   DriverOptionToBeDeleted[100];\r
-\r
-  //\r
-  // Boot Option Delete storage\r
-  //\r
-  UINT8   BootOptionDel[100];\r
-  UINT8   DriverOptionDel[100];\r
-\r
-  //\r
-  // This is the Terminal Attributes value storage\r
-  //\r
-  UINT8   COMBaudRate;\r
-  UINT8   COMDataRate;\r
-  UINT8   COMStopBits;\r
-  UINT8   COMParity;\r
-  UINT8   COMTerminalType;\r
-\r
-  //\r
-  // Legacy Device Order Selection Storage\r
-  //\r
-  UINT8   LegacyFD[100];\r
-  UINT8   LegacyHD[100];\r
-  UINT8   LegacyCD[100];\r
-  UINT8   LegacyNET[100];\r
-  UINT8   LegacyBEV[100];\r
-\r
-  //\r
-  // We use DisableMap array to record the enable/disable state of each boot device\r
-  // It should be taken as a bit array, from left to right there are totally 256 bits\r
-  // the most left one stands for BBS table item 0, and the most right one stands for item 256\r
-  // If the bit is 1, it means the boot device has been disabled.\r
-  //\r
-  UINT8   DisableMap[32];\r
-\r
-  //\r
-  //  UINT16                    PadArea[10];\r
-  //\r
-} BMM_FAKE_NV_DATA;\r
-\r
-typedef struct {\r
-  UINT16  DescriptionData[75];\r
-  UINT16                    OptionalData[127];\r
-  UINT8   Active;\r
-  UINT8   ForceReconnect;\r
-} FILE_EXPLORER_NV_DATA;\r
-\r
-typedef struct {\r
-  BBS_TYPE  BbsType;\r
-  //\r
-  // Length = sizeof (UINT16) + SIZEOF (Data)\r
-  //\r
-  UINT16    Length;\r
-  UINT16    *Data;\r
-} BM_LEGACY_DEV_ORDER_CONTEXT;\r
-\r
-typedef struct {\r
-  UINT64                    BaudRate;\r
-  UINT8                     DataBits;\r
-  UINT8                     Parity;\r
-  UINT8                     StopBits;\r
-\r
-  UINT8                     BaudRateIndex;\r
-  UINT8                     DataBitsIndex;\r
-  UINT8                     ParityIndex;\r
-  UINT8                     StopBitsIndex;\r
-\r
-  UINT8                     IsConIn;\r
-  UINT8                     IsConOut;\r
-  UINT8                     IsStdErr;\r
-  UINT8                     TerminalType;\r
-\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-} BM_TERMINAL_CONTEXT;\r
-\r
-typedef struct {\r
-  BOOLEAN                   IsBootNext;\r
-  BOOLEAN                   LoadOptionModified;\r
-  BOOLEAN                   Deleted;\r
-\r
-  BOOLEAN                   IsLegacy;\r
-  BOOLEAN                   IsActive;\r
-  BOOLEAN                   ForceReconnect;\r
-  UINTN                     OptionalDataSize;\r
-\r
-  UINTN                     LoadOptionSize;\r
-  UINT8                     *LoadOption;\r
-\r
-  UINT32                    Attributes;\r
-  UINT16                    FilePathListLength;\r
-  UINT16                    *Description;\r
-  EFI_DEVICE_PATH_PROTOCOL  *FilePathList;\r
-  UINT8                     *OptionalData;\r
-\r
-  UINT16                    BbsIndex;\r
-} BM_LOAD_CONTEXT;\r
-\r
-typedef struct {\r
-  BBS_TABLE *BbsTable;\r
-  UINTN     Index;\r
-  UINTN     BbsCount;\r
-  UINT16    *Description;\r
-} BM_LEGACY_DEVICE_CONTEXT;\r
-\r
-typedef struct {\r
-\r
-  BOOLEAN                   IsActive;\r
-\r
-  BOOLEAN                   IsTerminal;\r
-\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-} BM_CONSOLE_CONTEXT;\r
-\r
-typedef struct {\r
-  EFI_HANDLE                        Handle;\r
-  EFI_DEVICE_PATH_PROTOCOL          *DevicePath;\r
-  EFI_FILE_HANDLE                   FHandle;\r
-  UINT16                            *FileName;\r
-  EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *Info;\r
-\r
-  BOOLEAN                           IsRoot;\r
-  BOOLEAN                           IsDir;\r
-  BOOLEAN                           IsRemovableMedia;\r
-  BOOLEAN                           IsLoadFile;\r
-  BOOLEAN                           IsBootLegacy;\r
-} BM_FILE_CONTEXT;\r
-\r
-typedef struct {\r
-  EFI_HANDLE                Handle;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-} BM_HANDLE_CONTEXT;\r
-\r
-typedef struct {\r
-  UINTN           Signature;\r
-  LIST_ENTRY      Head;\r
-  UINTN           MenuNumber;\r
-} BM_MENU_OPTION;\r
-\r
-typedef struct {\r
-  UINTN           Signature;\r
-  LIST_ENTRY      Link;\r
-  UINTN           OptionNumber;\r
-  UINT16          *DisplayString;\r
-  UINT16          *HelpString;\r
-  STRING_REF      DisplayStringToken;\r
-  STRING_REF      HelpStringToken;\r
-  UINTN           ContextSelection;\r
-  VOID            *VariableContext;\r
-} BM_MENU_ENTRY;\r
-\r
-typedef struct {\r
-  //\r
-  // Shared callback data.\r
-  //\r
-  UINTN                         Signature;\r
-  EFI_HII_PROTOCOL              *Hii;\r
-  BM_MENU_ENTRY                 *MenuEntry;\r
-  BM_HANDLE_CONTEXT             *HandleContext;\r
-  BM_FILE_CONTEXT               *FileContext;\r
-  BM_LOAD_CONTEXT               *LoadContext;\r
-  BM_TERMINAL_CONTEXT           *TerminalContext;\r
-  UINTN                         CurrentTerminal;\r
-  BBS_TYPE                      BbsType;\r
-\r
-  //\r
-  // BMM main formset callback data.\r
-  //\r
-  EFI_HII_HANDLE                BmmHiiHandle;\r
-  EFI_HANDLE                    BmmCallbackHandle;\r
-  EFI_FORM_CALLBACK_PROTOCOL    BmmDriverCallback;\r
-  FORM_ID                       BmmCurrentPageId;\r
-  FORM_ID                       BmmPreviousPageId;\r
-  BOOLEAN                       BmmAskSaveOrNot;\r
-  BMM_FAKE_NV_DATA              *BmmFakeNvData;\r
-  BMM_FAKE_NV_DATA              BmmOldFakeNVData;\r
-\r
-  //\r
-  // File explorer formset callback data.\r
-  //\r
-  EFI_HII_HANDLE                FeHiiHandle;\r
-  EFI_HANDLE                    FeCallbackHandle;\r
-  EFI_FORM_CALLBACK_PROTOCOL    FeDriverCallback;\r
-  FILE_EXPLORER_STATE           FeCurrentState;\r
-  FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext;\r
-} BMM_CALLBACK_DATA;\r
-\r
-typedef struct _STRING_LIST_NODE {\r
-  STRING_REF                StringToken;\r
-  struct _STRING_LIST_NODE  *Next;\r
-} STRING_LIST_NODE;\r
-\r
-typedef struct _STRING_DEPOSITORY {\r
-  UINTN             TotalNodeNumber;\r
-  STRING_LIST_NODE  *CurrentNode;\r
-  STRING_LIST_NODE  *ListHead;\r
-} STRING_DEPOSITORY;\r
-\r
-//\r
-// #pragma pack()\r
-//\r
-// For initializing File System menu\r
-//\r
-EFI_STATUS\r
-BOpt_FindFileSystem (\r
-  IN BMM_CALLBACK_DATA          *CallbackData\r
-  )\r
-;\r
-\r
-//\r
-// For cleaning up File System menu\r
-//\r
-VOID\r
-BOpt_FreeFileSystem (\r
-  VOID\r
-  )\r
-;\r
-\r
-//\r
-// For initializing File Navigation menu\r
-//\r
-EFI_STATUS\r
-BOpt_FindFiles (\r
-  IN BMM_CALLBACK_DATA          *CallbackData,\r
-  IN BM_MENU_ENTRY              *MenuEntry\r
-  )\r
-;\r
-\r
-//\r
-// For cleaning up File Navigation menu\r
-//\r
-VOID\r
-BOpt_FreeFiles (\r
-  VOID\r
-  )\r
-;\r
-\r
-//\r
-// For Initializing handle navigation menu\r
-//\r
-EFI_STATUS\r
-BOpt_FindDrivers (\r
-  VOID\r
-  )\r
-;\r
-\r
-//\r
-// For Cleaning up handle navigation menu\r
-//\r
-VOID\r
-BOpt_FreeDrivers();\r
-\r
-//\r
-// For initializing Boot Option menu\r
-//\r
-EFI_STATUS\r
-BOpt_GetBootOptions (\r
-  IN  BMM_CALLBACK_DATA         *CallbackData\r
-  );\r
-\r
-//\r
-// For Initializing Driver option menu\r
-//\r
-EFI_STATUS\r
-BOpt_GetDriverOptions (\r
-  IN  BMM_CALLBACK_DATA         *CallbackData\r
-  );\r
-\r
-//\r
-// For Cleaning up boot option menu\r
-//\r
-VOID\r
-BOpt_FreeBootOptions ();\r
-\r
-//\r
-// For cleaning up driver option menu\r
-//\r
-VOID\r
-BOpt_FreeDriverOptions();\r
-\r
-//\r
-// For Initializing HD/FD/CD/NET/BEV option menu\r
-//\r
-EFI_STATUS\r
-BOpt_GetLegacyOptions();\r
-\r
-//\r
-// For cleaning up driver option menu\r
-//\r
-VOID\r
-BOpt_FreeLegacyOptions();\r
-\r
-//\r
-// this function is used to take place of all other free menu actions\r
-//\r
-VOID\r
-BOpt_FreeMenu (\r
-  BM_MENU_OPTION        *FreeMenu\r
-  );\r
-\r
-\r
-//\r
-// Following are the helper functions used\r
-//\r
-CHAR16                            *\r
-BOpt_AppendFileName (\r
-  IN  CHAR16  *Str1,\r
-  IN  CHAR16  *Str2\r
-  );\r
-\r
-BOOLEAN\r
-BOpt_IsEfiImageName (\r
-  IN UINT16  *FileName\r
-  );\r
-\r
-BOOLEAN\r
-BOpt_IsEfiApp (\r
-  IN EFI_FILE_HANDLE Dir,\r
-  IN UINT16          *FileName\r
-  );\r
-\r
-//\r
-// Get current unused boot option number\r
-//\r
-UINT16\r
-BOpt_GetBootOptionNumber ();\r
-\r
-//\r
-// Get current unused driver option number\r
-//\r
-UINT16\r
-BOpt_GetDriverOptionNumber ();\r
-\r
-BM_MENU_ENTRY                     *\r
-BOpt_CreateMenuEntry (\r
-  UINTN           MenuType\r
-  );\r
-\r
-VOID\r
-BOpt_DestroyMenuEntry (\r
-  BM_MENU_ENTRY         *MenuEntry\r
-  );\r
-\r
-BM_MENU_ENTRY                     *\r
-BOpt_GetMenuEntry (\r
-  BM_MENU_OPTION      *MenuOption,\r
-  UINTN               MenuNumber\r
-  );\r
-\r
-//\r
-// a helper function used to free pool type memory\r
-//\r
-VOID\r
-SafeFreePool (\r
-  IN VOID *Buffer\r
-  );\r
-\r
-//\r
-// Locate all serial io devices for console\r
-//\r
-EFI_STATUS\r
-LocateSerialIo ();\r
-\r
-//\r
-// Initializing Console menu\r
-//\r
-EFI_STATUS\r
-GetAllConsoles();\r
-\r
-//\r
-// Cleaning up console menu\r
-//\r
-EFI_STATUS\r
-FreeAllConsoles();\r
-\r
-VOID\r
-ChangeVariableDevicePath (\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath\r
-); \r
-\r
-EFI_STATUS\r
-ChangeTerminalDevicePath (\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath,\r
-  BOOLEAN                   ChangeTerminal\r
-);\r
-//\r
-// Variable operation by menu selection\r
-//\r
-EFI_STATUS\r
-Var_UpdateBootOption (\r
-  IN  BMM_CALLBACK_DATA                   *CallbackData,\r
-  IN  FILE_EXPLORER_NV_DATA               *NvRamMap\r
-  );\r
-\r
-EFI_STATUS\r
-Var_DelBootOption ();\r
-\r
-EFI_STATUS\r
-Var_ChangeBootOrder ();\r
-\r
-EFI_STATUS\r
-Var_UpdateDriverOption (\r
-  IN  BMM_CALLBACK_DATA         *CallbackData,\r
-  IN  EFI_HII_HANDLE            HiiHandle,\r
-  IN  UINT16                    *DescriptionData,\r
-  IN  UINT16                    *OptionalData,\r
-  IN  UINT8                     ForceReconnect\r
-  );\r
-\r
-EFI_STATUS\r
-Var_DelDriverOption ();\r
-\r
-EFI_STATUS\r
-Var_ChangeDriverOrder ();\r
-\r
-EFI_STATUS\r
-Var_UpdateConsoleInpOption ();\r
-\r
-EFI_STATUS\r
-Var_UpdateConsoleOutOption ();\r
-\r
-EFI_STATUS\r
-Var_UpdateErrorOutOption ();\r
-\r
-VOID\r
-Var_UpdateAllConsoleOption ();\r
-\r
-EFI_STATUS\r
-Var_UpdateBootNext (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  );\r
-\r
-EFI_STATUS\r
-Var_UpdateBootOrder (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  );\r
-\r
-EFI_STATUS\r
-Var_UpdateDriverOrder (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  );\r
-\r
-EFI_STATUS\r
-Var_UpdateBBSOption (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  );\r
-\r
-//\r
-// Following are page create and refresh functions\r
-//\r
-VOID\r
-RefreshUpdateData (\r
-  IN BOOLEAN                          FormSetUpdate,\r
-  IN EFI_PHYSICAL_ADDRESS             FormCallbackHandle,\r
-  IN BOOLEAN                          FormUpdate,\r
-  IN STRING_REF                       FormTitle,\r
-  IN UINT16                           DataCount\r
-  );\r
-\r
-VOID\r
-CleanUpPage (\r
-  IN EFI_FORM_LABEL                   LabelId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-EFI_STATUS\r
-UpdatePage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData,\r
-  IN BM_MENU_OPTION                   *UpdatingMenu,\r
-  IN UINT16                           UpdatingPage,\r
-  IN UINT16                           UpdatingManner,\r
-  IN UINT16                           QuestionIdStart,\r
-  IN UINT16                           GotoForm,\r
-  IN UINT16                           GotoAlternateForm,\r
-  IN STRING_REF                       DisplayTokenStart,\r
-  IN STRING_REF                       HelpTokenStart,\r
-  IN UINT16                           KeyValueStart\r
-  );\r
-\r
-VOID\r
-UpdateBootAddPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateBootDelPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateDrvAddFilePage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateDrvAddHandlePage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateDrvDelPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateDriverAddHandleDescPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateBootTimeOut (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateConInPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateConOutPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateStdErrPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdatePageBody (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateCOM1Page (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateCOM2Page (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateBootOrderPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateDriverOrderPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateBootNextPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateTimeOutPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateTerminalPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateConCOMPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  );\r
-\r
-VOID\r
-UpdateSetLegacyDeviceOrderPage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-);\r
-\r
-EFI_STATUS\r
-BootLegacy (\r
-  IN  UINT16  BbsType,\r
-  IN  UINT16  BbsFlag\r
-);\r
-\r
-BM_MENU_ENTRY                     *\r
-GetCurrentTerminal (\r
-  UINTN       TerminalNumber\r
-);\r
-\r
-EFI_FILE_HANDLE\r
-EfiLibOpenRoot (\r
-  IN EFI_HANDLE       DeviceHandle\r
-  );\r
-\r
-EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *\r
-EfiLibFileSystemVolumeLabelInfo (\r
-  IN EFI_FILE_HANDLE      FHand\r
-  );\r
-\r
-EFI_FILE_INFO                     *\r
-EfiLibFileInfo (\r
-  IN EFI_FILE_HANDLE      FHand\r
-  );\r
-\r
-CHAR16                            *\r
-DevicePathToStr (\r
-  EFI_DEVICE_PATH_PROTOCOL     *DevPath\r
-  );\r
-\r
-EFI_STATUS\r
-EfiLibLocateProtocol (\r
-  IN  EFI_GUID        *ProtocolGuid,\r
-  OUT VOID            **Interface\r
-  );\r
-\r
-VOID                              *\r
-EfiReallocatePool (\r
-  IN VOID                 *OldPool,\r
-  IN UINTN                OldSize,\r
-  IN UINTN                NewSize\r
-  );\r
-\r
-CHAR16                            *\r
-DevicePathToStr (\r
-  EFI_DEVICE_PATH_PROTOCOL     *DevPath\r
-  );\r
-\r
-VOID                              *\r
-BdsLibGetVariableAndSize (\r
-  IN CHAR16               *Name,\r
-  IN EFI_GUID             *VendorGuid,\r
-  OUT UINTN               *VarSize\r
-  );\r
-\r
-EFI_STATUS\r
-EfiLibDeleteVariable (\r
-  IN CHAR16   *VarName,\r
-  IN EFI_GUID *VarGuid\r
-  );\r
-\r
-CHAR16                            *\r
-EfiStrDuplicate (\r
-  IN CHAR16   *Src\r
-  );\r
-\r
-BOOLEAN\r
-EfiLibMatchDevicePaths (\r
-  IN  EFI_DEVICE_PATH_PROTOCOL *Multi,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL *Single\r
-  );\r
-\r
-UINTN\r
-EfiDevicePathInstanceCount (\r
-  IN EFI_DEVICE_PATH_PROTOCOL      *DevicePath\r
-  );\r
-\r
-EFI_STATUS\r
-CreateMenuStringToken (\r
-  IN BMM_CALLBACK_DATA                *CallbackData,\r
-  IN EFI_HII_HANDLE                   HiiHandle,\r
-  IN BM_MENU_OPTION                   *MenuOption\r
-  );\r
-\r
-UINT16                            *\r
-EfiLibStrFromDatahub (\r
-  IN EFI_DEVICE_PATH_PROTOCOL                 *DevPath\r
-  );\r
-\r
-VOID                              *\r
-GetLegacyBootOptionVar (\r
-  IN  UINTN                            DeviceType,\r
-  OUT UINTN                            *OptionIndex,\r
-  OUT UINTN                            *OptionSize\r
- );\r
-\r
-EFI_STATUS\r
-InitializeBM (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsStartBootMaint (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-InitializeStringDepository ();\r
-\r
-STRING_REF\r
-GetStringTokenFromDepository (\r
-  IN   BMM_CALLBACK_DATA     *CallbackData,\r
-  IN   STRING_DEPOSITORY     *StringDepository\r
-  ) ;\r
-\r
-VOID\r
-ReclaimStringDepository (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-CleanUpStringDepository (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-ApplyChangeHandler (\r
-  IN  BMM_CALLBACK_DATA               *Private,\r
-  IN  BMM_FAKE_NV_DATA                *CurrentFakeNVMap,\r
-  IN  FORM_ID                         FormId\r
-  );\r
-\r
-VOID\r
-DiscardChangeHandler (\r
-  IN  BMM_CALLBACK_DATA               *Private,\r
-  IN  BMM_FAKE_NV_DATA                *CurrentFakeNVMap\r
-  );\r
-\r
-VOID\r
-UpdatePageId (\r
-  BMM_CALLBACK_DATA              *Private,\r
-  UINT16                         NewPageId\r
-  );\r
-\r
-EFI_STATUS\r
-BootThisFile (\r
-  IN BM_FILE_CONTEXT                   *FileContext\r
-  );\r
-\r
-BOOLEAN\r
-UpdateFileExplorer (\r
-  IN BMM_CALLBACK_DATA            *CallbackData,\r
-  IN UINT16                       KeyValue\r
-  );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FileExplorerCallback (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *Data,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  );\r
-\r
-EFI_STATUS\r
-FormSetDispatcher (\r
-  IN  BMM_CALLBACK_DATA    *CallbackData\r
-  );\r
-\r
-VOID CreateCallbackPacket (\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet,\r
-  IN  UINT16                          Flags\r
-  );\r
-\r
-//\r
-// Global variable in this program (defined in data.c)\r
-//\r
-extern BM_MENU_OPTION             BootOptionMenu;\r
-extern BM_MENU_OPTION             DriverOptionMenu;\r
-extern BM_MENU_OPTION             FsOptionMenu;\r
-extern BM_MENU_OPTION             ConsoleInpMenu;\r
-extern BM_MENU_OPTION             ConsoleOutMenu;\r
-extern BM_MENU_OPTION             ConsoleErrMenu;\r
-extern BM_MENU_OPTION             DirectoryMenu;\r
-extern BM_MENU_OPTION             DriverMenu;\r
-extern BM_MENU_OPTION             TerminalMenu;\r
-extern BM_MENU_OPTION             LegacyFDMenu;\r
-extern BM_MENU_OPTION             LegacyHDMenu;\r
-extern BM_MENU_OPTION             LegacyCDMenu;\r
-extern BM_MENU_OPTION             LegacyNETMenu;\r
-extern BM_MENU_OPTION             LegacyBEVMenu;\r
-extern UINT16                     TerminalType[];\r
-extern COM_ATTR                   BaudRateList[19];\r
-extern COM_ATTR                   DataBitsList[4];\r
-extern COM_ATTR                   ParityList[5];\r
-extern COM_ATTR                   StopBitsList[3];\r
-extern EFI_GUID                   Guid[4];\r
-extern EFI_HII_UPDATE_DATA        *UpdateData;\r
-extern STRING_DEPOSITORY          *FileOptionStrDepository;\r
-extern STRING_DEPOSITORY          *ConsoleOptionStrDepository;\r
-extern STRING_DEPOSITORY          *BootOptionStrDepository;\r
-extern STRING_DEPOSITORY          *BootOptionHelpStrDepository;\r
-extern STRING_DEPOSITORY          *DriverOptionStrDepository;\r
-extern STRING_DEPOSITORY          *DriverOptionHelpStrDepository;\r
-extern STRING_DEPOSITORY          *TerminalStrDepository;\r
-extern EFI_DEVICE_PATH_PROTOCOL   EndDevicePath[];\r
-extern EFI_GUID                   EfiLegacyDevOrderGuid;\r
-\r
-#endif\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootOption.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootOption.c
deleted file mode 100644 (file)
index 2d67e0b..0000000
+++ /dev/null
@@ -1,1685 +0,0 @@
-/*++\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BootOption.c\r
-  \r
-Abstract:\r
-\r
-  Provide boot option support for Application "BootMaint"\r
-\r
-  Include file system navigation, system handle selection\r
-\r
-  Boot option manipulation\r
-  \r
-Revision History\r
-\r
---*/\r
-\r
-#include "BootMaint.h"\r
-#include "BBSsupport.h"\r
-\r
-BM_MENU_ENTRY *\r
-BOpt_CreateMenuEntry (\r
-  UINTN           MenuType\r
-  )\r
-/*++\r
-\r
-Routine Description\r
-  Create Menu Entry for future use, make all types together\r
-  in order to reduce code size\r
-\r
-Arguments:\r
-  MenuType            Use this parameter to identify current\r
-                      Menu type\r
-\r
-Returns:\r
-  NULL                Cannot allocate memory for current menu \r
-                      entry\r
-  Others              A valid pointer pointing to the allocated\r
-                      memory pool for current menu entry\r
-\r
---*/\r
-{\r
-  BM_MENU_ENTRY *MenuEntry;\r
-  UINTN         ContextSize;\r
-\r
-  switch (MenuType) {\r
-  case BM_LOAD_CONTEXT_SELECT:\r
-    ContextSize = sizeof (BM_LOAD_CONTEXT);\r
-    break;\r
-\r
-  case BM_FILE_CONTEXT_SELECT:\r
-    ContextSize = sizeof (BM_FILE_CONTEXT);\r
-    break;\r
-\r
-  case BM_CONSOLE_CONTEXT_SELECT:\r
-    ContextSize = sizeof (BM_CONSOLE_CONTEXT);\r
-    break;\r
-\r
-  case BM_TERMINAL_CONTEXT_SELECT:\r
-    ContextSize = sizeof (BM_TERMINAL_CONTEXT);\r
-    break;\r
-\r
-  case BM_HANDLE_CONTEXT_SELECT:\r
-    ContextSize = sizeof (BM_HANDLE_CONTEXT);\r
-    break;\r
-\r
-  case BM_LEGACY_DEV_CONTEXT_SELECT:\r
-    ContextSize = sizeof (BM_LEGACY_DEVICE_CONTEXT);\r
-    break;\r
-\r
-  default:\r
-    ContextSize = 0;\r
-    break;\r
-\r
-  }\r
-\r
-  if (0 == ContextSize) {\r
-    return NULL;\r
-  }\r
-\r
-  MenuEntry = AllocateZeroPool (sizeof (BM_MENU_ENTRY));\r
-  if (NULL == MenuEntry) {\r
-    return MenuEntry;\r
-  }\r
-\r
-  MenuEntry->VariableContext = AllocateZeroPool (ContextSize);\r
-  if (NULL == MenuEntry->VariableContext) {\r
-    SafeFreePool (MenuEntry);\r
-    MenuEntry = NULL;\r
-    return MenuEntry;\r
-  }\r
-\r
-  MenuEntry->Signature        = BM_MENU_ENTRY_SIGNATURE;\r
-  MenuEntry->ContextSelection = MenuType;\r
-  return MenuEntry;\r
-}\r
-\r
-VOID\r
-BOpt_DestroyMenuEntry (\r
-  BM_MENU_ENTRY         *MenuEntry\r
-  )\r
-/*++\r
-  Routine Description :\r
-    Destroy the menu entry passed in\r
-\r
-  Arguments :\r
-    The menu entry need to be destroyed\r
-\r
-  Returns :\r
-    None\r
-\r
---*/\r
-{\r
-  BM_LOAD_CONTEXT           *LoadContext;\r
-  BM_FILE_CONTEXT           *FileContext;\r
-  BM_CONSOLE_CONTEXT        *ConsoleContext;\r
-  BM_TERMINAL_CONTEXT       *TerminalContext;\r
-  BM_HANDLE_CONTEXT         *HandleContext;\r
-  BM_LEGACY_DEVICE_CONTEXT  *LegacyDevContext;\r
-\r
-  //\r
-  //  Select by the type in Menu entry for current context type\r
-  //\r
-  switch (MenuEntry->ContextSelection) {\r
-  case BM_LOAD_CONTEXT_SELECT:\r
-    LoadContext = (BM_LOAD_CONTEXT *) MenuEntry->VariableContext;\r
-    SafeFreePool (LoadContext->FilePathList);\r
-    SafeFreePool (LoadContext->LoadOption);\r
-    SafeFreePool (LoadContext->OptionalData);\r
-    SafeFreePool (LoadContext);\r
-    break;\r
-\r
-  case BM_FILE_CONTEXT_SELECT:\r
-    FileContext = (BM_FILE_CONTEXT *) MenuEntry->VariableContext;\r
-\r
-    if (!FileContext->IsRoot) {\r
-      SafeFreePool (FileContext->DevicePath);\r
-    } else {\r
-      if (FileContext->FHandle != NULL) {\r
-        FileContext->FHandle->Close (FileContext->FHandle);\r
-      }\r
-    }\r
-\r
-    SafeFreePool (FileContext->FileName);\r
-    SafeFreePool (FileContext->Info);\r
-    SafeFreePool (FileContext);\r
-    break;\r
-\r
-  case BM_CONSOLE_CONTEXT_SELECT:\r
-    ConsoleContext = (BM_CONSOLE_CONTEXT *) MenuEntry->VariableContext;\r
-    SafeFreePool (ConsoleContext->DevicePath);\r
-    SafeFreePool (ConsoleContext);\r
-    break;\r
-\r
-  case BM_TERMINAL_CONTEXT_SELECT:\r
-    TerminalContext = (BM_TERMINAL_CONTEXT *) MenuEntry->VariableContext;\r
-    SafeFreePool (TerminalContext->DevicePath);\r
-    SafeFreePool (TerminalContext);\r
-    break;\r
-\r
-  case BM_HANDLE_CONTEXT_SELECT:\r
-    HandleContext = (BM_HANDLE_CONTEXT *) MenuEntry->VariableContext;\r
-    SafeFreePool (HandleContext);\r
-    break;\r
-\r
-  case BM_LEGACY_DEV_CONTEXT_SELECT:\r
-    LegacyDevContext = (BM_LEGACY_DEVICE_CONTEXT *) MenuEntry->VariableContext;\r
-    SafeFreePool (LegacyDevContext);\r
-\r
-  default:\r
-    break;\r
-  }\r
-\r
-  SafeFreePool (MenuEntry->DisplayString);\r
-  if (NULL != MenuEntry->HelpString) {\r
-    SafeFreePool (MenuEntry->HelpString);\r
-  }\r
-\r
-  SafeFreePool (MenuEntry);\r
-}\r
-\r
-BM_MENU_ENTRY *\r
-BOpt_GetMenuEntry (\r
-  BM_MENU_OPTION      *MenuOption,\r
-  UINTN               MenuNumber\r
-  )\r
-/*++\r
-  Rountine Description :\r
-    Use this routine to get one particular menu entry in specified \r
-    menu\r
-\r
-  Arguments :\r
-    MenuOption        The menu that we will search \r
-\r
-    MenuNumber        The menunubmer that we want\r
-\r
-  Returns :\r
-    The desired menu entry\r
-\r
---*/\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  UINTN           Index;\r
-  LIST_ENTRY      *List;\r
-\r
-  if (MenuNumber >= MenuOption->MenuNumber) {\r
-    return NULL;\r
-  }\r
-\r
-  List = MenuOption->Head.ForwardLink;\r
-  for (Index = 0; Index < MenuNumber; Index++) {\r
-    List = List->ForwardLink;\r
-  }\r
-\r
-  NewMenuEntry = CR (List, BM_MENU_ENTRY, Link, BM_MENU_ENTRY_SIGNATURE);\r
-\r
-  return NewMenuEntry;\r
-}\r
-\r
-EFI_STATUS\r
-BOpt_FindFileSystem (\r
-  IN BMM_CALLBACK_DATA          *CallbackData\r
-  )\r
-/*++\r
-\r
-Routine Description\r
-  Find file systems for current Extensible Firmware\r
-  Including Handles that support Simple File System\r
-  protocol, Load File protocol.\r
-\r
-  Building up the FileSystem Menu for user selection\r
-  All file system will be stored in FsOptionMenu \r
-  for future use.\r
-\r
-Arguments:\r
-  CallbackData           -   BMM context data\r
-\r
-Returns:\r
-  EFI_SUCCESS            -   Success find the file system\r
-  EFI_OUT_OF_RESOURCES   -   Can not create menu entry\r
-\r
---*/\r
-{\r
-  UINTN                     NoSimpleFsHandles;\r
-  UINTN                     NoLoadFileHandles;\r
-  EFI_HANDLE                *SimpleFsHandle;\r
-  EFI_HANDLE                *LoadFileHandle;\r
-  UINT16                    *VolumeLabel;\r
-  EFI_BLOCK_IO_PROTOCOL     *BlkIo;\r
-  UINTN                     Index;\r
-  EFI_STATUS                Status;\r
-  BM_MENU_ENTRY             *MenuEntry;\r
-  BM_FILE_CONTEXT           *FileContext;\r
-  UINT16                    *TempStr;\r
-  UINTN                     OptionNumber;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  UINT16                    DeviceType;\r
-  BBS_BBS_DEVICE_PATH       BbsDevicePathNode;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  BOOLEAN                   RemovableMedia;\r
-\r
-\r
-  NoSimpleFsHandles = 0;\r
-  NoLoadFileHandles = 0;\r
-  OptionNumber      = 0;\r
-  InitializeListHead (&FsOptionMenu.Head);\r
-\r
-  //\r
-  // Locate Handles that support Simple File System protocol\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiSimpleFileSystemProtocolGuid,\r
-                  NULL,\r
-                  &NoSimpleFsHandles,\r
-                  &SimpleFsHandle\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-    //\r
-    // Find all the instances of the File System prototocol\r
-    //\r
-    for (Index = 0; Index < NoSimpleFsHandles; Index++) {\r
-      Status = gBS->HandleProtocol (\r
-                      SimpleFsHandle[Index],\r
-                      &gEfiBlockIoProtocolGuid,\r
-                      (VOID**) &BlkIo\r
-                      );\r
-      if (EFI_ERROR (Status)) {\r
-        //\r
-        // If no block IO exists assume it's NOT a removable media\r
-        //\r
-        RemovableMedia = FALSE;\r
-      } else {\r
-        //\r
-        // If block IO exists check to see if it's remobable media\r
-        //\r
-        RemovableMedia = BlkIo->Media->RemovableMedia; \r
-      }\r
-\r
-      //\r
-      // Allocate pool for this load option\r
-      //\r
-      MenuEntry = BOpt_CreateMenuEntry (BM_FILE_CONTEXT_SELECT);\r
-      if (NULL == MenuEntry) {\r
-        SafeFreePool (SimpleFsHandle);    \r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-\r
-      FileContext = (BM_FILE_CONTEXT *) MenuEntry->VariableContext;\r
-            \r
-      FileContext->Handle     = SimpleFsHandle[Index];\r
-      MenuEntry->OptionNumber = Index;\r
-      FileContext->FHandle    = EfiLibOpenRoot (FileContext->Handle);\r
-      if (!FileContext->FHandle) {\r
-        BOpt_DestroyMenuEntry (MenuEntry);\r
-        continue;\r
-      }\r
-\r
-      MenuEntry->HelpString = DevicePathToStr (DevicePathFromHandle (FileContext->Handle));\r
-      FileContext->Info = EfiLibFileSystemVolumeLabelInfo (FileContext->FHandle);\r
-      FileContext->FileName = EfiStrDuplicate (L"\\");\r
-      FileContext->DevicePath = FileDevicePath (\r
-                                  FileContext->Handle,\r
-                                  FileContext->FileName\r
-                                  );\r
-      FileContext->IsDir            = TRUE;\r
-      FileContext->IsRoot           = TRUE;\r
-      FileContext->IsRemovableMedia = FALSE;\r
-      FileContext->IsLoadFile       = FALSE;\r
-\r
-      //\r
-      // Get current file system's Volume Label\r
-      //\r
-      if (FileContext->Info == NULL) {\r
-        VolumeLabel = L"NO FILE SYSTEM INFO";\r
-      } else {\r
-        if (FileContext->Info->VolumeLabel == NULL) {\r
-          VolumeLabel = L"NULL VOLUME LABEL";\r
-        } else {\r
-          VolumeLabel = FileContext->Info->VolumeLabel;\r
-          if (*VolumeLabel == 0x0000) {\r
-            VolumeLabel = L"NO VOLUME LABEL";\r
-          }\r
-        }\r
-      }\r
-\r
-      TempStr                   = MenuEntry->HelpString;\r
-      MenuEntry->DisplayString  = AllocateZeroPool (MAX_CHAR);\r
-      ASSERT (MenuEntry->DisplayString != NULL);\r
-      UnicodeSPrint (\r
-        MenuEntry->DisplayString,\r
-        MAX_CHAR,\r
-        L"%s, [%s]",\r
-        VolumeLabel,\r
-        TempStr\r
-        );\r
-      OptionNumber++;\r
-      InsertTailList (&FsOptionMenu.Head, &MenuEntry->Link);      \r
-    }\r
-  }\r
-\r
-  if (NoSimpleFsHandles != 0) {\r
-    SafeFreePool (SimpleFsHandle);\r
-  }\r
-  //\r
-  // Searching for handles that support Load File protocol\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiLoadFileProtocolGuid,\r
-                  NULL,\r
-                  &NoLoadFileHandles,\r
-                  &LoadFileHandle\r
-                  );\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    for (Index = 0; Index < NoLoadFileHandles; Index++) {\r
-      MenuEntry = BOpt_CreateMenuEntry (BM_FILE_CONTEXT_SELECT);\r
-      if (NULL == MenuEntry) {\r
-        SafeFreePool (LoadFileHandle);    \r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-\r
-      FileContext                   = (BM_FILE_CONTEXT *) MenuEntry->VariableContext;\r
-      FileContext->IsRemovableMedia = FALSE;\r
-      FileContext->IsLoadFile       = TRUE;\r
-      FileContext->Handle           = LoadFileHandle[Index];\r
-      FileContext->IsRoot           = TRUE;\r
-\r
-      FileContext->DevicePath = DevicePathFromHandle (FileContext->Handle);\r
-\r
-      MenuEntry->HelpString     = DevicePathToStr (FileContext->DevicePath);\r
-\r
-      TempStr                   = MenuEntry->HelpString;\r
-      MenuEntry->DisplayString  = AllocateZeroPool (MAX_CHAR);\r
-      ASSERT (MenuEntry->DisplayString != NULL);\r
-      UnicodeSPrint (\r
-        MenuEntry->DisplayString,\r
-        MAX_CHAR,\r
-        L"Load File [%s]",\r
-        TempStr\r
-        );\r
-\r
-      MenuEntry->OptionNumber = OptionNumber;\r
-      OptionNumber++;\r
-      InsertTailList (&FsOptionMenu.Head, &MenuEntry->Link);\r
-    }\r
-  }\r
-\r
-  if (NoLoadFileHandles != 0) {\r
-    SafeFreePool (LoadFileHandle);\r
-  }\r
-\r
-  //\r
-  // Add Legacy Boot Option Support Here\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiLegacyBiosProtocolGuid,\r
-                  NULL,\r
-                  (VOID**) &LegacyBios\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-\r
-    for (Index = BBS_TYPE_FLOPPY; Index <= BBS_TYPE_EMBEDDED_NETWORK; Index++) {\r
-      MenuEntry = BOpt_CreateMenuEntry (BM_FILE_CONTEXT_SELECT);\r
-      if (NULL == MenuEntry) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-\r
-      FileContext                       = (BM_FILE_CONTEXT *) MenuEntry->VariableContext;\r
-\r
-      FileContext->IsRemovableMedia     = FALSE;\r
-      FileContext->IsLoadFile           = TRUE;\r
-      FileContext->IsBootLegacy         = TRUE;\r
-      DeviceType                        = (UINT16) Index;\r
-      BbsDevicePathNode.Header.Type     = BBS_DEVICE_PATH;\r
-      BbsDevicePathNode.Header.SubType  = BBS_BBS_DP;\r
-      SetDevicePathNodeLength (\r
-        &BbsDevicePathNode.Header,\r
-        sizeof (BBS_BBS_DEVICE_PATH)\r
-        );\r
-      BbsDevicePathNode.DeviceType  = DeviceType;\r
-      BbsDevicePathNode.StatusFlag  = 0;\r
-      BbsDevicePathNode.String[0]   = 0;\r
-      DevicePath = AppendDevicePathNode (\r
-                    EndDevicePath,\r
-                    (EFI_DEVICE_PATH_PROTOCOL *) &BbsDevicePathNode\r
-                    );\r
-\r
-      FileContext->DevicePath   = DevicePath;\r
-      MenuEntry->HelpString     = DevicePathToStr (FileContext->DevicePath);\r
-\r
-      TempStr                   = MenuEntry->HelpString;\r
-      MenuEntry->DisplayString  = AllocateZeroPool (MAX_CHAR);\r
-      ASSERT (MenuEntry->DisplayString != NULL);\r
-      UnicodeSPrint (\r
-        MenuEntry->DisplayString,\r
-        MAX_CHAR,\r
-        L"Boot Legacy [%s]",\r
-        TempStr\r
-        );\r
-      MenuEntry->OptionNumber = OptionNumber;\r
-      OptionNumber++;\r
-      InsertTailList (&FsOptionMenu.Head, &MenuEntry->Link);\r
-    }\r
-  }\r
-  //\r
-  // Remember how many file system options are here\r
-  //\r
-  FsOptionMenu.MenuNumber = OptionNumber;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-BOpt_FreeMenu (\r
-  BM_MENU_OPTION        *FreeMenu\r
-  )\r
-/*++\r
-\r
-Routine Description\r
-  Free resources allocated in Allocate Rountine\r
-\r
-Arguments:\r
-  FreeMenu        Menu to be freed\r
-\r
-Returns:\r
-  VOID\r
-  \r
---*/\r
-{\r
-  BM_MENU_ENTRY *MenuEntry;\r
-  while (!IsListEmpty (&FreeMenu->Head)) {\r
-    MenuEntry = CR (\r
-                  FreeMenu->Head.ForwardLink,\r
-                  BM_MENU_ENTRY,\r
-                  Link,\r
-                  BM_MENU_ENTRY_SIGNATURE\r
-                  );\r
-    RemoveEntryList (&MenuEntry->Link);\r
-    BOpt_DestroyMenuEntry (MenuEntry);\r
-  }\r
-}\r
-\r
-EFI_STATUS\r
-BOpt_FindFiles (\r
-  IN BMM_CALLBACK_DATA          *CallbackData,\r
-  IN BM_MENU_ENTRY              *MenuEntry\r
-  )\r
-/*++\r
-\r
-Routine Description\r
-  Find files under current directory\r
-  All files and sub-directories in current directory\r
-  will be stored in DirectoryMenu for future use.\r
-\r
-Arguments:\r
-  FileOption   -- Pointer for Dir to explore\r
-\r
-Returns:\r
-  TRUE         -- Get files from current dir successfully\r
-  FALSE        -- Can't get files from current dir\r
-\r
---*/\r
-{\r
-  EFI_FILE_HANDLE NewDir;\r
-  EFI_FILE_HANDLE Dir;\r
-  EFI_FILE_INFO   *DirInfo;\r
-  UINTN           BufferSize;\r
-  UINTN           DirBufferSize;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_FILE_CONTEXT *FileContext;\r
-  BM_FILE_CONTEXT *NewFileContext;\r
-  UINTN           Pass;\r
-  EFI_STATUS      Status;\r
-  UINTN           OptionNumber;\r
-\r
-  FileContext   = (BM_FILE_CONTEXT *) MenuEntry->VariableContext;\r
-  Dir           = FileContext->FHandle;\r
-  OptionNumber  = 0;\r
-  //\r
-  // Open current directory to get files from it\r
-  //\r
-  Status = Dir->Open (\r
-                  Dir,\r
-                  &NewDir,\r
-                  FileContext->FileName,\r
-                  EFI_FILE_READ_ONLY,\r
-                  0\r
-                  );\r
-  if (!FileContext->IsRoot) {\r
-    Dir->Close (Dir);\r
-  }\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  DirInfo = EfiLibFileInfo (NewDir);\r
-  if (!DirInfo) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  if (!(DirInfo->Attribute & EFI_FILE_DIRECTORY)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  FileContext->DevicePath = FileDevicePath (\r
-                              FileContext->Handle,\r
-                              FileContext->FileName\r
-                              );\r
-\r
-  DirBufferSize = sizeof (EFI_FILE_INFO) + 1024;\r
-  DirInfo       = AllocateZeroPool (DirBufferSize);\r
-  if (!DirInfo) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  // Get all files in current directory\r
-  // Pass 1 to get Directories\r
-  // Pass 2 to get files that are EFI images\r
-  //\r
-  for (Pass = 1; Pass <= 2; Pass++) {\r
-    NewDir->SetPosition (NewDir, 0);\r
-    for (;;) {\r
-      BufferSize  = DirBufferSize;\r
-      Status      = NewDir->Read (NewDir, &BufferSize, DirInfo);\r
-      if (EFI_ERROR (Status) || BufferSize == 0) {\r
-        break;\r
-      }\r
-\r
-      if ((DirInfo->Attribute & EFI_FILE_DIRECTORY && Pass == 2) ||\r
-          (!(DirInfo->Attribute & EFI_FILE_DIRECTORY) && Pass == 1)\r
-          ) {\r
-        //\r
-        // Pass 1 is for Directories\r
-        // Pass 2 is for file names\r
-        //\r
-        continue;\r
-      }\r
-\r
-      if (!(BOpt_IsEfiImageName (DirInfo->FileName) || DirInfo->Attribute & EFI_FILE_DIRECTORY)) {\r
-        //\r
-        // Slip file unless it is a directory entry or a .EFI file\r
-        //\r
-        continue;\r
-      }\r
-\r
-      NewMenuEntry = BOpt_CreateMenuEntry (BM_FILE_CONTEXT_SELECT);\r
-      if (NULL == NewMenuEntry) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-\r
-      NewFileContext          = (BM_FILE_CONTEXT *) NewMenuEntry->VariableContext;\r
-      NewFileContext->Handle  = FileContext->Handle;\r
-      NewFileContext->FileName = BOpt_AppendFileName (\r
-                                  FileContext->FileName,\r
-                                  DirInfo->FileName\r
-                                  );\r
-      NewFileContext->FHandle = NewDir;\r
-      NewFileContext->DevicePath = FileDevicePath (\r
-                                    NewFileContext->Handle,\r
-                                    NewFileContext->FileName\r
-                                    );\r
-      NewMenuEntry->HelpString = NULL;\r
-\r
-      MenuEntry->DisplayStringToken = GetStringTokenFromDepository (\r
-                                        CallbackData,\r
-                                        FileOptionStrDepository\r
-                                        );\r
-\r
-      NewFileContext->IsDir = (BOOLEAN) ((DirInfo->Attribute & EFI_FILE_DIRECTORY) == EFI_FILE_DIRECTORY);\r
-\r
-      if (NewFileContext->IsDir) {\r
-        BufferSize                  = StrLen (DirInfo->FileName) * 2 + 6;\r
-        NewMenuEntry->DisplayString = AllocateZeroPool (BufferSize);\r
-\r
-        UnicodeSPrint (\r
-          NewMenuEntry->DisplayString,\r
-          BufferSize,\r
-          L"<%s>",\r
-          DirInfo->FileName\r
-          );\r
-\r
-      } else {\r
-        NewMenuEntry->DisplayString = EfiStrDuplicate (DirInfo->FileName);\r
-      }\r
-\r
-      NewFileContext->IsRoot            = FALSE;\r
-      NewFileContext->IsLoadFile        = FALSE;\r
-      NewFileContext->IsRemovableMedia  = FALSE;\r
-\r
-      NewMenuEntry->OptionNumber        = OptionNumber;\r
-      OptionNumber++;\r
-      InsertTailList (&DirectoryMenu.Head, &NewMenuEntry->Link);\r
-    }\r
-  }\r
-\r
-  DirectoryMenu.MenuNumber = OptionNumber;\r
-  SafeFreePool (DirInfo);\r
-  return TRUE;\r
-}\r
-\r
-EFI_STATUS\r
-BOpt_GetLegacyOptions (\r
-  VOID\r
-  )\r
-/*++\r
-Routine Description:\r
-  \r
-  Build the LegacyFDMenu LegacyHDMenu LegacyCDMenu according to LegacyBios.GetBbsInfo().\r
-    \r
-Arguments:\r
-  None\r
-\r
-Returns:\r
-  The device info of legacy device.\r
-  \r
---*/\r
-{\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-  BM_LEGACY_DEVICE_CONTEXT  *NewLegacyDevContext;\r
-  EFI_STATUS                Status;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  UINT16                    HddCount;\r
-  HDD_INFO                  *HddInfo;\r
-  UINT16                    BbsCount;\r
-  BBS_TABLE                 *BbsTable;\r
-  UINTN                     Index;\r
-  CHAR16                    DescString[100];\r
-  UINTN                     FDNum;\r
-  UINTN                     HDNum;\r
-  UINTN                     CDNum;\r
-  UINTN                     NETNum;\r
-  UINTN                     BEVNum;\r
-\r
-  NewMenuEntry  = NULL;\r
-  HddInfo       = NULL;\r
-  BbsTable      = NULL;\r
-  BbsCount      = 0;\r
-\r
-  //\r
-  // Initialize Bbs Table Context from BBS info data\r
-  //\r
-  InitializeListHead (&LegacyFDMenu.Head);\r
-  InitializeListHead (&LegacyHDMenu.Head);\r
-  InitializeListHead (&LegacyCDMenu.Head);\r
-  InitializeListHead (&LegacyNETMenu.Head);\r
-  InitializeListHead (&LegacyBEVMenu.Head);\r
-\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiLegacyBiosProtocolGuid,\r
-                  NULL,\r
-                  (VOID**) &LegacyBios\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-    Status = LegacyBios->GetBbsInfo (\r
-                          LegacyBios,\r
-                          &HddCount,\r
-                          &HddInfo,\r
-                          &BbsCount,\r
-                          &BbsTable\r
-                          );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  FDNum   = 0;\r
-  HDNum   = 0;\r
-  CDNum   = 0;\r
-  NETNum  = 0;\r
-  BEVNum  = 0;\r
-\r
-  for (Index = 0; Index < BbsCount; Index++) {\r
-    if ((BBS_IGNORE_ENTRY == BbsTable[Index].BootPriority) ||\r
-        (BBS_DO_NOT_BOOT_FROM == BbsTable[Index].BootPriority) ||\r
-        (BBS_LOWEST_PRIORITY == BbsTable[Index].BootPriority)\r
-        ) {\r
-      continue;\r
-    }\r
-\r
-    NewMenuEntry = BOpt_CreateMenuEntry (BM_LEGACY_DEV_CONTEXT_SELECT);\r
-    if (NULL == NewMenuEntry) {\r
-      break;\r
-    }\r
-\r
-    NewLegacyDevContext           = (BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    NewLegacyDevContext->BbsTable = &BbsTable[Index];\r
-    NewLegacyDevContext->Index    = Index;\r
-    NewLegacyDevContext->BbsCount = BbsCount;\r
-    BdsBuildLegacyDevNameString (\r
-      &BbsTable[Index],\r
-      Index,\r
-      sizeof (DescString),\r
-      DescString\r
-      );\r
-    NewLegacyDevContext->Description = AllocateZeroPool (StrSize (DescString));\r
-    if (NULL == NewLegacyDevContext->Description) {\r
-      break;\r
-    }\r
-\r
-    CopyMem (NewLegacyDevContext->Description, DescString, StrSize (DescString));\r
-    NewMenuEntry->DisplayString = NewLegacyDevContext->Description;\r
-    NewMenuEntry->HelpString    = NULL;\r
-\r
-    switch (BbsTable[Index].DeviceType) {\r
-    case BBS_FLOPPY:\r
-      InsertTailList (&LegacyFDMenu.Head, &NewMenuEntry->Link);\r
-      FDNum++;\r
-      break;\r
-\r
-    case BBS_HARDDISK:\r
-      InsertTailList (&LegacyHDMenu.Head, &NewMenuEntry->Link);\r
-      HDNum++;\r
-      break;\r
-\r
-    case BBS_CDROM:\r
-      InsertTailList (&LegacyCDMenu.Head, &NewMenuEntry->Link);\r
-      CDNum++;\r
-      break;\r
-\r
-    case BBS_EMBED_NETWORK:\r
-      InsertTailList (&LegacyNETMenu.Head, &NewMenuEntry->Link);\r
-      NETNum++;\r
-      break;\r
-\r
-    case BBS_BEV_DEVICE:\r
-      InsertTailList (&LegacyBEVMenu.Head, &NewMenuEntry->Link);\r
-      BEVNum++;\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (Index != BbsCount) {\r
-    BOpt_FreeLegacyOptions ();\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  LegacyFDMenu.MenuNumber   = FDNum;\r
-  LegacyHDMenu.MenuNumber   = HDNum;\r
-  LegacyCDMenu.MenuNumber   = CDNum;\r
-  LegacyNETMenu.MenuNumber  = NETNum;\r
-  LegacyBEVMenu.MenuNumber  = BEVNum;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-BOpt_FreeLegacyOptions (\r
-  VOID\r
-  )\r
-{\r
-  BOpt_FreeMenu (&LegacyFDMenu);\r
-  BOpt_FreeMenu (&LegacyHDMenu);\r
-  BOpt_FreeMenu (&LegacyCDMenu);\r
-  BOpt_FreeMenu (&LegacyNETMenu);\r
-  BOpt_FreeMenu (&LegacyBEVMenu);\r
-}\r
-\r
-EFI_STATUS\r
-BOpt_GetBootOptions (\r
-  IN  BMM_CALLBACK_DATA         *CallbackData\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Build the BootOptionMenu according to BootOrder Variable.\r
-  This Routine will access the Boot#### to get EFI_LOAD_OPTION \r
-  \r
-Arguments:\r
-  None\r
-\r
-Returns:\r
-  The number of the Var Boot####\r
-  \r
---*/\r
-{\r
-  UINTN                     Index;\r
-  UINT16                    BootString[10];\r
-  UINT8                     *LoadOptionFromVar;\r
-  UINT8                     *LoadOption;\r
-  UINTN                     BootOptionSize;\r
-  BOOLEAN                   BootNextFlag;\r
-  UINT16                    *BootOrderList;\r
-  UINTN                     BootOrderListSize;\r
-  UINT16                    *BootNext;\r
-  UINTN                     BootNextSize;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-  BM_LOAD_CONTEXT           *NewLoadContext;\r
-  UINT8                     *LoadOptionPtr;\r
-  UINTN                     StringSize;\r
-  UINTN                     OptionalDataSize;\r
-  UINT8                     *LoadOptionEnd;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  UINTN                     MenuCount;\r
-  UINT8                     *Ptr;\r
-\r
-  MenuCount         = 0;\r
-  BootOrderListSize = 0;\r
-  BootNextSize      = 0;\r
-  BootOrderList     = NULL;\r
-  BootNext          = NULL;\r
-  LoadOptionFromVar = NULL;\r
-  BOpt_FreeMenu (&BootOptionMenu);\r
-  InitializeListHead (&BootOptionMenu.Head);\r
-\r
-  //\r
-  // Get the BootOrder from the Var\r
-  //\r
-  BootOrderList = BdsLibGetVariableAndSize (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    &BootOrderListSize\r
-                    );\r
-\r
-  //\r
-  // Get the BootNext from the Var\r
-  //\r
-  BootNext = BdsLibGetVariableAndSize (\r
-              L"BootNext",\r
-              &gEfiGlobalVariableGuid,\r
-              &BootNextSize\r
-              );\r
-\r
-  if (BootNext) {\r
-    if (BootNextSize != sizeof (UINT16)) {\r
-      SafeFreePool (BootNext);\r
-      BootNext = NULL;\r
-    }\r
-  }\r
-\r
-  for (Index = 0; Index < BootOrderListSize / sizeof (UINT16); Index++) {\r
-    UnicodeSPrint (BootString, sizeof (BootString), L"Boot%04x", BootOrderList[Index]);\r
-    //\r
-    //  Get all loadoptions from the VAR\r
-    //\r
-    LoadOptionFromVar = BdsLibGetVariableAndSize (\r
-                          BootString,\r
-                          &gEfiGlobalVariableGuid,\r
-                          &BootOptionSize\r
-                          );\r
-    if (!LoadOptionFromVar) {\r
-      continue;\r
-    }\r
-\r
-    LoadOption = AllocateZeroPool (BootOptionSize);\r
-    if (!LoadOption) {\r
-      continue;\r
-    }\r
-\r
-    CopyMem (LoadOption, LoadOptionFromVar, BootOptionSize);\r
-    SafeFreePool (LoadOptionFromVar);\r
-\r
-    if (BootNext) {\r
-      BootNextFlag = (BOOLEAN) (*BootNext == BootOrderList[Index]);\r
-    } else {\r
-      BootNextFlag = FALSE;\r
-    }\r
-\r
-    if (0 == (*((UINT32 *) LoadOption) & LOAD_OPTION_ACTIVE)) {\r
-      SafeFreePool (LoadOption);\r
-      continue;\r
-    }\r
-    //\r
-    // BUGBUG: could not return EFI_OUT_OF_RESOURCES here directly.\r
-    // the buffer allocated already should be freed before returning.\r
-    //\r
-    NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    NewLoadContext                      = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-    LoadOptionPtr                       = LoadOption;\r
-    LoadOptionEnd                       = LoadOption + BootOptionSize;\r
-\r
-    NewMenuEntry->OptionNumber          = BootOrderList[Index];\r
-    NewLoadContext->LoadOptionModified  = FALSE;\r
-    NewLoadContext->Deleted             = FALSE;\r
-    NewLoadContext->IsBootNext          = BootNextFlag;\r
-\r
-    //\r
-    // Is a Legacy Device?\r
-    //\r
-    Ptr = (UINT8 *) LoadOption;\r
-\r
-    //\r
-    // Attribute = *(UINT32 *)Ptr;\r
-    //\r
-    Ptr += sizeof (UINT32);\r
-\r
-    //\r
-    // FilePathSize = *(UINT16 *)Ptr;\r
-    //\r
-    Ptr += sizeof (UINT16);\r
-\r
-    //\r
-    // Description = (CHAR16 *)Ptr;\r
-    //\r
-    Ptr += StrSize ((CHAR16 *) Ptr);\r
-\r
-    //\r
-    // Now Ptr point to Device Path\r
-    //\r
-    DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
-    if ((BBS_DEVICE_PATH == DevicePath->Type) && (BBS_BBS_DP == DevicePath->SubType)) {\r
-      NewLoadContext->IsLegacy = TRUE;\r
-    } else {\r
-      NewLoadContext->IsLegacy = FALSE;\r
-    }\r
-    //\r
-    // LoadOption is a pointer type of UINT8\r
-    // for easy use with following LOAD_OPTION\r
-    // embedded in this struct\r
-    //\r
-    NewLoadContext->LoadOption      = LoadOption;\r
-    NewLoadContext->LoadOptionSize  = BootOptionSize;\r
-\r
-    NewLoadContext->Attributes      = *(UINT32 *) LoadOptionPtr;\r
-    NewLoadContext->IsActive        = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_ACTIVE);\r
-\r
-    NewLoadContext->ForceReconnect  = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_FORCE_RECONNECT);\r
-\r
-    LoadOptionPtr += sizeof (UINT32);\r
-\r
-    NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;\r
-    LoadOptionPtr += sizeof (UINT16);\r
-\r
-    StringSize                  = StrSize ((UINT16 *) LoadOptionPtr);\r
-    NewLoadContext->Description = AllocateZeroPool (StringSize);\r
-    ASSERT (NewLoadContext->Description != NULL);\r
-    CopyMem (\r
-      NewLoadContext->Description,\r
-      (UINT16 *) LoadOptionPtr,\r
-      StringSize\r
-      );\r
-    NewMenuEntry->DisplayString = NewLoadContext->Description;\r
-\r
-    LoadOptionPtr += StringSize;\r
-\r
-    NewLoadContext->FilePathList = AllocateZeroPool (NewLoadContext->FilePathListLength);\r
-    ASSERT (NewLoadContext->FilePathList != NULL);\r
-    CopyMem (\r
-      NewLoadContext->FilePathList,\r
-      (EFI_DEVICE_PATH_PROTOCOL *) LoadOptionPtr,\r
-      NewLoadContext->FilePathListLength\r
-      );\r
-\r
-    NewMenuEntry->HelpString = DevicePathToStr (NewLoadContext->FilePathList);\r
-    NewMenuEntry->DisplayStringToken = GetStringTokenFromDepository (\r
-                                        CallbackData,\r
-                                        BootOptionStrDepository\r
-                                        );\r
-    NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
-                                      CallbackData,\r
-                                      BootOptionHelpStrDepository\r
-                                      );\r
-    LoadOptionPtr += NewLoadContext->FilePathListLength;\r
-\r
-    if (LoadOptionPtr < LoadOptionEnd) {\r
-      OptionalDataSize = BootOptionSize -\r
-        sizeof (UINT32) -\r
-        sizeof (UINT16) -\r
-        StringSize -\r
-        NewLoadContext->FilePathListLength;\r
-\r
-      NewLoadContext->OptionalData = AllocateZeroPool (OptionalDataSize);\r
-      ASSERT (NewLoadContext->OptionalData != NULL);\r
-      CopyMem (\r
-        NewLoadContext->OptionalData,\r
-        LoadOptionPtr,\r
-        OptionalDataSize\r
-        );\r
-\r
-      NewLoadContext->OptionalDataSize = OptionalDataSize;\r
-    }\r
-\r
-    InsertTailList (&BootOptionMenu.Head, &NewMenuEntry->Link);\r
-    MenuCount++;\r
-  }\r
-\r
-  SafeFreePool (BootNext);\r
-  SafeFreePool (BootOrderList);\r
-  BootOptionMenu.MenuNumber = MenuCount;\r
-  return MenuCount;\r
-}\r
-\r
-CHAR16 *\r
-BdsStrCpy (\r
-  OUT     CHAR16                    *Destination,\r
-  IN      CONST CHAR16              *Source\r
-  )\r
-{\r
-  CHAR16                            *ReturnValue;\r
-\r
-  //\r
-  // Destination cannot be NULL\r
-  //\r
-  ASSERT (Destination != NULL);\r
-\r
-  ReturnValue = Destination;\r
-  while (*Source) {\r
-    *(Destination++) = *(Source++);\r
-  }\r
-  *Destination = 0;\r
-  return ReturnValue;\r
-}\r
-\r
-CHAR16 *\r
-BOpt_AppendFileName (\r
-  IN  CHAR16  *Str1,\r
-  IN  CHAR16  *Str2\r
-  )\r
-/*++\r
-\r
-Routine Description\r
-  Append file name to existing file name.\r
-\r
-Arguments:\r
-  Str1  -   existing file name\r
-  Str2  -   file name to be appended\r
-\r
-Returns:\r
-  Allocate a new string to hold the appended result.\r
-  Caller is responsible to free the returned string.\r
-\r
---*/\r
-{\r
-  UINTN   Size1;\r
-  UINTN   Size2;\r
-  CHAR16  *Str;\r
-  CHAR16  *Ptr;\r
-  CHAR16  *LastSlash;\r
-\r
-  Size1 = StrSize (Str1);\r
-  Size2 = StrSize (Str2);\r
-  Str   = AllocateZeroPool (Size1 + Size2 + sizeof (CHAR16));\r
-  ASSERT (Str != NULL);\r
-\r
-  StrCat (Str, Str1);\r
-  if (!((*Str == '\\') && (*(Str + 1) == 0))) {\r
-    StrCat (Str, L"\\");\r
-  }\r
-\r
-  StrCat (Str, Str2);\r
-\r
-  Ptr       = Str;\r
-  LastSlash = Str;\r
-  while (*Ptr != 0) {\r
-    if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '.' && *(Ptr + 3) != 0) {\r
-      //\r
-      // Convert "\Name\..\" to "\"\r
-      // DO NOT convert the .. if it is at the end of the string. This will\r
-      // break the .. behavior in changing directories.\r
-      //\r
-      BdsStrCpy (LastSlash, Ptr + 3);\r
-      Ptr = LastSlash;\r
-    } else if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '\\') {\r
-      //\r
-      // Convert a "\.\" to a "\"\r
-      //\r
-      BdsStrCpy (Ptr, Ptr + 2);\r
-      Ptr = LastSlash;\r
-    } else if (*Ptr == '\\') {\r
-      LastSlash = Ptr;\r
-    }\r
-\r
-    Ptr++;\r
-  }\r
-\r
-  return Str;\r
-}\r
-\r
-BOOLEAN\r
-BOpt_IsEfiImageName (\r
-  IN UINT16  *FileName\r
-  )\r
-/*++\r
-\r
-Routine Description\r
-  Check whether current FileName point to a valid \r
-  Efi Image File.\r
-\r
-Arguments:\r
-  FileName  -   File need to be checked.\r
-\r
-Returns:\r
-  TRUE  -   Is Efi Image\r
-  FALSE -   Not a valid Efi Image\r
-  \r
---*/\r
-{\r
-  //\r
-  // Search for ".efi" extension\r
-  //\r
-  while (*FileName) {\r
-    if (FileName[0] == '.') {\r
-      if (FileName[1] == 'e' || FileName[1] == 'E') {\r
-        if (FileName[2] == 'f' || FileName[2] == 'F') {\r
-          if (FileName[3] == 'i' || FileName[3] == 'I') {\r
-            return TRUE;\r
-          } else if (FileName[3] == 0x0000) {\r
-            return FALSE;\r
-          }\r
-        } else if (FileName[2] == 0x0000) {\r
-          return FALSE;\r
-        }\r
-      } else if (FileName[1] == 0x0000) {\r
-        return FALSE;\r
-      }\r
-    }\r
-\r
-    FileName += 1;\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-\r
-RETURN_STATUS\r
-EFIAPI\r
-IsEfiAppReadFromFile (\r
-  IN     VOID    *FileHandle,\r
-  IN     UINTN   FileOffset,\r
-  IN OUT UINTN   *ReadSize,\r
-  OUT    VOID    *Buffer\r
-  )\r
-{\r
-  EFI_STATUS        Status;\r
-  EFI_FILE_HANDLE   File;\r
-    \r
-  File = (EFI_FILE_HANDLE)FileHandle;\r
-  Status = File->SetPosition (File, FileOffset);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  return File->Read (File, ReadSize, Buffer);\r
-}\r
-\r
-\r
-\r
-BOOLEAN\r
-BOpt_IsEfiApp (\r
-  IN EFI_FILE_HANDLE Dir,\r
-  IN UINT16          *FileName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Check whether current FileName point to a valid Efi Application\r
-  \r
-Arguments:\r
-  Dir       -   Pointer to current Directory\r
-  FileName  -   Pointer to current File name.\r
-  \r
-Returns:\r
-  TRUE      -   Is a valid Efi Application\r
-  FALSE     -   not a valid Efi Application\r
-  \r
---*/\r
-{\r
-  EFI_STATUS                            Status;\r
-  PE_COFF_LOADER_IMAGE_CONTEXT          ImageContext;\r
-  EFI_FILE_HANDLE                       File;\r
-\r
-  Status = Dir->Open (Dir, &File, FileName, EFI_FILE_MODE_READ, 0);\r
-  if (EFI_ERROR (Status)) {\r
-    return FALSE;\r
-  }\r
-\r
-  ZeroMem (&ImageContext, sizeof (ImageContext));\r
-  ImageContext.Handle    = (VOID *)File;\r
-  ImageContext.ImageRead = IsEfiAppReadFromFile;\r
-\r
-  Status = PeCoffLoaderGetImageInfo (&ImageContext);\r
-  File->Close (File);\r
-  if (EFI_ERROR (Status)) {\r
-    return FALSE;\r
-  }\r
-\r
-  if (ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {\r
-    return TRUE;\r
-  } else {\r
-    return FALSE;\r
-  }\r
- }\r
-\r
-\r
-EFI_STATUS\r
-BOpt_FindDrivers (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description\r
-  Find drivers that will be added as Driver#### variables from handles\r
-  in current system environment\r
-  All valid handles in the system except those consume SimpleFs, LoadFile\r
-  are stored in DriverMenu for future use.\r
-  \r
-Arguments:\r
-  None\r
-\r
-Returns:\r
-  EFI_SUCCESS\r
-  Others\r
-\r
---*/\r
-{\r
-  UINTN                           NoDevicePathHandles;\r
-  EFI_HANDLE                      *DevicePathHandle;\r
-  UINTN                           Index;\r
-  EFI_STATUS                      Status;\r
-  BM_MENU_ENTRY                   *NewMenuEntry;\r
-  BM_HANDLE_CONTEXT               *NewHandleContext;\r
-  EFI_HANDLE                      CurHandle;\r
-  UINTN                           OptionNumber;\r
-  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFs;\r
-  EFI_LOAD_FILE_PROTOCOL          *LoadFile;\r
-\r
-  SimpleFs  = NULL;\r
-  LoadFile  = NULL;\r
-\r
-  InitializeListHead (&DriverMenu.Head);\r
-\r
-  //\r
-  // At first, get all handles that support Device Path\r
-  // protocol which is the basic requirement for\r
-  // Driver####\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  NULL,\r
-                  &NoDevicePathHandles,\r
-                  &DevicePathHandle\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  OptionNumber = 0;\r
-  for (Index = 0; Index < NoDevicePathHandles; Index++) {\r
-    CurHandle = DevicePathHandle[Index];\r
-\r
-    //\r
-    //  Check whether this handle support\r
-    //  driver binding\r
-    //\r
-    Status = gBS->HandleProtocol (\r
-                    CurHandle,\r
-                    &gEfiSimpleFileSystemProtocolGuid,\r
-                    (VOID**) &SimpleFs\r
-                    );\r
-    if (Status == EFI_SUCCESS) {\r
-      continue;\r
-    }\r
-\r
-    Status = gBS->HandleProtocol (\r
-                    CurHandle,\r
-                    &gEfiLoadFileProtocolGuid,\r
-                    (VOID**) &LoadFile\r
-                    );\r
-    if (Status == EFI_SUCCESS) {\r
-      continue;\r
-    }\r
-\r
-    NewMenuEntry = BOpt_CreateMenuEntry (BM_HANDLE_CONTEXT_SELECT);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    NewHandleContext              = (BM_HANDLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    NewHandleContext->Handle      = CurHandle;\r
-    NewHandleContext->DevicePath  = DevicePathFromHandle (CurHandle);\r
-    NewMenuEntry->DisplayString = DevicePathToStr (NewHandleContext->DevicePath);\r
-    NewMenuEntry->HelpString    = NULL;\r
-    NewMenuEntry->OptionNumber  = OptionNumber;\r
-    OptionNumber++;\r
-    InsertTailList (&DriverMenu.Head, &NewMenuEntry->Link);\r
-\r
-  }\r
-\r
-  DriverMenu.MenuNumber = OptionNumber;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-UINT16\r
-BOpt_GetBootOptionNumber (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Get the Option Number that does not used \r
-  \r
-Arguments:\r
-\r
-Returns:\r
-  The Option Number\r
-  \r
---*/\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        *BootOrderList;\r
-  UINTN         BootOrderListSize;\r
-  UINT16        Number;\r
-  UINTN         Index;\r
-  UINTN         Index2;\r
-  BOOLEAN       Found;\r
-  CHAR16        StrTemp[100];\r
-  UINT16        *OptionBuffer;\r
-  UINTN         OptionSize;\r
-\r
-  BootOrderListSize = 0;\r
-  BootOrderList     = NULL;\r
-\r
-  BootOrderList = BdsLibGetVariableAndSize (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    &BootOrderListSize\r
-                    );\r
-  if (BootOrderList) {\r
-    //\r
-    // already have Boot####\r
-    //\r
-    // AlreadyBootNumbers = BootOrderListSize / sizeof(UINT16);\r
-    //\r
-    for (Index = 0; Index < BootOrderListSize / sizeof (UINT16); Index++) {\r
-      Found = TRUE;\r
-      for (Index2 = 0; Index2 < BootOptionMenu.MenuNumber; Index2++) {\r
-        NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index2);\r
-        if (Index == NewMenuEntry->OptionNumber) {\r
-          Found = FALSE;\r
-          break;\r
-        }\r
-      }\r
-\r
-      if (Found) {\r
-          UnicodeSPrint (StrTemp, 100, L"Boot%04x", Index);\r
-          DEBUG((EFI_D_ERROR,"INdex= %s\n", StrTemp));\r
-       OptionBuffer = BdsLibGetVariableAndSize (\r
-                StrTemp,\r
-                &gEfiGlobalVariableGuid,\r
-                &OptionSize\r
-                );\r
-      if (NULL == OptionBuffer) \r
-        break;\r
-      }\r
-    }\r
-    //\r
-    // end for Index\r
-    //\r
-    Number = (UINT16) Index;\r
-  } else {\r
-    //\r
-    // No Boot####\r
-    //\r
-    Number = 0;\r
-  }\r
-\r
-  return Number;\r
-}\r
-\r
-UINT16\r
-BOpt_GetDriverOptionNumber (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Get the Option Number that does not used \r
-  \r
-Arguments:\r
-\r
-Returns:\r
-  The Option Number\r
-  \r
---*/\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        *DriverOrderList;\r
-  UINTN         DriverOrderListSize;\r
-  UINT16        Number;\r
-  UINTN         Index;\r
-  UINTN         Index2;\r
-  BOOLEAN       Found;\r
-\r
-  DriverOrderListSize = 0;\r
-  DriverOrderList     = NULL;\r
-\r
-  DriverOrderList = BdsLibGetVariableAndSize (\r
-                      L"DriverOrder",\r
-                      &gEfiGlobalVariableGuid,\r
-                      &DriverOrderListSize\r
-                      );\r
-  if (DriverOrderList) {\r
-    //\r
-    // already have Driver####\r
-    //\r
-    // AlreadyDriverNumbers = DriverOrderListSize / sizeof(UINT16);\r
-    //\r
-    for (Index = 0; Index < DriverOrderListSize / sizeof (UINT16); Index++) {\r
-      Found = TRUE;\r
-      for (Index2 = 0; Index2 < DriverOptionMenu.MenuNumber; Index2++) {\r
-        NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index2);\r
-        if (Index == NewMenuEntry->OptionNumber) {\r
-          Found = FALSE;\r
-          break;\r
-        }\r
-      }\r
-\r
-      if (Found) {\r
-        break;\r
-      }\r
-    }\r
-    //\r
-    // end for Index\r
-    //\r
-    Number = (UINT16) Index;\r
-  } else {\r
-    //\r
-    // No Driver####\r
-    //\r
-    Number = 0;\r
-  }\r
-\r
-  return Number;\r
-}\r
-\r
-EFI_STATUS\r
-BOpt_GetDriverOptions (\r
-  IN  BMM_CALLBACK_DATA         *CallbackData\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Build up all DriverOptionMenu\r
-  \r
-Arguments:\r
-\r
-Returns:\r
-  The Option Number\r
-  \r
---*/\r
-{\r
-  UINTN           Index;\r
-  UINT16          DriverString[12];\r
-  UINT8           *LoadOptionFromVar;\r
-  UINT8           *LoadOption;\r
-  UINTN           DriverOptionSize;\r
-\r
-  UINT16          *DriverOrderList;\r
-  UINTN           DriverOrderListSize;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  UINT8           *LoadOptionPtr;\r
-  UINTN           StringSize;\r
-  UINTN           OptionalDataSize;\r
-  UINT8           *LoadOptionEnd;\r
-\r
-  DriverOrderListSize = 0;\r
-  DriverOrderList     = NULL;\r
-  DriverOptionSize    = 0;\r
-  LoadOptionFromVar   = NULL;\r
-  BOpt_FreeMenu (&DriverOptionMenu);\r
-  InitializeListHead (&DriverOptionMenu.Head);\r
-  //\r
-  // Get the DriverOrder from the Var\r
-  //\r
-  DriverOrderList = BdsLibGetVariableAndSize (\r
-                      L"DriverOrder",\r
-                      &gEfiGlobalVariableGuid,\r
-                      &DriverOrderListSize\r
-                      );\r
-\r
-  for (Index = 0; Index < DriverOrderListSize / sizeof (UINT16); Index++) {\r
-    UnicodeSPrint (\r
-      DriverString,\r
-      sizeof (DriverString),\r
-      L"Driver%04x",\r
-      DriverOrderList[Index]\r
-      );\r
-    //\r
-    //  Get all loadoptions from the VAR\r
-    //\r
-    LoadOptionFromVar = BdsLibGetVariableAndSize (\r
-                          DriverString,\r
-                          &gEfiGlobalVariableGuid,\r
-                          &DriverOptionSize\r
-                          );\r
-    if (!LoadOptionFromVar) {\r
-      continue;\r
-    }\r
-\r
-    LoadOption = AllocateZeroPool (DriverOptionSize);\r
-    if (!LoadOption) {\r
-      continue;\r
-    }\r
-\r
-    CopyMem (LoadOption, LoadOptionFromVar, DriverOptionSize);\r
-    SafeFreePool (LoadOptionFromVar);\r
-\r
-    NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    NewLoadContext                      = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    LoadOptionPtr                       = LoadOption;\r
-    LoadOptionEnd                       = LoadOption + DriverOptionSize;\r
-    NewMenuEntry->OptionNumber          = DriverOrderList[Index];\r
-    NewLoadContext->LoadOptionModified  = FALSE;\r
-    NewLoadContext->Deleted             = FALSE;\r
-    NewLoadContext->IsLegacy            = FALSE;\r
-\r
-    //\r
-    // LoadOption is a pointer type of UINT8\r
-    // for easy use with following LOAD_OPTION\r
-    // embedded in this struct\r
-    //\r
-    NewLoadContext->LoadOption      = LoadOption;\r
-    NewLoadContext->LoadOptionSize  = DriverOptionSize;\r
-\r
-    NewLoadContext->Attributes      = *(UINT32 *) LoadOptionPtr;\r
-    NewLoadContext->IsActive        = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_ACTIVE);\r
-\r
-    NewLoadContext->ForceReconnect  = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_FORCE_RECONNECT);\r
-\r
-    LoadOptionPtr += sizeof (UINT32);\r
-\r
-    NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;\r
-    LoadOptionPtr += sizeof (UINT16);\r
-\r
-    StringSize                  = StrSize ((UINT16 *) LoadOptionPtr);\r
-    NewLoadContext->Description = AllocateZeroPool (StringSize);\r
-    ASSERT (NewLoadContext->Description != NULL);\r
-    CopyMem (\r
-      NewLoadContext->Description,\r
-      (UINT16 *) LoadOptionPtr,\r
-      StringSize\r
-      );\r
-    NewMenuEntry->DisplayString = NewLoadContext->Description;\r
-\r
-    LoadOptionPtr += StringSize;\r
-\r
-    NewLoadContext->FilePathList = AllocateZeroPool (NewLoadContext->FilePathListLength);\r
-    ASSERT (NewLoadContext->FilePathList != NULL);\r
-    CopyMem (\r
-      NewLoadContext->FilePathList,\r
-      (EFI_DEVICE_PATH_PROTOCOL *) LoadOptionPtr,\r
-      NewLoadContext->FilePathListLength\r
-      );\r
-\r
-    NewMenuEntry->HelpString = DevicePathToStr (NewLoadContext->FilePathList);\r
-    NewMenuEntry->DisplayStringToken = GetStringTokenFromDepository (\r
-                                        CallbackData,\r
-                                        DriverOptionStrDepository\r
-                                        );\r
-    NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
-                                      CallbackData,\r
-                                      DriverOptionHelpStrDepository\r
-                                      );\r
-    LoadOptionPtr += NewLoadContext->FilePathListLength;\r
-\r
-    if (LoadOptionPtr < LoadOptionEnd) {\r
-      OptionalDataSize = DriverOptionSize -\r
-        sizeof (UINT32) -\r
-        sizeof (UINT16) -\r
-        StringSize -\r
-        NewLoadContext->FilePathListLength;\r
-\r
-      NewLoadContext->OptionalData = AllocateZeroPool (OptionalDataSize);\r
-      ASSERT (NewLoadContext->OptionalData != NULL);\r
-      CopyMem (\r
-        NewLoadContext->OptionalData,\r
-        LoadOptionPtr,\r
-        OptionalDataSize\r
-        );\r
-\r
-      NewLoadContext->OptionalDataSize = OptionalDataSize;\r
-    }\r
-\r
-    InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);\r
-\r
-  }\r
-\r
-  SafeFreePool (DriverOrderList);\r
-  DriverOptionMenu.MenuNumber = Index;\r
-  return EFI_SUCCESS;\r
-\r
-}\r
-\r
-VOID\r
-SafeFreePool (\r
-  IN VOID    *Buffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Wrap original FreePool gBS call\r
-  in order to decrease code length\r
-  \r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  if (Buffer != NULL) {\r
-    gBS->FreePool (Buffer);\r
-    Buffer = NULL;\r
-  }\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/ConsoleOption.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/ConsoleOption.c
deleted file mode 100644 (file)
index 9acacc8..0000000
+++ /dev/null
@@ -1,841 +0,0 @@
-/*++\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-    ConsoleOption.c\r
-    \r
-Abstract:\r
-\r
-    handles console redirection from boot manager\r
-\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#include "BootMaint.h"\r
-\r
-EFI_DEVICE_PATH_PROTOCOL  *\r
-DevicePathInstanceDup (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  );\r
-\r
-EFI_STATUS\r
-UpdateComAttributeFromVariable (\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath\r
-  );\r
-\r
-EFI_STATUS\r
-ChangeTerminalDevicePath (\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath,\r
-  BOOLEAN                   ChangeTerminal\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *Node;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Node1;\r
-  ACPI_HID_DEVICE_PATH      *Acpi;\r
-  UART_DEVICE_PATH          *Uart;\r
-  UART_DEVICE_PATH          *Uart1;\r
-  UINTN                     Com;\r
-  UINT32                    Match;\r
-  BM_TERMINAL_CONTEXT       *NewTerminalContext;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-\r
-  Match = EISA_PNP_ID (0x0501);\r
-  Node  = DevicePath;\r
-  Node  = NextDevicePathNode (Node);\r
-  Com   = 0;\r
-  while (!IsDevicePathEnd (Node)) {\r
-    if ((DevicePathType (Node) == ACPI_DEVICE_PATH) && (DevicePathSubType (Node) == ACPI_DP)) {\r
-      Acpi = (ACPI_HID_DEVICE_PATH *) Node;\r
-      if (CompareMem (&Acpi->HID, &Match, sizeof (UINT32)) == 0) {\r
-        CopyMem (&Com, &Acpi->UID, sizeof (UINT32));\r
-      }\r
-    }\r
-\r
-    NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Com);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {\r
-      Uart = (UART_DEVICE_PATH *) Node;\r
-      CopyMem (\r
-        &Uart->BaudRate,\r
-        &NewTerminalContext->BaudRate,\r
-        sizeof (UINT64)\r
-        );\r
-\r
-      CopyMem (\r
-        &Uart->DataBits,\r
-        &NewTerminalContext->DataBits,\r
-        sizeof (UINT8)\r
-        );\r
-\r
-      CopyMem (\r
-        &Uart->Parity,\r
-        &NewTerminalContext->Parity,\r
-        sizeof (UINT8)\r
-        );\r
-\r
-      CopyMem (\r
-        &Uart->StopBits,\r
-        &NewTerminalContext->StopBits,\r
-        sizeof (UINT8)\r
-        );\r
-      //\r
-      // Change the device path in the ComPort\r
-      //\r
-      if (ChangeTerminal) {\r
-        Node1 = NewTerminalContext->DevicePath;\r
-        Node1 = NextDevicePathNode (Node1);\r
-        while (!IsDevicePathEnd (Node1)) {\r
-          if ((DevicePathType (Node1) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node1) == MSG_UART_DP)) {\r
-            Uart1 = (UART_DEVICE_PATH *) Node1;\r
-            CopyMem (\r
-              &Uart1->BaudRate,\r
-              &NewTerminalContext->BaudRate,\r
-              sizeof (UINT64)\r
-              );\r
-\r
-            CopyMem (\r
-              &Uart1->DataBits,\r
-              &NewTerminalContext->DataBits,\r
-              sizeof (UINT8)\r
-              );\r
-\r
-            CopyMem (\r
-              &Uart1->Parity,\r
-              &NewTerminalContext->Parity,\r
-              sizeof (UINT8)\r
-              );\r
-\r
-            CopyMem (\r
-              &Uart1->StopBits,\r
-              &NewTerminalContext->StopBits,\r
-              sizeof (UINT8)\r
-              );\r
-            break;\r
-          }\r
-          //\r
-          // end if\r
-          //\r
-          Node1 = NextDevicePathNode (Node1);\r
-        }\r
-        //\r
-        // end while\r
-        //\r
-        break;\r
-      }\r
-    }\r
-\r
-    Node = NextDevicePathNode (Node);\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-\r
-}\r
-\r
-VOID\r
-ChangeVariableDevicePath (\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *Node;\r
-  ACPI_HID_DEVICE_PATH      *Acpi;\r
-  UART_DEVICE_PATH          *Uart;\r
-  UINTN                     Com;\r
-  UINT32                    Match;\r
-  BM_TERMINAL_CONTEXT       *NewTerminalContext;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-\r
-  Match = EISA_PNP_ID (0x0501);\r
-  Node  = DevicePath;\r
-  Node  = NextDevicePathNode (Node);\r
-  Com   = 0;\r
-  while (!IsDevicePathEnd (Node)) {\r
-    if ((DevicePathType (Node) == ACPI_DEVICE_PATH) && (DevicePathSubType (Node) == ACPI_DP)) {\r
-      Acpi = (ACPI_HID_DEVICE_PATH *) Node;\r
-      if (CompareMem (&Acpi->HID, &Match, sizeof (UINT32)) == 0) {\r
-        CopyMem (&Com, &Acpi->UID, sizeof (UINT32));\r
-      }\r
-    }\r
-\r
-    if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {\r
-      NewMenuEntry = BOpt_GetMenuEntry (\r
-                      &TerminalMenu,\r
-                      Com\r
-                      );\r
-      ASSERT (NewMenuEntry != NULL);\r
-      NewTerminalContext  = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-      Uart                = (UART_DEVICE_PATH *) Node;\r
-      CopyMem (\r
-        &Uart->BaudRate,\r
-        &NewTerminalContext->BaudRate,\r
-        sizeof (UINT64)\r
-        );\r
-\r
-      CopyMem (\r
-        &Uart->DataBits,\r
-        &NewTerminalContext->DataBits,\r
-        sizeof (UINT8)\r
-        );\r
-\r
-      CopyMem (\r
-        &Uart->Parity,\r
-        &NewTerminalContext->Parity,\r
-        sizeof (UINT8)\r
-        );\r
-\r
-      CopyMem (\r
-        &Uart->StopBits,\r
-        &NewTerminalContext->StopBits,\r
-        sizeof (UINT8)\r
-        );\r
-    }\r
-\r
-    Node = NextDevicePathNode (Node);\r
-  }\r
-\r
-  return ;\r
-}\r
-\r
-BOOLEAN\r
-IsTerminalDevicePath (\r
-  IN  EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
-  OUT TYPE_OF_TERMINAL         *Termi,\r
-  OUT UINTN                    *Com\r
-  );\r
-\r
-EFI_STATUS\r
-LocateSerialIo (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Build a list containing all serial devices \r
-  \r
-Arguments:\r
-  \r
-Returns:\r
-  \r
---*/\r
-{\r
-  UINT8                     *Ptr;\r
-  UINTN                     Index;\r
-  UINTN                     Index2;\r
-  UINTN                     NoHandles;\r
-  EFI_HANDLE                *Handles;\r
-  EFI_STATUS                Status;\r
-  ACPI_HID_DEVICE_PATH      *Acpi;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  UINT32                    Match;\r
-  EFI_SERIAL_IO_PROTOCOL    *SerialIo;\r
-  EFI_DEVICE_PATH_PROTOCOL  *OutDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *InpDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *ErrDevicePath;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-  BM_TERMINAL_CONTEXT       *NewTerminalContext;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevicePath;\r
-  VENDOR_DEVICE_PATH        Vendor;\r
-  //\r
-  // Get all handles that have SerialIo protocol installed\r
-  //\r
-  InitializeListHead (&TerminalMenu.Head);\r
-  TerminalMenu.MenuNumber = 0;\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiSerialIoProtocolGuid,\r
-                  NULL,\r
-                  &NoHandles,\r
-                  &Handles\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // No serial ports present\r
-    //\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  for (Index = 0; Index < NoHandles; Index++) {\r
-    //\r
-    // Check to see whether the handle has DevicePath Protocol installed\r
-    //\r
-    gBS->HandleProtocol (\r
-          Handles[Index],\r
-          &gEfiDevicePathProtocolGuid,\r
-          (VOID**) &DevicePath\r
-          );\r
-    Ptr = (UINT8 *) DevicePath;\r
-    while (*Ptr != END_DEVICE_PATH_TYPE) {\r
-      Ptr++;\r
-    }\r
-\r
-    Ptr   = Ptr - sizeof (UART_DEVICE_PATH) - sizeof (ACPI_HID_DEVICE_PATH);\r
-    Acpi  = (ACPI_HID_DEVICE_PATH *) Ptr;\r
-    Match = EISA_PNP_ID (0x0501);\r
-\r
-    if (CompareMem (&Acpi->HID, &Match, sizeof (UINT32)) == 0) {\r
-      NewMenuEntry = BOpt_CreateMenuEntry (BM_TERMINAL_CONTEXT_SELECT);\r
-      if (!NewMenuEntry) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-\r
-      NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-      CopyMem (&NewMenuEntry->OptionNumber, &Acpi->UID, sizeof (UINT32));\r
-      NewTerminalContext->DevicePath = DevicePathInstanceDup (DevicePath);\r
-      //\r
-      // BugBug: I have no choice, calling EfiLibStrFromDatahub will hang the system!\r
-      // coz' the misc data for each platform is not correct, actually it's the device path stored in\r
-      // datahub which is not completed, so a searching for end of device path will enter a\r
-      // dead-loop.\r
-      //\r
-      NewMenuEntry->DisplayString = EfiLibStrFromDatahub (DevicePath);\r
-      if (NULL == NewMenuEntry->DisplayString) {\r
-        NewMenuEntry->DisplayString = DevicePathToStr (DevicePath);\r
-      }\r
-\r
-      NewMenuEntry->HelpString = NULL;\r
-\r
-      gBS->HandleProtocol (\r
-            Handles[Index],\r
-            &gEfiSerialIoProtocolGuid,\r
-            (VOID**) &SerialIo\r
-            );\r
-\r
-      CopyMem (\r
-        &NewTerminalContext->BaudRate,\r
-        &SerialIo->Mode->BaudRate,\r
-        sizeof (UINT64)\r
-        );\r
-\r
-      CopyMem (\r
-        &NewTerminalContext->DataBits,\r
-        &SerialIo->Mode->DataBits,\r
-        sizeof (UINT8)\r
-        );\r
-\r
-      CopyMem (\r
-        &NewTerminalContext->Parity,\r
-        &SerialIo->Mode->Parity,\r
-        sizeof (UINT8)\r
-        );\r
-\r
-      CopyMem (\r
-        &NewTerminalContext->StopBits,\r
-        &SerialIo->Mode->StopBits,\r
-        sizeof (UINT8)\r
-        );\r
-      InsertTailList (&TerminalMenu.Head, &NewMenuEntry->Link);\r
-      TerminalMenu.MenuNumber++;\r
-    }\r
-  }\r
-  //\r
-  // Get L"ConOut", L"ConIn" and L"ErrOut" from the Var\r
-  //\r
-  OutDevicePath = EfiLibGetVariable (L"ConOut", &gEfiGlobalVariableGuid);\r
-  InpDevicePath = EfiLibGetVariable (L"ConIn", &gEfiGlobalVariableGuid);\r
-  ErrDevicePath = EfiLibGetVariable (L"ErrOut", &gEfiGlobalVariableGuid);\r
-  if (OutDevicePath) {\r
-    UpdateComAttributeFromVariable (OutDevicePath);\r
-  }\r
-\r
-  if (InpDevicePath) {\r
-    UpdateComAttributeFromVariable (InpDevicePath);\r
-  }\r
-\r
-  if (ErrDevicePath) {\r
-    UpdateComAttributeFromVariable (ErrDevicePath);\r
-  }\r
-\r
-  for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    NewTerminalContext                = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-    NewTerminalContext->TerminalType  = 0;\r
-    NewTerminalContext->IsConIn       = FALSE;\r
-    NewTerminalContext->IsConOut      = FALSE;\r
-    NewTerminalContext->IsStdErr      = FALSE;\r
-\r
-    Vendor.Header.Type                = MESSAGING_DEVICE_PATH;\r
-    Vendor.Header.SubType             = MSG_VENDOR_DP;\r
-\r
-    for (Index2 = 0; Index2 < 4; Index2++) {\r
-      CopyMem (&Vendor.Guid, &Guid[Index2], sizeof (EFI_GUID));\r
-      SetDevicePathNodeLength (&Vendor.Header, sizeof (VENDOR_DEVICE_PATH));\r
-      NewDevicePath = AppendDevicePathNode (\r
-                        NewTerminalContext->DevicePath,\r
-                        (EFI_DEVICE_PATH_PROTOCOL *) &Vendor\r
-                        );\r
-      SafeFreePool (NewMenuEntry->HelpString);\r
-      //\r
-      // NewMenuEntry->HelpString = DevicePathToStr (NewDevicePath);\r
-      // NewMenuEntry->DisplayString = NewMenuEntry->HelpString;\r
-      //\r
-      NewMenuEntry->HelpString = NULL;\r
-\r
-      if (BdsLibMatchDevicePaths (OutDevicePath, NewDevicePath)) {\r
-        NewTerminalContext->IsConOut      = TRUE;\r
-        NewTerminalContext->TerminalType  = (UINT8) Index2;\r
-      }\r
-\r
-      if (BdsLibMatchDevicePaths (InpDevicePath, NewDevicePath)) {\r
-        NewTerminalContext->IsConIn       = TRUE;\r
-        NewTerminalContext->TerminalType  = (UINT8) Index2;\r
-      }\r
-\r
-      if (BdsLibMatchDevicePaths (ErrDevicePath, NewDevicePath)) {\r
-        NewTerminalContext->IsStdErr      = TRUE;\r
-        NewTerminalContext->TerminalType  = (UINT8) Index2;\r
-      }\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-UpdateComAttributeFromVariable (\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Update Com Ports attributes from DevicePath\r
-  \r
-Arguments:\r
-  DevicePath  -   DevicePath that contains Com ports\r
-  \r
-Returns:\r
-  \r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *Node;\r
-  EFI_DEVICE_PATH_PROTOCOL  *SerialNode;\r
-  ACPI_HID_DEVICE_PATH      *Acpi;\r
-  UART_DEVICE_PATH          *Uart;\r
-  UART_DEVICE_PATH          *Uart1;\r
-  UINT32                    Match;\r
-  UINTN                     TerminalNumber;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-  BM_TERMINAL_CONTEXT       *NewTerminalContext;\r
-  UINTN                     Index;\r
-\r
-  Match           = EISA_PNP_ID (0x0501);\r
-  Node            = DevicePath;\r
-  Node            = NextDevicePathNode (Node);\r
-  TerminalNumber  = 0;\r
-  for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-    while (!IsDevicePathEnd (Node)) {\r
-      if ((DevicePathType (Node) == ACPI_DEVICE_PATH) && (DevicePathSubType (Node) == ACPI_DP)) {\r
-        Acpi = (ACPI_HID_DEVICE_PATH *) Node;\r
-        if (CompareMem (&Acpi->HID, &Match, sizeof (UINT32)) == 0) {\r
-          CopyMem (&TerminalNumber, &Acpi->UID, sizeof (UINT32));\r
-        }\r
-      }\r
-\r
-      if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {\r
-        Uart          = (UART_DEVICE_PATH *) Node;\r
-        NewMenuEntry  = BOpt_GetMenuEntry (&TerminalMenu, TerminalNumber);\r
-        if (NULL == NewMenuEntry) {\r
-          return EFI_NOT_FOUND;\r
-        }\r
-\r
-        NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-        CopyMem (\r
-          &NewTerminalContext->BaudRate,\r
-          &Uart->BaudRate,\r
-          sizeof (UINT64)\r
-          );\r
-\r
-        CopyMem (\r
-          &NewTerminalContext->DataBits,\r
-          &Uart->DataBits,\r
-          sizeof (UINT8)\r
-          );\r
-\r
-        CopyMem (\r
-          &NewTerminalContext->Parity,\r
-          &Uart->Parity,\r
-          sizeof (UINT8)\r
-          );\r
-\r
-        CopyMem (\r
-          &NewTerminalContext->StopBits,\r
-          &Uart->StopBits,\r
-          sizeof (UINT8)\r
-          );\r
-\r
-        SerialNode  = NewTerminalContext->DevicePath;\r
-        SerialNode  = NextDevicePathNode (SerialNode);\r
-        while (!IsDevicePathEnd (SerialNode)) {\r
-          if ((DevicePathType (SerialNode) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (SerialNode) == MSG_UART_DP)) {\r
-            //\r
-            // Update following device paths according to\r
-            // previous acquired uart attributes\r
-            //\r
-            Uart1 = (UART_DEVICE_PATH *) SerialNode;\r
-            CopyMem (\r
-              &Uart1->BaudRate,\r
-              &NewTerminalContext->BaudRate,\r
-              sizeof (UINT64)\r
-              );\r
-\r
-            CopyMem (\r
-              &Uart1->DataBits,\r
-              &NewTerminalContext->DataBits,\r
-              sizeof (UINT8)\r
-              );\r
-            CopyMem (\r
-              &Uart1->Parity,\r
-              &NewTerminalContext->Parity,\r
-              sizeof (UINT8)\r
-              );\r
-            CopyMem (\r
-              &Uart1->StopBits,\r
-              &NewTerminalContext->StopBits,\r
-              sizeof (UINT8)\r
-              );\r
-\r
-            break;\r
-          }\r
-\r
-          SerialNode = NextDevicePathNode (SerialNode);\r
-        }\r
-        //\r
-        // end while\r
-        //\r
-      }\r
-\r
-      Node = NextDevicePathNode (Node);\r
-    }\r
-    //\r
-    // end while\r
-    //\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevicePathInstanceDup (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Function creates a device path data structure that identically matches the \r
-  device path passed in.\r
-\r
-Arguments:\r
-  DevPath      - A pointer to a device path data structure.\r
-\r
-Returns:\r
-\r
-  The new copy of DevPath is created to identically match the input.  \r
-  Otherwise, NULL is returned.\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevPath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePathInst;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Temp;\r
-  UINT8                     *Ptr;\r
-  UINTN                     Size;\r
-\r
-  //\r
-  // get the size of an instance from the input\r
-  //\r
-  Temp            = DevPath;\r
-  DevicePathInst  = GetNextDevicePathInstance (&Temp, &Size);\r
-\r
-  //\r
-  // Make a copy and set proper end type\r
-  //\r
-  NewDevPath = NULL;\r
-  if (Size) {\r
-    NewDevPath = AllocateZeroPool (Size);\r
-    ASSERT (NewDevPath != NULL);\r
-  }\r
-\r
-  if (NewDevPath) {\r
-    CopyMem (NewDevPath, DevicePathInst, Size);\r
-    Ptr = (UINT8 *) NewDevPath;\r
-    Ptr += Size - sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
-    Temp = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
-    SetDevicePathEndNode (Temp);\r
-  }\r
-\r
-  return NewDevPath;\r
-}\r
-\r
-EFI_STATUS\r
-GetConsoleMenu (\r
-  IN UINTN              ConsoleMenuType\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *AllDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *MultiDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePathInst;\r
-  UINTN                     Size;\r
-  UINTN                     AllCount;\r
-  UINTN                     Index;\r
-  UINTN                     Index2;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-  BM_CONSOLE_CONTEXT        *NewConsoleContext;\r
-  BM_TERMINAL_CONTEXT       *NewTerminalContext;\r
-  TYPE_OF_TERMINAL          Terminal;\r
-  BM_MENU_ENTRY             *NewTerminalMenuEntry;\r
-  UINTN                     Com;\r
-  BM_MENU_OPTION            *ConsoleMenu;\r
-\r
-  DevicePath    = NULL;\r
-  AllDevicePath = NULL;\r
-  AllCount      = 0;\r
-  switch (ConsoleMenuType) {\r
-  case BM_CONSOLE_IN_CONTEXT_SELECT:\r
-    ConsoleMenu = &ConsoleInpMenu;\r
-    DevicePath = EfiLibGetVariable (\r
-                  L"ConIn",\r
-                  &gEfiGlobalVariableGuid\r
-                  );\r
-\r
-    AllDevicePath = EfiLibGetVariable (\r
-                      L"ConInDev",\r
-                      &gEfiGlobalVariableGuid\r
-                      );\r
-    break;\r
-\r
-  case BM_CONSOLE_OUT_CONTEXT_SELECT:\r
-    ConsoleMenu = &ConsoleOutMenu;\r
-    DevicePath = EfiLibGetVariable (\r
-                  L"ConOut",\r
-                  &gEfiGlobalVariableGuid\r
-                  );\r
-\r
-    AllDevicePath = EfiLibGetVariable (\r
-                      L"ConOutDev",\r
-                      &gEfiGlobalVariableGuid\r
-                      );\r
-    break;\r
-\r
-  case BM_CONSOLE_ERR_CONTEXT_SELECT:\r
-    ConsoleMenu = &ConsoleErrMenu;\r
-    DevicePath = EfiLibGetVariable (\r
-                  L"ErrOut",\r
-                  &gEfiGlobalVariableGuid\r
-                  );\r
-\r
-    AllDevicePath = EfiLibGetVariable (\r
-                      L"ErrOutDev",\r
-                      &gEfiGlobalVariableGuid\r
-                      );\r
-    break;\r
-\r
-  default:\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  if (NULL == AllDevicePath) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  InitializeListHead (&ConsoleMenu->Head);\r
-\r
-  AllCount                = EfiDevicePathInstanceCount (AllDevicePath);\r
-  ConsoleMenu->MenuNumber = 0;\r
-  //\r
-  // Following is menu building up for Console Out Devices\r
-  //\r
-  MultiDevicePath = AllDevicePath;\r
-  Index2          = 0;\r
-  for (Index = 0; Index < AllCount; Index++) {\r
-    DevicePathInst  = GetNextDevicePathInstance (&MultiDevicePath, &Size);\r
-\r
-    NewMenuEntry    = BOpt_CreateMenuEntry (BM_CONSOLE_CONTEXT_SELECT);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    NewConsoleContext             = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    NewMenuEntry->OptionNumber    = Index2;\r
-\r
-    NewConsoleContext->DevicePath = DevicePathInstanceDup (DevicePathInst);\r
-    NewMenuEntry->DisplayString   = EfiLibStrFromDatahub (NewConsoleContext->DevicePath);\r
-    if (NULL == NewMenuEntry->DisplayString) {\r
-      NewMenuEntry->DisplayString = DevicePathToStr (NewConsoleContext->DevicePath);\r
-    }\r
-\r
-    NewConsoleContext->IsTerminal = IsTerminalDevicePath (\r
-                                      NewConsoleContext->DevicePath,\r
-                                      &Terminal,\r
-                                      &Com\r
-                                      );\r
-\r
-    NewConsoleContext->IsActive = BdsLibMatchDevicePaths (\r
-                                    DevicePath,\r
-                                    NewConsoleContext->DevicePath\r
-                                    );\r
-    NewTerminalMenuEntry  = NULL;\r
-    NewTerminalContext    = NULL;\r
-\r
-    if (NewConsoleContext->IsTerminal) {\r
-      BOpt_DestroyMenuEntry (NewMenuEntry);\r
-    } else {\r
-      Index2++;\r
-      ConsoleMenu->MenuNumber++;\r
-      InsertTailList (&ConsoleMenu->Head, &NewMenuEntry->Link);\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-GetAllConsoles (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Build up ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu\r
-\r
-Arguments:\r
-  \r
-Returns:\r
-  EFI_SUCCESS \r
-  Others\r
-  \r
---*/\r
-{\r
-  GetConsoleMenu (BM_CONSOLE_IN_CONTEXT_SELECT);\r
-  GetConsoleMenu (BM_CONSOLE_OUT_CONTEXT_SELECT);\r
-  GetConsoleMenu (BM_CONSOLE_ERR_CONTEXT_SELECT);\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-FreeAllConsoles (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Free ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu\r
-\r
-Arguments:\r
-  \r
-Returns:\r
-  EFI_SUCCESS \r
-  Others\r
-  \r
---*/\r
-{\r
-  BOpt_FreeMenu (&ConsoleOutMenu);\r
-  BOpt_FreeMenu (&ConsoleInpMenu);\r
-  BOpt_FreeMenu (&ConsoleErrMenu);\r
-  BOpt_FreeMenu (&TerminalMenu);\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-BOOLEAN\r
-IsTerminalDevicePath (\r
-  IN  EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
-  OUT TYPE_OF_TERMINAL         *Termi,\r
-  OUT UINTN                    *Com\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Test whether DevicePath is a valid Terminal\r
-\r
-Arguments:\r
-  DevicePath  -   DevicePath to be checked\r
-  Termi       -   If is terminal, give its type\r
-  Com         -   If is Com Port, give its type\r
-  \r
-Returns:\r
-  TRUE        -   If DevicePath point to a Terminal\r
-  FALSE\r
-  \r
---*/\r
-{\r
-  UINT8                 *Ptr;\r
-  BOOLEAN               IsTerminal;\r
-  VENDOR_DEVICE_PATH    *Vendor;\r
-  ACPI_HID_DEVICE_PATH  *Acpi;\r
-  UINT32                Match;\r
-  EFI_GUID              TempGuid;\r
-\r
-  IsTerminal = FALSE;\r
-\r
-  //\r
-  // Parse the Device Path, should be change later!!!\r
-  //\r
-  Ptr = (UINT8 *) DevicePath;\r
-  while (*Ptr != END_DEVICE_PATH_TYPE) {\r
-    Ptr++;\r
-  }\r
-\r
-  Ptr     = Ptr - sizeof (VENDOR_DEVICE_PATH);\r
-  Vendor  = (VENDOR_DEVICE_PATH *) Ptr;\r
-\r
-  //\r
-  // There are four kinds of Terminal types\r
-  // check to see whether this devicepath\r
-  // is one of that type\r
-  //\r
-  CopyMem (&TempGuid, &Vendor->Guid, sizeof (EFI_GUID));\r
-\r
-  if (CompareGuid (&TempGuid, &Guid[0])) {\r
-    *Termi      = PC_ANSI;\r
-    IsTerminal  = TRUE;\r
-  } else {\r
-    if (CompareGuid (&TempGuid, &Guid[1])) {\r
-      *Termi      = VT_100;\r
-      IsTerminal  = TRUE;\r
-    } else {\r
-      if (CompareGuid (&TempGuid, &Guid[2])) {\r
-        *Termi      = VT_100_PLUS;\r
-        IsTerminal  = TRUE;\r
-      } else {\r
-        if (CompareGuid (&TempGuid, &Guid[3])) {\r
-          *Termi      = VT_UTF8;\r
-          IsTerminal  = TRUE;\r
-        } else {\r
-          IsTerminal = FALSE;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  if (!IsTerminal) {\r
-    return FALSE;\r
-  }\r
-\r
-  Ptr   = Ptr - sizeof (UART_DEVICE_PATH) - sizeof (ACPI_HID_DEVICE_PATH);\r
-  Acpi  = (ACPI_HID_DEVICE_PATH *) Ptr;\r
-  Match = EISA_PNP_ID (0x0501);\r
-  if (CompareMem (&Acpi->HID, &Match, sizeof (UINT32)) == 0) {\r
-    CopyMem (Com, &Acpi->UID, sizeof (UINT32));\r
-  } else {\r
-    return FALSE;\r
-  }\r
-\r
-  return TRUE;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Data.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Data.c
deleted file mode 100644 (file)
index 196bbe2..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Data.c\r
-    \r
-Abstract:\r
-\r
-  Define some data used for Boot Maint\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#include "BootMaint.h"\r
-\r
-EFI_HII_UPDATE_DATA *UpdateData;\r
-STRING_DEPOSITORY   *FileOptionStrDepository;\r
-STRING_DEPOSITORY   *ConsoleOptionStrDepository;\r
-STRING_DEPOSITORY   *BootOptionStrDepository;\r
-STRING_DEPOSITORY   *BootOptionHelpStrDepository;\r
-STRING_DEPOSITORY   *DriverOptionStrDepository;\r
-STRING_DEPOSITORY   *DriverOptionHelpStrDepository;\r
-STRING_DEPOSITORY   *TerminalStrDepository;\r
-\r
-//\r
-// Terminal type string token storage\r
-//\r
-UINT16              TerminalType[] = {\r
-  STRING_TOKEN(STR_COM_TYPE_0),\r
-  STRING_TOKEN(STR_COM_TYPE_1),\r
-  STRING_TOKEN(STR_COM_TYPE_2),\r
-  STRING_TOKEN(STR_COM_TYPE_3),\r
-};\r
-\r
-//\r
-// File system selection menu\r
-//\r
-BM_MENU_OPTION      FsOptionMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Console Input Device Selection Menu\r
-//\r
-BM_MENU_OPTION      ConsoleInpMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Console Output Device Selection Menu\r
-//\r
-BM_MENU_OPTION      ConsoleOutMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Error Output Device Selection Menu\r
-//\r
-BM_MENU_OPTION      ConsoleErrMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Boot Option from variable Menu\r
-//\r
-BM_MENU_OPTION      BootOptionMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Driver Option from variable menu\r
-//\r
-BM_MENU_OPTION      DriverOptionMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Legacy FD Info from LegacyBios.GetBbsInfo()\r
-//\r
-BM_MENU_OPTION      LegacyFDMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Legacy HD Info from LegacyBios.GetBbsInfo()\r
-//\r
-BM_MENU_OPTION      LegacyHDMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Legacy CD Info from LegacyBios.GetBbsInfo()\r
-//\r
-BM_MENU_OPTION      LegacyCDMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Legacy NET Info from LegacyBios.GetBbsInfo()\r
-//\r
-BM_MENU_OPTION      LegacyNETMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Legacy NET Info from LegacyBios.GetBbsInfo()\r
-//\r
-BM_MENU_OPTION      LegacyBEVMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Files and sub-directories in current directory menu\r
-//\r
-BM_MENU_OPTION      DirectoryMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Handles in current system selection menu\r
-//\r
-BM_MENU_OPTION      DriverMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-BM_MENU_OPTION      TerminalMenu = {\r
-  BM_MENU_OPTION_SIGNATURE,\r
-  { NULL, NULL},\r
-  0\r
-};\r
-\r
-//\r
-// Value and string token correspondency for BaudRate\r
-//\r
-COM_ATTR            BaudRateList[19] = {\r
-  {\r
-    115200,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_0)\r
-  },\r
-  {\r
-    57600,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_1)\r
-  },\r
-  {\r
-    38400,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_2)\r
-  },\r
-  {\r
-    19200,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_3)\r
-  },\r
-  {\r
-    9600,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_4)\r
-  },\r
-  {\r
-    7200,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_5)\r
-  },\r
-  {\r
-    4800,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_6)\r
-  },\r
-  {\r
-    3600,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_7)\r
-  },\r
-  {\r
-    2400,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_8)\r
-  },\r
-  {\r
-    2000,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_9)\r
-  },\r
-  {\r
-    1800,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_10)\r
-  },\r
-  {\r
-    1200,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_11)\r
-  },\r
-  {\r
-    600,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_12)\r
-  },\r
-  {\r
-    300,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_13)\r
-  },\r
-  {\r
-    150,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_14)\r
-  },\r
-  {\r
-    134,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_15)\r
-  },\r
-  {\r
-    110,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_16)\r
-  },\r
-  {\r
-    75,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_17)\r
-  },\r
-  {\r
-    50,\r
-    STRING_TOKEN(STR_COM_BAUD_RATE_18)\r
-  }\r
-};\r
-\r
-//\r
-// Value and string token correspondency for DataBits\r
-//\r
-COM_ATTR            DataBitsList[4] = {\r
-  {\r
-    5,\r
-    STRING_TOKEN(STR_COM_DATA_BITS_0)\r
-  },\r
-  {\r
-    6,\r
-    STRING_TOKEN(STR_COM_DATA_BITS_1)\r
-  },\r
-  {\r
-    7,\r
-    STRING_TOKEN(STR_COM_DATA_BITS_2)\r
-  },\r
-  {\r
-    8,\r
-    STRING_TOKEN(STR_COM_DATA_BITS_3)\r
-  }\r
-};\r
-\r
-//\r
-// Value and string token correspondency for Parity\r
-//\r
-COM_ATTR            ParityList[5] = {\r
-  {\r
-    NoParity,\r
-    STRING_TOKEN(STR_COM_PAR_0)\r
-  },\r
-  {\r
-    EvenParity,\r
-    STRING_TOKEN(STR_COM_PAR_1)\r
-  },\r
-  {\r
-    OddParity,\r
-    STRING_TOKEN(STR_COM_PAR_2)\r
-  },\r
-  {\r
-    MarkParity,\r
-    STRING_TOKEN(STR_COM_PAR_3)\r
-  },\r
-  {\r
-    SpaceParity,\r
-    STRING_TOKEN(STR_COM_PAR_4)\r
-  }\r
-};\r
-\r
-//\r
-// Value and string token correspondency for Baudreate\r
-//\r
-COM_ATTR            StopBitsList[3] = {\r
-  {\r
-    OneStopBit,\r
-    STRING_TOKEN(STR_COM_STOP_BITS_0)\r
-  },\r
-  {\r
-    OneFiveStopBits,\r
-    STRING_TOKEN(STR_COM_STOP_BITS_1)\r
-  },\r
-  {\r
-    TwoStopBits,\r
-    STRING_TOKEN(STR_COM_STOP_BITS_2)\r
-  }\r
-};\r
-\r
-//\r
-// Guid for messaging path, used in Serial port setting.\r
-//\r
-EFI_GUID            Guid[4] = {\r
-  DEVICE_PATH_MESSAGING_PC_ANSI,\r
-  DEVICE_PATH_MESSAGING_VT_100,\r
-  DEVICE_PATH_MESSAGING_VT_100_PLUS,\r
-  DEVICE_PATH_MESSAGING_VT_UTF8\r
-};\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FE.vfr b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FE.vfr
deleted file mode 100644 (file)
index a10553a..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-// *++\r
-//\r
-// Copyright (c) 2006, Intel Corporation                                                         \r
-// All rights reserved. This program and the accompanying materials                          \r
-// are licensed and made available under the terms and conditions of the BSD License         \r
-// which accompanies this distribution.  The full text of the license may be found at        \r
-// http://opensource.org/licenses/bsd-license.php                                            \r
-//                                                                                           \r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-// \r
-// Module Name:\r
-//\r
-//   FE.vfr \r
-// \r
-// Abstract:\r
-// \r
-//   File Explorer Formset\r
-// \r
-// Revision History: \r
-// \r
-// --*/\r
-\r
-#include "BdsStrDefs.h" \r
-#include "FormGuid.h"\r
-\r
-#pragma pack(1)\r
-typedef struct {\r
-  UINT16                    DescriptionData[75];\r
-  UINT16                    OptionalData[127];\r
-  UINT8                     Active;\r
-  UINT8                     ForceReconnect;  \r
-} FILE_EXPLORER_NV_DATA;\r
-#pragma pack()\r
-\r
-#define FORM_FILE_EXPLORER_ID                 0x001E\r
-#define FORM_BOOT_ADD_DESCRIPTION_ID          0x001F\r
-#define FORM_DRIVER_ADD_FILE_DESCRIPTION_ID   0x0020\r
-#define KEY_VALUE_SAVE_AND_EXIT               0x0090\r
-#define KEY_VALUE_NO_SAVE_AND_EXIT            0x0091\r
-\r
-\r
-\r
-formset \r
-  guid = FILE_EXPLORE_FORMSET_GUID,\r
-  title = STRING_TOKEN(STR_FILE_EXPLORER_TITLE),\r
-  help = STRING_TOKEN(STR_NULL_STRING),\r
-  class = 0,\r
-  subclass = 0,\r
-\r
-  form formid = FORM_FILE_EXPLORER_ID,\r
-       title = STRING_TOKEN(STR_FILE_EXPLORER_TITLE);\r
-\r
-       label FORM_FILE_EXPLORER_ID;\r
-  endform;\r
-  \r
-  form formid = FORM_BOOT_ADD_DESCRIPTION_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_ADD_DESC_TITLE);\r
-       \r
-       label FORM_BOOT_ADD_DESCRIPTION_ID;\r
-\r
-       subtitle  text = STRING_TOKEN(STR_NULL_STRING);\r
-       \r
-       string    varid    = FILE_EXPLORER_NV_DATA.DescriptionData,\r
-                 prompt   = STRING_TOKEN(STR_LOAD_OPTION_DESC),\r
-                 help     = STRING_TOKEN(STR_NULL_STRING),\r
-                 minsize  = 6,\r
-                 maxsize  = 75,\r
-       endstring;\r
-\r
-       string    varid    = FILE_EXPLORER_NV_DATA.OptionalData,\r
-                       prompt   = STRING_TOKEN(STR_OPTIONAL_DATA),\r
-                       help     = STRING_TOKEN(STR_NULL_STRING),\r
-                       minsize  = 0,\r
-                       maxsize  = 120,\r
-       endstring;\r
-\r
-       text \r
-         help   = STRING_TOKEN(STR_SAVE_AND_EXIT),  \r
-         text   = STRING_TOKEN(STR_SAVE_AND_EXIT), \r
-         text   = STRING_TOKEN(STR_NULL_STRING),\r
-         flags  = INTERACTIVE | NV_ACCESS,\r
-         key    = KEY_VALUE_SAVE_AND_EXIT;\r
-             \r
-       text \r
-         help   = STRING_TOKEN(STR_NO_SAVE_AND_EXIT),  \r
-         text   = STRING_TOKEN(STR_NO_SAVE_AND_EXIT), \r
-         text   = STRING_TOKEN(STR_NULL_STRING),\r
-         flags  = INTERACTIVE | NV_ACCESS,\r
-         key    = KEY_VALUE_NO_SAVE_AND_EXIT;\r
-    \r
-  endform;\r
-\r
-  form formid = FORM_DRIVER_ADD_FILE_DESCRIPTION_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_ADD_DESC_TITLE);\r
-       \r
-       label FORM_DRIVER_ADD_FILE_DESCRIPTION_ID;\r
-       \r
-       subtitle  text = STRING_TOKEN(STR_NULL_STRING);\r
-\r
-       string    varid    = FILE_EXPLORER_NV_DATA.DescriptionData,\r
-                 prompt   = STRING_TOKEN(STR_LOAD_OPTION_DESC),\r
-                 help     = STRING_TOKEN(STR_NULL_STRING),\r
-                 minsize  = 6,\r
-                 maxsize  = 75,\r
-       endstring;\r
-\r
-       string    varid    = FILE_EXPLORER_NV_DATA.OptionalData,\r
-                 prompt   = STRING_TOKEN(STR_OPTIONAL_DATA),\r
-                 help     = STRING_TOKEN(STR_NULL_STRING),\r
-                 minsize  = 0,\r
-                 maxsize  = 120,\r
-       endstring; \r
-       \r
-       checkbox varid    = FILE_EXPLORER_NV_DATA.ForceReconnect,\r
-               prompt   = STRING_TOKEN(STR_LOAD_OPTION_FORCE_RECON),\r
-               help     = STRING_TOKEN(STR_LOAD_OPTION_FORCE_RECON),  \r
-               flags    = 1,\r
-               key      = 0,\r
-       endcheckbox;\r
-\r
-       text \r
-         help   = STRING_TOKEN(STR_SAVE_AND_EXIT),  \r
-         text   = STRING_TOKEN(STR_SAVE_AND_EXIT), \r
-         text   = STRING_TOKEN(STR_NULL_STRING),\r
-         flags  = INTERACTIVE | NV_ACCESS,\r
-         key    = KEY_VALUE_SAVE_AND_EXIT;\r
-      \r
-       text \r
-         help   = STRING_TOKEN(STR_NO_SAVE_AND_EXIT),  \r
-         text   = STRING_TOKEN(STR_NO_SAVE_AND_EXIT), \r
-         text   = STRING_TOKEN(STR_NULL_STRING),\r
-         flags  = INTERACTIVE | NV_ACCESS,\r
-         key    = KEY_VALUE_NO_SAVE_AND_EXIT;\r
-               \r
-  endform;\r
-  \r
-endformset;
\ No newline at end of file
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FileExplorer.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FileExplorer.c
deleted file mode 100644 (file)
index db835cf..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  FileExplorer.c\r
-    \r
-AgBStract:\r
-\r
-  File explorer related functions.\r
-\r
---*/\r
-\r
-#include "Generic/Bds.h"\r
-#include "BootMaint.h"\r
-#include "BdsPlatform.h"\r
-\r
-VOID\r
-UpdateFileExplorePage (\r
-  IN BMM_CALLBACK_DATA            *CallbackData,\r
-  BM_MENU_OPTION                  *MenuOption\r
-  )\r
-/*++\r
-Routine Description:\r
-  Update the File Explore page.\r
-\r
-Arguments:\r
-  MenuOption      - Pointer to menu options to display.\r
-\r
-Returns:\r
-  None.\r
-\r
---*/\r
-{\r
-  UINT8           *Location;\r
-  UINTN           Index;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_FILE_CONTEXT *NewFileContext;\r
-  FORM_ID         FormId;\r
-\r
-  NewMenuEntry    = NULL;\r
-  NewFileContext  = NULL;\r
-  FormId          = 0;\r
-\r
-  //\r
-  // Clean up file explore page.\r
-  //\r
-  RefreshUpdateData (FALSE, 0, FALSE, 0, 0xff);\r
-\r
-  //\r
-  // Remove all op-codes from dynamic page\r
-  //\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->FeHiiHandle,\r
-                      FORM_FILE_EXPLORER_ID,\r
-                      FALSE,\r
-                      UpdateData\r
-                      );\r
-\r
-  RefreshUpdateData (TRUE, (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackData->FeCallbackHandle, FALSE, 0, 0);\r
-\r
-  Location = (UINT8 *) &UpdateData->Data;\r
-\r
-  for (Index = 0; Index < MenuOption->MenuNumber; Index++) {\r
-    NewMenuEntry    = BOpt_GetMenuEntry (MenuOption, Index);\r
-    NewFileContext  = (BM_FILE_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-    if (NewFileContext->IsBootLegacy) {\r
-      continue;\r
-    }\r
-\r
-    if ((NewFileContext->IsDir) || (BOOT_FROM_FILE_STATE == CallbackData->FeCurrentState)) {\r
-      //\r
-      // Create Text opcode for directory, also create Text opcode for file in BOOT_FROM_FILE_STATE.\r
-      //\r
-      CreateTextOpCode (\r
-        NewMenuEntry->DisplayStringToken,\r
-        STR_NULL_STRING,\r
-        STR_NULL_STRING,\r
-        EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-        (UINT16) (FILE_OPTION_OFFSET + Index),\r
-        Location\r
-        );\r
-    } else {\r
-      //\r
-      // Create Goto opcode for file in ADD_BOOT_OPTION_STATE or ADD_DRIVER_OPTION_STATE.\r
-      //\r
-      if (ADD_BOOT_OPTION_STATE == CallbackData->FeCurrentState) {\r
-        FormId = FORM_BOOT_ADD_DESCRIPTION_ID;\r
-      } else if (ADD_DRIVER_OPTION_STATE == CallbackData->FeCurrentState) {\r
-        FormId = FORM_DRIVER_ADD_FILE_DESCRIPTION_ID;\r
-      }\r
-\r
-      CreateGotoOpCode (\r
-        FormId,\r
-        NewMenuEntry->DisplayStringToken,\r
-        STRING_TOKEN (STR_NULL_STRING),\r
-        EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-        (UINT16) (FILE_OPTION_OFFSET + Index),\r
-        Location\r
-        );\r
-    }\r
-\r
-    UpdateData->DataCount++;\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  }\r
-\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->FeHiiHandle,\r
-                      FORM_FILE_EXPLORER_ID,\r
-                      TRUE,\r
-                      UpdateData\r
-                      );\r
-}\r
-\r
-BOOLEAN\r
-UpdateFileExplorer (\r
-  IN BMM_CALLBACK_DATA            *CallbackData,\r
-  IN UINT16                       KeyValue\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Update the file explower page with the refershed file system.\r
-\r
-Arguments:\r
-  CallbackData  -   BMM context data\r
-  KeyValue        - Key value to identify the type of data to expect.\r
-\r
-Returns:\r
-  TRUE          - Inform the caller to create a callback packet to exit file explorer.\r
-  FALSE         - Indicate that there is no need to exit file explorer.\r
-\r
---*/\r
-{\r
-  UINT16          FileOptionMask;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_FILE_CONTEXT *NewFileContext;\r
-  FORM_ID         FormId;\r
-  BOOLEAN         ExitFileExplorer;\r
-  EFI_STATUS      Status;\r
-  \r
-  NewMenuEntry      = NULL;\r
-  NewFileContext    = NULL;\r
-  ExitFileExplorer  = FALSE;\r
-\r
-  FileOptionMask    = (UINT16) (FILE_OPTION_MASK & KeyValue);\r
-\r
-  if (UNKNOWN_CONTEXT == CallbackData->FeDisplayContext) {\r
-    //\r
-    // First in, display file system.\r
-    //\r
-    BOpt_FreeMenu (&FsOptionMenu);\r
-    BOpt_FindFileSystem (CallbackData);\r
-    CreateMenuStringToken (CallbackData, CallbackData->FeHiiHandle, &FsOptionMenu);\r
-\r
-    UpdateFileExplorePage (CallbackData, &FsOptionMenu);\r
-\r
-    CallbackData->FeDisplayContext = FILE_SYSTEM;\r
-  } else {\r
-    if (FILE_SYSTEM == CallbackData->FeDisplayContext) {\r
-      NewMenuEntry = BOpt_GetMenuEntry (&FsOptionMenu, FileOptionMask);\r
-    } else if (DIRECTORY == CallbackData->FeDisplayContext) {\r
-      NewMenuEntry = BOpt_GetMenuEntry (&DirectoryMenu, FileOptionMask);\r
-    }\r
-\r
-    CallbackData->FeDisplayContext  = DIRECTORY;\r
-\r
-    NewFileContext                  = (BM_FILE_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-    if (NewFileContext->IsDir ) {\r
-      RemoveEntryList (&NewMenuEntry->Link);\r
-      BOpt_FreeMenu (&DirectoryMenu);\r
-      Status = BOpt_FindFiles (CallbackData, NewMenuEntry);\r
-       if (EFI_ERROR (Status)) {\r
-         ExitFileExplorer = TRUE;\r
-         goto exit;\r
-       }\r
-      CreateMenuStringToken (CallbackData, CallbackData->FeHiiHandle, &DirectoryMenu);\r
-      BOpt_DestroyMenuEntry (NewMenuEntry);\r
-\r
-      UpdateFileExplorePage (CallbackData, &DirectoryMenu);\r
-\r
-    } else {\r
-      switch (CallbackData->FeCurrentState) {\r
-      case BOOT_FROM_FILE_STATE:\r
-        //\r
-        // Here boot from file\r
-        //\r
-        BootThisFile (NewFileContext);\r
-        ExitFileExplorer = TRUE;\r
-        break;\r
-\r
-      case ADD_BOOT_OPTION_STATE:\r
-      case ADD_DRIVER_OPTION_STATE:\r
-        if (ADD_BOOT_OPTION_STATE == CallbackData->FeCurrentState) {\r
-          FormId = FORM_BOOT_ADD_DESCRIPTION_ID;\r
-        } else {\r
-          FormId = FORM_DRIVER_ADD_FILE_DESCRIPTION_ID;\r
-        }\r
-\r
-        CallbackData->MenuEntry = NewMenuEntry;\r
-        CallbackData->LoadContext->FilePathList = ((BM_FILE_CONTEXT *) (CallbackData->MenuEntry->VariableContext))->DevicePath;\r
-\r
-        //\r
-        // Clean up file explore page.\r
-        //\r
-        RefreshUpdateData (FALSE, 0, FALSE, 0, 1);\r
-\r
-        //\r
-        // Remove the Subtitle op-code.\r
-        //\r
-        CallbackData->Hii->UpdateForm (\r
-                            CallbackData->Hii,\r
-                            CallbackData->FeHiiHandle,\r
-                            FormId,\r
-                            FALSE,\r
-                            UpdateData\r
-                            );\r
-\r
-        //\r
-        // Create Subtitle op-code for the display string of the option.\r
-        //\r
-        RefreshUpdateData (TRUE, (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackData->FeCallbackHandle, FALSE, 0, 1);\r
-\r
-        CreateSubTitleOpCode (\r
-          NewMenuEntry->DisplayStringToken,\r
-          &UpdateData->Data\r
-          );\r
-\r
-        CallbackData->Hii->UpdateForm (\r
-                            CallbackData->Hii,\r
-                            CallbackData->FeHiiHandle,\r
-                            FormId,\r
-                            TRUE,\r
-                            UpdateData\r
-                            );\r
-        break;\r
-\r
-      default:\r
-        break;\r
-      }\r
-    }\r
-  }\r
-exit:\r
-  return ExitFileExplorer;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FileExplorerCallback (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *Data,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  )\r
-/*++\r
-Routine Description:\r
-  Callback Function for file exploration and file interaction.\r
-\r
-Arguments:\r
-  This            - File explorer callback protocol pointer.     \r
-  KeyValue        - Key value to identify the type of data to expect.\r
-  Data            - A pointer to the data being sent to the original exporting driver.\r
-  Packet          - A pointer to a packet of information which a driver passes back to the browser.\r
-\r
-Returns:\r
-  EFI_SUCCESS     - Callback ended successfully.\r
-  Others          - Contain some errors.\r
-  \r
---*/\r
-{\r
-  BMM_CALLBACK_DATA     *Private;\r
-  FILE_EXPLORER_NV_DATA *NvRamMap;\r
-  EFI_STATUS            Status;\r
-\r
-  Status                          = EFI_SUCCESS;\r
-  Private                         = FE_CALLBACK_DATA_FROM_THIS (This);\r
-  UpdateData->FormCallbackHandle  = (EFI_PHYSICAL_ADDRESS) (UINTN) Private->FeCallbackHandle;\r
-  NvRamMap                        = (FILE_EXPLORER_NV_DATA *) Data->NvRamMap;\r
-\r
-  if (KEY_VALUE_SAVE_AND_EXIT == KeyValue) {\r
-    //\r
-    // Apply changes and exit formset.\r
-    //\r
-    if (ADD_BOOT_OPTION_STATE == Private->FeCurrentState) {\r
-      Status = Var_UpdateBootOption (Private, NvRamMap);\r
-      if (EFI_ERROR (Status)) {\r
-        return Status;\r
-      }\r
-\r
-      BOpt_GetBootOptions (Private);\r
-      CreateMenuStringToken (Private, Private->FeHiiHandle, &BootOptionMenu);\r
-    } else if (ADD_DRIVER_OPTION_STATE == Private->FeCurrentState) {\r
-      Status = Var_UpdateDriverOption (\r
-                Private,\r
-                Private->FeHiiHandle,\r
-                NvRamMap->DescriptionData,\r
-                NvRamMap->OptionalData,\r
-                NvRamMap->ForceReconnect\r
-                );\r
-      if (EFI_ERROR (Status)) {\r
-        return Status;\r
-      }\r
-\r
-      BOpt_GetDriverOptions (Private);\r
-      CreateMenuStringToken (Private, Private->FeHiiHandle, &DriverOptionMenu);\r
-    }\r
-\r
-    CreateCallbackPacket (Packet, EXIT_REQUIRED | NV_NOT_CHANGED);\r
-  } else if (KEY_VALUE_NO_SAVE_AND_EXIT == KeyValue) {\r
-    //\r
-    // Discard changes and exit formset.\r
-    //\r
-    NvRamMap->OptionalData[0]     = 0x0000;\r
-    NvRamMap->DescriptionData[0]  = 0x0000;\r
-    CreateCallbackPacket (Packet, EXIT_REQUIRED | NV_NOT_CHANGED);\r
-  } else if (KeyValue < FILE_OPTION_OFFSET) {\r
-    //\r
-    // Exit File Explorer formset.\r
-    //\r
-    CreateCallbackPacket (Packet, EXIT_REQUIRED);\r
-  } else {\r
-    if (UpdateFileExplorer (Private, KeyValue)) {\r
-      CreateCallbackPacket (Packet, EXIT_REQUIRED);\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FormGuid.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/FormGuid.h
deleted file mode 100644 (file)
index 8b55159..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-// *++\r
-//\r
-// Copyright (c) 2006, Intel Corporation\r
-// All rights reserved. This program and the accompanying materials\r
-// are licensed and made available under the terms and conditions of the BSD License\r
-// which accompanies this distribution.  The full text of the license may be found at\r
-// http://opensource.org/licenses/bsd-license.php\r
-//\r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-//\r
-// Module Name:\r
-//\r
-//   FormGuid.h\r
-//\r
-// Abstract:\r
-//\r
-//   Formset guids for Boot Maintenance Manager\r
-//\r
-// Revision History:\r
-//\r
-// --*/\r
-//\r
-#define MAIN_FORMSET_GUID \\r
-  { \\r
-    0x642237c7, 0x35d4, 0x472d, { 0x83, 0x65, 0x12, 0xe0, 0xcc, 0xf2, 0x7a, 0x22 } \\r
-  }\r
-\r
-#define FILE_EXPLORE_FORMSET_GUID \\r
-  { \\r
-    0x1f2d63e1, 0xfebd, 0x4dc7, { 0x9c, 0xc5, 0xba, 0x2b, 0x1c, 0xef, 0x9c, 0x5b } \\r
-  }\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/UpdatePage.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/UpdatePage.c
deleted file mode 100644 (file)
index 865227b..0000000
+++ /dev/null
@@ -1,1275 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  UpdatePage.c\r
-    \r
-AgBStract:\r
-\r
-  Dynamically Update the pages\r
-\r
---*/\r
-\r
-#include "Generic/Bds.h"\r
-#include "BootMaint.h"\r
-#include "BdsPlatform.h"\r
-\r
-EFI_GUID gTerminalDriverGuid = {\r
-  0x10634d8e, 0x1c05, 0x46cb, {0xbb, 0xc, 0x5a, 0xfd, 0xc8, 0x29, 0xa8, 0xc8}\r
-};\r
-\r
-VOID\r
-RefreshUpdateData (\r
-  IN BOOLEAN                      FormSetUpdate,\r
-  IN EFI_PHYSICAL_ADDRESS         FormCallbackHandle,\r
-  IN BOOLEAN                      FormUpdate,\r
-  IN STRING_REF                   FormTitle,\r
-  IN UINT16                       DataCount\r
-  )\r
-/*++\r
-Routine Description:\r
-  Refresh the global UpdateData structure.\r
-\r
-Arguments:\r
-  FormSetUpdate      - If TRUE, next variable is significant\r
-  FormCallbackHandle - If not 0, will update FormSet with this info\r
-  FormUpdate         - If TRUE, next variable is significant\r
-  FormTitle          - If not 0, will update Form with this info\r
-  DataCount          - The number of Data entries in this structure\r
-\r
-Returns:\r
-  None.\r
---*/\r
-{\r
-  UpdateData->FormSetUpdate = FormSetUpdate;\r
-  if (FormSetUpdate) {\r
-    ASSERT (0 != FormCallbackHandle);\r
-    UpdateData->FormCallbackHandle = FormCallbackHandle;\r
-  }\r
-\r
-  UpdateData->FormUpdate  = FALSE;\r
-  UpdateData->FormTitle   = FormTitle;\r
-  UpdateData->DataCount   = DataCount;\r
-}\r
-\r
-VOID\r
-UpdatePageStart (\r
-  IN BMM_CALLBACK_DATA                *CallbackData,\r
-  IN OUT UINT8                        **CurrentLocation\r
-  )\r
-{\r
-  RefreshUpdateData (TRUE, (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackData->BmmCallbackHandle, FALSE, 0, 0);\r
-\r
-  if (!(CallbackData->BmmAskSaveOrNot)) {\r
-    //\r
-    // Add a "Go back to main page" tag in front of the form when there are no\r
-    // "Apply changes" and "Discard changes" tags in the end of the form.\r
-    //\r
-    CreateGotoOpCode (\r
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
-      STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      FORM_MAIN_ID,\r
-      *CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-\r
-    *CurrentLocation = *CurrentLocation + ((EFI_IFR_OP_HEADER *) (*CurrentLocation))->Length;\r
-  }\r
-\r
-}\r
-\r
-VOID\r
-UpdatePageEnd (\r
-  IN BMM_CALLBACK_DATA                *CallbackData,\r
-  IN UINT8                            *CurrentLocation\r
-  )\r
-{\r
-  //\r
-  // Create the "Apply changes" and "Discard changes" tags.\r
-  //\r
-  if (CallbackData->BmmAskSaveOrNot) {\r
-    CreateGotoOpCode (\r
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_SAVE_AND_EXIT),\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      KEY_VALUE_SAVE_AND_EXIT,\r
-      CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-\r
-    CurrentLocation = CurrentLocation + ((EFI_IFR_OP_HEADER *) CurrentLocation)->Length;\r
-\r
-    CreateGotoOpCode (\r
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      KEY_VALUE_NO_SAVE_AND_EXIT,\r
-      CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-  }\r
-  //\r
-  // Ensure user can return to the main page.\r
-  //\r
-  if (0 == UpdateData->DataCount) {\r
-    CreateGotoOpCode (\r
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      KEY_VALUE_NO_SAVE_AND_EXIT,\r
-      CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->BmmHiiHandle,\r
-                      CallbackData->BmmCurrentPageId,\r
-                      TRUE,\r
-                      UpdateData\r
-                      );\r
-}\r
-\r
-VOID\r
-CleanUpPage (\r
-  IN EFI_FORM_LABEL                   LabelId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  RefreshUpdateData (FALSE, 0, FALSE, 0, 0xff);\r
-\r
-  //\r
-  // Remove all op-codes from dynamic page\r
-  //\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->BmmHiiHandle,\r
-                      LabelId,\r
-                      FALSE,\r
-                      UpdateData\r
-                      );\r
-}\r
-\r
-EFI_STATUS\r
-BootThisFile (\r
-  IN BM_FILE_CONTEXT                   *FileContext\r
-  )\r
-{\r
-  EFI_STATUS        Status;\r
-  UINTN             ExitDataSize;\r
-  CHAR16            *ExitData;\r
-  BDS_COMMON_OPTION *Option;\r
-\r
-  Status                  = gBS->AllocatePool (EfiBootServicesData, sizeof (BDS_COMMON_OPTION), (VOID**) &Option);\r
-  Option->Description     = FileContext->FileName;\r
-  Option->DevicePath      = FileContext->DevicePath;\r
-  Option->LoadOptionsSize = 0;\r
-  Option->LoadOptions     = NULL;\r
-\r
-  //\r
-  // Since current no boot from removable media directly is allowed */\r
-  //\r
-  gST->ConOut->ClearScreen (gST->ConOut);\r
-\r
-  ExitDataSize  = 0;\r
-\r
-  Status        = BdsLibBootViaBootOption (Option, Option->DevicePath, &ExitDataSize, &ExitData);\r
-\r
-  return Status;\r
-\r
-}\r
-\r
-VOID\r
-UpdateConCOMPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        Index;\r
-  UINT8         *Location;\r
-  EFI_STATUS    Status;\r
-  VOID         *Interface;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = FALSE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  Status = EfiLibLocateProtocol (&gTerminalDriverGuid, &Interface);\r
-  if (!EFI_ERROR (Status)) {\r
-    for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-      NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
\r
-      CreateGotoOpCode (\r
-        FORM_CON_COM_SETUP_ID,\r
-        NewMenuEntry->DisplayStringToken,\r
-        STRING_TOKEN (STR_NULL_STRING),\r
-        EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-        (UINT16) (TERMINAL_OPTION_OFFSET + Index),\r
-        Location\r
-        );\r
-      Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      UpdateData->DataCount++;\r
-    }\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateBootDelPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  UINT16          Index;\r
-  UINT8           *Location;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
-\r
-  for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-    NewMenuEntry    = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
-    NewLoadContext  = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (NewLoadContext->IsLegacy) {\r
-      continue;\r
-    }\r
-\r
-    NewLoadContext->Deleted = FALSE;\r
-    CallbackData->BmmFakeNvData->BootOptionDel[Index] = 0x00;\r
-\r
-    CreateCheckBoxOpCode (\r
-      (UINT16) (BOOT_OPTION_DEL_QUESTION_ID + Index),\r
-      (UINT8) 1,\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      (UINT16) BOOT_OPTION_DEL_QUESTION_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateDrvAddHandlePage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        Index;\r
-  UINT8         *Location;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = FALSE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);\r
-\r
-    CreateGotoOpCode (\r
-      FORM_DRV_ADD_HANDLE_DESC_ID,\r
-      NewMenuEntry->DisplayStringToken,\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      (UINT16) (HANDLE_OPTION_OFFSET + Index),\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateDrvDelPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  UINT16          Index;\r
-  UINT8           *Location;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu);\r
-\r
-  for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
-    NewMenuEntry            = BOpt_GetMenuEntry (&DriverOptionMenu, Index);\r
-\r
-    NewLoadContext          = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    NewLoadContext->Deleted = FALSE;\r
-    CallbackData->BmmFakeNvData->DriverOptionDel[Index] = 0x00;\r
-\r
-    CreateCheckBoxOpCode (\r
-      (UINT16) (DRIVER_OPTION_DEL_QUESTION_ID + Index),\r
-      (UINT8) 1,\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      (UINT16) DRIVER_OPTION_DEL_QUESTION_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateDriverAddHandleDescPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT8         *Location;\r
-\r
-  Location  = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmFakeNvData->DriverAddActive          = 0x01;\r
-  CallbackData->BmmFakeNvData->DriverAddForceReconnect  = 0x00;\r
-  CallbackData->BmmAskSaveOrNot                         = TRUE;\r
-  NewMenuEntry = CallbackData->MenuEntry;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  UpdateData->DataCount += (UINT16) 4;\r
-\r
-  CreateSubTitleOpCode (\r
-    NewMenuEntry->DisplayStringToken,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  CreateStringOpCode (\r
-    DRV_ADD_HANDLE_DESC_QUESTION_ID,\r
-    (UINT8) 150,\r
-    STRING_TOKEN (STR_LOAD_OPTION_DESC),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    6,\r
-    75,\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_DRIVER_ADD_DESC_DATA,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  CreateCheckBoxOpCode (\r
-    DRV_ADD_RECON_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
-    STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    DRV_ADD_RECON_QUESTION_ID,\r
-    Location\r
-    );\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  CreateStringOpCode (\r
-    DRIVER_ADD_OPTION_QUESTION_ID,\r
-    (UINT8) 150,\r
-    STRING_TOKEN (STR_OPTIONAL_DATA),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    6,\r
-    75,\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_DRIVER_ADD_OPT_DATA,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateConsolePage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BM_MENU_OPTION                   *ConsoleMenu,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY       *NewMenuEntry;\r
-  BM_CONSOLE_CONTEXT  *NewConsoleContext;\r
-  BM_TERMINAL_CONTEXT *NewTerminalContext;\r
-  UINT16              Index;\r
-  UINT16              Index2;\r
-  UINT8               *Location;\r
-  UINT8               CheckFlags;\r
-  EFI_STATUS          Status;\r
-  VOID               *Interface;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) {\r
-    NewMenuEntry      = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
-    NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    CheckFlags        = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewConsoleContext->IsActive) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      CallbackData->BmmFakeNvData->ConsoleCheck[Index] = TRUE;\r
-    } else {\r
-      CallbackData->BmmFakeNvData->ConsoleCheck[Index] = FALSE;\r
-    }\r
-\r
-    CreateCheckBoxOpCode (\r
-      (UINT16) (CON_DEVICE_QUESTION_ID + Index),\r
-      (UINT8) 1,\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      CheckFlags,\r
-      (UINT16) (CONSOLE_OPTION_OFFSET + Index),\r
-      Location\r
-      );\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  Status = EfiLibLocateProtocol (&gTerminalDriverGuid, &Interface);\r
-  if (!EFI_ERROR (Status)) {\r
-    for (Index2 = 0; Index2 < TerminalMenu.MenuNumber; Index2++) {\r
-      CheckFlags          = EFI_IFR_FLAG_INTERACTIVE;\r
-      NewMenuEntry        = BOpt_GetMenuEntry (&TerminalMenu, Index2);\r
-      NewTerminalContext  = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-      if ((NewTerminalContext->IsConIn && (UpdatePageId == FORM_CON_IN_ID)) ||\r
-          (NewTerminalContext->IsConOut && (UpdatePageId == FORM_CON_OUT_ID)) ||\r
-          (NewTerminalContext->IsStdErr && (UpdatePageId == FORM_CON_ERR_ID))\r
-          ) {\r
-        CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-        CallbackData->BmmFakeNvData->ConsoleCheck[Index] = TRUE;\r
-      } else {\r
-        CallbackData->BmmFakeNvData->ConsoleCheck[Index] = FALSE;\r
-      }\r
-\r
-      CreateCheckBoxOpCode (\r
-        (UINT16) (CON_DEVICE_QUESTION_ID + Index),\r
-        (UINT8) 1,\r
-        NewMenuEntry->DisplayStringToken,\r
-        NewMenuEntry->HelpStringToken,\r
-        CheckFlags,\r
-        (UINT16) (CONSOLE_OPTION_OFFSET + Index),\r
-        Location\r
-        );\r
-      Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      UpdateData->DataCount++;\r
-      Index++;\r
-    }\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateOrderPage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BM_MENU_OPTION                   *OptionMenu,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        Index;\r
-  UINT8         *Location;\r
-  IFR_OPTION    *IfrOptionList;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
-\r
-  ZeroMem (CallbackData->BmmFakeNvData->OptionOrder, 100);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * OptionMenu->MenuNumber);\r
-  if (NULL == IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;\r
-    IfrOptionList[Index].Value = (UINT16) (NewMenuEntry->OptionNumber + 1);\r
-    IfrOptionList[Index].OptionString = NULL;\r
-    CallbackData->BmmFakeNvData->OptionOrder[Index] = (UINT8) (IfrOptionList[Index].Value);\r
-  }\r
-\r
-  if (OptionMenu->MenuNumber > 0) {\r
-    CreateOrderedListOpCode (\r
-      (UINT16) OPTION_ORDER_QUESTION_ID,\r
-      (UINT8) 100,\r
-      STRING_TOKEN (STR_CHANGE_ORDER),\r
-      STRING_TOKEN (STR_CHANGE_ORDER),\r
-      IfrOptionList,\r
-      OptionMenu->MenuNumber,\r
-      Location\r
-      );\r
-\r
-    for (Index = 0; Index < OptionMenu->MenuNumber + 2; Index++) {\r
-      Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    }\r
-\r
-    UpdateData->DataCount = (UINT16) (UpdateData->DataCount + OptionMenu->MenuNumber + 2);\r
-  }\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-\r
-  CopyMem (\r
-    CallbackData->BmmOldFakeNVData.OptionOrder,\r
-    CallbackData->BmmFakeNvData->OptionOrder,\r
-    100\r
-    );\r
-}\r
-\r
-VOID\r
-UpdateBootNextPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT8           *Location;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  IFR_OPTION      *IfrOptionList;\r
-  UINTN           NumberOfOptions;\r
-  UINT16          Index;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  IfrOptionList                 = NULL;\r
-  NumberOfOptions               = BootOptionMenu.MenuNumber;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
-\r
-  if (NumberOfOptions > 0) {\r
-    UpdateData->DataCount = (UINT8) (UpdateData->DataCount + NumberOfOptions);\r
-    IfrOptionList = AllocateZeroPool ((NumberOfOptions + 1) * sizeof (IFR_OPTION));\r
-\r
-    ASSERT (IfrOptionList);\r
-\r
-    CallbackData->BmmFakeNvData->BootNext = (UINT16) (BootOptionMenu.MenuNumber);\r
-\r
-    for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-      NewMenuEntry    = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
-      NewLoadContext  = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-      if (NewLoadContext->IsBootNext) {\r
-        IfrOptionList[Index].Flags            = EFI_IFR_FLAG_DEFAULT | EFI_IFR_FLAG_INTERACTIVE;\r
-        CallbackData->BmmFakeNvData->BootNext = Index;\r
-      } else {\r
-        IfrOptionList[Index].Flags = EFI_IFR_FLAG_INTERACTIVE;\r
-      }\r
-\r
-      IfrOptionList[Index].Key          = (UINT16) KEY_VALUE_MAIN_BOOT_NEXT;\r
-      IfrOptionList[Index].Value        = Index;\r
-      IfrOptionList[Index].StringToken  = NewMenuEntry->DisplayStringToken;\r
-      IfrOptionList[Index].OptionString = NULL;\r
-    }\r
-\r
-    IfrOptionList[Index].Key          = (UINT16) KEY_VALUE_MAIN_BOOT_NEXT;\r
-    IfrOptionList[Index].Value        = Index;\r
-    IfrOptionList[Index].StringToken  = STRING_TOKEN (STR_NONE);\r
-    IfrOptionList[Index].Flags        = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (CallbackData->BmmFakeNvData->BootNext == Index) {\r
-      IfrOptionList[Index].Flags |= EFI_IFR_FLAG_DEFAULT;\r
-    }\r
-\r
-    IfrOptionList[Index].OptionString = NULL;\r
-\r
-    CreateOneOfOpCode (\r
-      (UINT16) BOOT_NEXT_QUESTION_ID,\r
-      (UINT8) 2,\r
-      STRING_TOKEN (STR_BOOT_NEXT),\r
-      STRING_TOKEN (STR_BOOT_NEXT_HELP),\r
-      IfrOptionList,\r
-      (UINTN) (NumberOfOptions + 1),\r
-      Location\r
-      );\r
-    Location  = Location + (NumberOfOptions + 2) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    Location  = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-    UpdateData->DataCount += 3;\r
-    SafeFreePool (IfrOptionList);\r
-    IfrOptionList = NULL;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateTimeOutPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT8   *Location;\r
-  UINT16  BootTimeOut;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  BootTimeOut = BdsLibGetTimeout ();\r
-\r
-  CreateNumericOpCode (\r
-    (UINT16) BOOT_TIME_OUT_QUESTION_ID,\r
-    (UINT8) 2,\r
-    STRING_TOKEN (STR_NUM_AUTO_BOOT),\r
-    STRING_TOKEN (STR_HLP_AUTO_BOOT),\r
-    0,\r
-    65535,\r
-    0,\r
-    10,\r
-    0,\r
-    0,\r
-    Location\r
-    );\r
-\r
-  CallbackData->BmmFakeNvData->BootTimeOut = (UINT16) BootTimeOut;\r
-  UpdateData->DataCount++;\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateTerminalPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT16              Index;\r
-  UINT8               *Location;\r
-  UINT8               CheckFlags;\r
-  IFR_OPTION          *IfrOptionList;\r
-  BM_MENU_ENTRY       *NewMenuEntry;\r
-  BM_TERMINAL_CONTEXT *NewTerminalContext;\r
-\r
-  ZeroMem (UpdateData, UPDATE_DATA_SIZE);\r
-  Location = (UINT8 *) &UpdateData->Data;\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  NewMenuEntry = BOpt_GetMenuEntry (\r
-                  &TerminalMenu,\r
-                  CallbackData->CurrentTerminal\r
-                  );\r
-\r
-  if (!NewMenuEntry) {\r
-    return ;\r
-  }\r
-\r
-  NewTerminalContext  = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-  IfrOptionList       = AllocateZeroPool (sizeof (IFR_OPTION) * 19);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 19; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->BaudRate == (UINT64) (BaudRateList[Index].Value)) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      NewTerminalContext->BaudRateIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMBaudRate  = NewTerminalContext->BaudRateIndex;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_BAUD_RATE;\r
-    IfrOptionList[Index].StringToken  = BaudRateList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_BAUD_RATE_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_BAUD_RATE),\r
-    STRING_TOKEN (STR_COM_BAUD_RATE),\r
-    IfrOptionList,\r
-    19,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 4);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 4; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-\r
-    if (NewTerminalContext->DataBits == DataBitsList[Index].Value) {\r
-      NewTerminalContext->DataBitsIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMDataRate  = NewTerminalContext->DataBitsIndex;\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_DATA_BITS;\r
-    IfrOptionList[Index].StringToken  = DataBitsList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_DATA_RATE_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_DATA_BITS),\r
-    STRING_TOKEN (STR_COM_DATA_BITS),\r
-    IfrOptionList,\r
-    4,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 5);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 5; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->Parity == ParityList[Index].Value) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      NewTerminalContext->ParityIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMParity  = NewTerminalContext->ParityIndex;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_PARITY;\r
-    IfrOptionList[Index].StringToken  = ParityList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_PARITY_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_PARITY),\r
-    STRING_TOKEN (STR_COM_PARITY),\r
-    IfrOptionList,\r
-    5,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 3);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 3; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->StopBits == StopBitsList[Index].Value) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      NewTerminalContext->StopBitsIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMStopBits  = NewTerminalContext->StopBitsIndex;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_STOP_BITS;\r
-    IfrOptionList[Index].StringToken  = StopBitsList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_STOP_BITS_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_STOP_BITS),\r
-    STRING_TOKEN (STR_COM_STOP_BITS),\r
-    IfrOptionList,\r
-    3,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 4);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 4; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->TerminalType == Index) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      CallbackData->BmmFakeNvData->COMTerminalType = NewTerminalContext->TerminalType;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_TERMI_TYPE;\r
-    IfrOptionList[Index].StringToken  = (STRING_REF) TerminalType[Index];\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_TERMINAL_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_TERMI_TYPE),\r
-    STRING_TOKEN (STR_COM_TERMI_TYPE),\r
-    IfrOptionList,\r
-    4,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  CreateGotoOpCode (\r
-    FORM_MAIN_ID,\r
-    STRING_TOKEN (STR_SAVE_AND_EXIT),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_SAVE_AND_EXIT,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount++;\r
-\r
-  CreateGotoOpCode (\r
-    FORM_MAIN_ID,\r
-    STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_NO_SAVE_AND_EXIT,\r
-    Location\r
-    );\r
-\r
-  UpdateData->DataCount++;\r
-\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->BmmHiiHandle,\r
-                      (EFI_FORM_LABEL) FORM_CON_COM_SETUP_ID,\r
-                      TRUE,\r
-                      UpdateData\r
-                      );\r
-\r
-}\r
-\r
-VOID\r
-UpdatePageBody (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  CleanUpPage (UpdatePageId, CallbackData);\r
-  switch (UpdatePageId) {\r
-  case FORM_CON_IN_ID:\r
-    UpdateConsolePage (UpdatePageId, &ConsoleInpMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_CON_OUT_ID:\r
-    UpdateConsolePage (UpdatePageId, &ConsoleOutMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_CON_ERR_ID:\r
-    UpdateConsolePage (UpdatePageId, &ConsoleErrMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_BOOT_CHG_ID:\r
-    UpdateOrderPage (UpdatePageId, &BootOptionMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_DRV_CHG_ID:\r
-    UpdateOrderPage (UpdatePageId, &DriverOptionMenu, CallbackData);\r
-    break;\r
-\r
-  default:\r
-    break;\r
-  }\r
-}\r
-\r
-VOID *\r
-GetLegacyBootOptionVar (\r
-  IN  UINTN                            DeviceType,\r
-  OUT UINTN                            *OptionIndex,\r
-  OUT UINTN                            *OptionSize\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  VOID                      *OptionBuffer;\r
-  UINTN                     OrderSize;\r
-  UINTN                     Index;\r
-  UINT32                    Attribute;\r
-  UINT16                    *OrderBuffer;\r
-  CHAR16                    StrTemp[100];\r
-  UINT16                    FilePathSize;\r
-  CHAR16                    *Description;\r
-  UINT8                     *Ptr;\r
-  UINT8                     *OptionalData;\r
-\r
-  //\r
-  // Get Boot Option number from the size of BootOrder\r
-  //\r
-  OrderBuffer = BdsLibGetVariableAndSize (\r
-                  L"BootOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  &OrderSize\r
-                  );\r
-\r
-  for (Index = 0; Index < OrderSize / sizeof (UINT16); Index++) {\r
-    UnicodeSPrint (StrTemp, 100, L"Boot%04x", OrderBuffer[Index]);\r
-    OptionBuffer = BdsLibGetVariableAndSize (\r
-                    StrTemp,\r
-                    &gEfiGlobalVariableGuid,\r
-                    OptionSize\r
-                    );\r
-    if (NULL == OptionBuffer) {\r
-      continue;\r
-    }\r
-\r
-    Ptr       = (UINT8 *) OptionBuffer;\r
-    Attribute = *(UINT32 *) Ptr;\r
-    Ptr += sizeof (UINT32);\r
-\r
-    FilePathSize = *(UINT16 *) Ptr;\r
-    Ptr += sizeof (UINT16);\r
-\r
-    Description = (CHAR16 *) Ptr;\r
-    Ptr += StrSize ((CHAR16 *) Ptr);\r
-\r
-    //\r
-    // Now Ptr point to Device Path\r
-    //\r
-    DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
-    Ptr += FilePathSize;\r
-\r
-    //\r
-    // Now Ptr point to Optional Data\r
-    //\r
-    OptionalData = Ptr;\r
-\r
-    if ((DeviceType == ((BBS_TABLE *) OptionalData)->DeviceType) &&\r
-        (BBS_DEVICE_PATH == DevicePath->Type) &&\r
-        (BBS_BBS_DP == DevicePath->SubType)\r
-        ) {\r
-      *OptionIndex = OrderBuffer[Index];\r
-      SafeFreePool (OrderBuffer);\r
-      return OptionBuffer;\r
-    } else {\r
-      SafeFreePool (OptionBuffer);\r
-    }\r
-  }\r
-\r
-  SafeFreePool (OrderBuffer);\r
-  return NULL;\r
-}\r
-\r
-VOID\r
-UpdateSetLegacyDeviceOrderPage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;\r
-  BM_MENU_OPTION              *OptionMenu;\r
-  BM_MENU_ENTRY               *NewMenuEntry;\r
-  IFR_OPTION                  *IfrOptionList;\r
-  STRING_REF                  StrRef;\r
-  STRING_REF                  StrRefHelp;\r
-  BBS_TYPE                    BbsType;\r
-  UINTN                       VarSize;\r
-  UINTN                       Pos;\r
-  UINTN                       Bit;\r
-  UINT16                      Index;\r
-  UINT16                      Index2;\r
-  UINT16                      Key;\r
-  CHAR16                      String[100];\r
-  CHAR16                      *TypeStr;\r
-  CHAR16                      *TypeStrHelp;\r
-  UINT16                      VarDevOrder;\r
-  UINT8                       *Location;\r
-  UINT8                       *VarData;\r
-  UINT8                       *OriginalPtr;\r
-  UINT8                       *LegacyOrder;\r
-  UINT8                       *OldData;\r
-  UINT8                       *DisMap;\r
-\r
-  OptionMenu                    = NULL;\r
-  Key = 0;\r
-  StrRef = 0;\r
-  StrRefHelp = 0;\r
-  TypeStr = NULL;\r
-  TypeStrHelp = NULL;\r
-  BbsType = BBS_FLOPPY;\r
-  LegacyOrder = NULL;\r
-  OldData = NULL;\r
-  DisMap = NULL;\r
-\r
-  Location = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  DisMap = CallbackData->BmmOldFakeNVData.DisableMap;\r
-\r
-  SetMem (DisMap, 32, 0);\r
-  //\r
-  // Create oneof option list\r
-  //\r
-  switch (UpdatePageId) {\r
-  case FORM_SET_FD_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyFDMenu;\r
-    Key         = LEGACY_FD_QUESTION_ID;\r
-    TypeStr     = StrFloppy;\r
-    TypeStrHelp = StrFloppyHelp;\r
-    BbsType     = BBS_FLOPPY;\r
-    LegacyOrder = CallbackData->BmmFakeNvData->LegacyFD;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyFD;\r
-    break;\r
-\r
-  case FORM_SET_HD_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyHDMenu;\r
-    Key         = LEGACY_HD_QUESTION_ID;\r
-    TypeStr     = StrHardDisk;\r
-    TypeStrHelp = StrHardDiskHelp;\r
-    BbsType     = BBS_HARDDISK;\r
-    LegacyOrder = CallbackData->BmmFakeNvData->LegacyHD;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyHD;\r
-    break;\r
-\r
-  case FORM_SET_CD_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyCDMenu;\r
-    Key         = LEGACY_CD_QUESTION_ID;\r
-    TypeStr     = StrCDROM;\r
-    TypeStrHelp = StrCDROMHelp;\r
-    BbsType     = BBS_CDROM;\r
-    LegacyOrder = CallbackData->BmmFakeNvData->LegacyCD;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyCD;\r
-    break;\r
-\r
-  case FORM_SET_NET_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyNETMenu;\r
-    Key         = LEGACY_NET_QUESTION_ID;\r
-    TypeStr     = StrNET;\r
-    TypeStrHelp = StrNETHelp;\r
-    BbsType     = BBS_EMBED_NETWORK;\r
-    LegacyOrder = CallbackData->BmmFakeNvData->LegacyNET;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyNET;\r
-    break;\r
-\r
-  case FORM_SET_BEV_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyBEVMenu;\r
-    Key         = LEGACY_BEV_QUESTION_ID;\r
-    TypeStr     = StrBEV;\r
-    TypeStrHelp = StrBEVHelp;\r
-    BbsType     = BBS_BEV_DEVICE;\r
-    LegacyOrder = CallbackData->BmmFakeNvData->LegacyBEV;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyBEV;\r
-    break;\r
-\r
-  }\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * (OptionMenu->MenuNumber + 1));\r
-  if (NULL == IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-    NewMenuEntry                = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    IfrOptionList[Index].Flags  = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (0 == Index) {\r
-      IfrOptionList[Index].Flags |= EFI_IFR_FLAG_DEFAULT;\r
-    }\r
-\r
-    IfrOptionList[Index].Key          = Key;\r
-    IfrOptionList[Index].StringToken  = NewMenuEntry->DisplayStringToken;\r
-    IfrOptionList[Index].Value        = (UINT16) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index;\r
-    IfrOptionList[Index].OptionString = NULL;\r
-  }\r
-  //\r
-  // for item "Disabled"\r
-  //\r
-  IfrOptionList[Index].Flags        = EFI_IFR_FLAG_INTERACTIVE;\r
-  IfrOptionList[Index].Key          = Key;\r
-  IfrOptionList[Index].StringToken  = STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE);\r
-  IfrOptionList[Index].Value        = 0xFF;\r
-  IfrOptionList[Index].OptionString = NULL;\r
-\r
-  //\r
-  // Get Device Order from variable\r
-  //\r
-  VarData = BdsLibGetVariableAndSize (\r
-              VarLegacyDevOrder,\r
-              &EfiLegacyDevOrderGuid,\r
-              &VarSize\r
-              );\r
-\r
-  if (NULL != VarData) {\r
-    OriginalPtr = VarData;\r
-    DevOrder    = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
-    while (VarData < VarData + VarSize) {\r
-      if (DevOrder->BbsType == BbsType) {\r
-        break;\r
-      }\r
-\r
-      VarData += sizeof (BBS_TYPE);\r
-      VarData += *(UINT16 *) VarData;\r
-      DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
-    }\r
-    //\r
-    // Create oneof tag here for FD/HD/CD #1 #2\r
-    //\r
-    for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-      for (Index2 = 0; Index2 <= OptionMenu->MenuNumber; Index2++) {\r
-        IfrOptionList[Index2].Key = (UINT16) (Key + Index);\r
-      }\r
-      //\r
-      // Create the string for oneof tag\r
-      //\r
-      UnicodeSPrint (String, sizeof (String), TypeStr, Index);\r
-      StrRef = 0;\r
-      CallbackData->Hii->NewString (\r
-                          CallbackData->Hii,\r
-                          NULL,\r
-                          CallbackData->BmmHiiHandle,\r
-                          &StrRef,\r
-                          String\r
-                          );\r
-\r
-      UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);\r
-      StrRefHelp = 0;\r
-      CallbackData->Hii->NewString (\r
-                          CallbackData->Hii,\r
-                          NULL,\r
-                          CallbackData->BmmHiiHandle,\r
-                          &StrRefHelp,\r
-                          String\r
-                          );\r
-\r
-      CreateOneOfOpCode (\r
-        (UINT16) (Key + Index),\r
-        (UINT8) 1,\r
-        StrRef,\r
-        StrRefHelp,\r
-        IfrOptionList,\r
-        OptionMenu->MenuNumber + 1,\r
-        Location\r
-        );\r
-\r
-      VarDevOrder = *(UINT16 *) ((UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index * sizeof (UINT16));\r
-\r
-      if (0xFF00 == (VarDevOrder & 0xFF00)) {\r
-        LegacyOrder[Index]  = 0xFF;\r
-        Pos                 = (VarDevOrder & 0xFF) / 8;\r
-        Bit                 = 7 - ((VarDevOrder & 0xFF) % 8);\r
-        DisMap[Pos] |= (UINT8) (1 << Bit);\r
-      } else {\r
-        LegacyOrder[Index] = (UINT8) (VarDevOrder & 0xFF);\r
-      }\r
-\r
-      Location              = Location + (OptionMenu->MenuNumber + 2) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      UpdateData->DataCount = (UINT16) (UpdateData->DataCount + (OptionMenu->MenuNumber + 3));\r
-    }\r
-  }\r
-\r
-  CopyMem (\r
-    OldData,\r
-    LegacyOrder,\r
-    100\r
-    );\r
-\r
-  if (IfrOptionList != NULL) {\r
-    SafeFreePool (IfrOptionList);\r
-    IfrOptionList = NULL;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdatePageId (\r
-  BMM_CALLBACK_DATA              *Private,\r
-  UINT16                         NewPageId\r
-  )\r
-{\r
-  UINT16  FileOptionMask;\r
-\r
-  FileOptionMask = (UINT16) (FILE_OPTION_MASK & NewPageId);\r
-\r
-  if ((NewPageId < FILE_OPTION_OFFSET) && (NewPageId >= HANDLE_OPTION_OFFSET)) {\r
-    //\r
-    // If we select a handle to add driver option, advance to the add handle description page.\r
-    //\r
-    NewPageId = FORM_DRV_ADD_HANDLE_DESC_ID;\r
-  } else if ((NewPageId == KEY_VALUE_SAVE_AND_EXIT) || (NewPageId == KEY_VALUE_NO_SAVE_AND_EXIT)) {\r
-    //\r
-    // Return to main page after "Save Changes" or "Discard Changes".\r
-    //\r
-    NewPageId = FORM_MAIN_ID;\r
-  }\r
-\r
-  if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {\r
-    Private->BmmPreviousPageId  = Private->BmmCurrentPageId;\r
-    Private->BmmCurrentPageId   = NewPageId;\r
-  }\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Variable.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/Variable.c
deleted file mode 100644 (file)
index 454d192..0000000
+++ /dev/null
@@ -1,1280 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Variable.c\r
-\r
-Abstract:\r
-\r
-  Variable operation that will be used by BootMaint\r
-\r
---*/\r
-\r
-#include "Generic/Bds.h"\r
-#include "BootMaint.h"\r
-#include "BdsPlatform.h"\r
-\r
-EFI_STATUS\r
-Var_DelBootOption (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Delete Boot Option that represent a Deleted state in BootOptionMenu.\r
-  After deleting this boot option, call Var_ChangeBootOrder to\r
-  make sure BootOrder is in valid state.\r
-  \r
-Arguments:\r
-  LoadOption -- Pointer to the boot option that to be deleted\r
-\r
-Returns:\r
-  EFI_SUCCESS\r
-  Others\r
-  \r
---*/\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-\r
-  UINT16          BootString[10];\r
-  EFI_STATUS      Status;\r
-  UINTN           Index;\r
-  UINTN           Index2;\r
-\r
-  Status  = EFI_SUCCESS;\r
-  Index2  = 0;\r
-  for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, (Index - Index2));\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (!NewLoadContext->Deleted) {\r
-      continue;\r
-    }\r
-\r
-    UnicodeSPrint (\r
-      BootString,\r
-      sizeof (BootString),\r
-      L"Boot%04x",\r
-      NewMenuEntry->OptionNumber\r
-      );\r
-\r
-    EfiLibDeleteVariable (BootString, &gEfiGlobalVariableGuid);\r
-    Index2++;\r
-    //\r
-    // If current Load Option is the same as BootNext,\r
-    // must delete BootNext in order to make sure\r
-    // there will be no panic on next boot\r
-    //\r
-    if (NewLoadContext->IsBootNext) {\r
-      EfiLibDeleteVariable (L"BootNext", &gEfiGlobalVariableGuid);\r
-    }\r
-\r
-    RemoveEntryList (&NewMenuEntry->Link);\r
-    BOpt_DestroyMenuEntry (NewMenuEntry);\r
-    NewMenuEntry = NULL;\r
-  }\r
-\r
-  BootOptionMenu.MenuNumber -= Index2;\r
-\r
-  Status = Var_ChangeBootOrder ();\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-Var_ChangeBootOrder (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  After any operation on Boot####, there will be a discrepancy in BootOrder.\r
-  Since some are missing but in BootOrder, while some are present but are \r
-  not reflected by BootOrder. Then a function rebuild BootOrder from \r
-  scratch by content from BootOptionMenu is needed.\r
-  \r
-Arguments:\r
-\r
-Returns:\r
-  EFI_SUCCESS\r
-  Others\r
-  \r
---*/\r
-{\r
-\r
-  EFI_STATUS    Status;\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        *BootOrderList;\r
-  UINT16        *BootOrderListPtr;\r
-  UINTN         BootOrderListSize;\r
-  UINTN         Index;\r
-\r
-  BootOrderList     = NULL;\r
-  BootOrderListSize = 0;\r
-\r
-  //\r
-  // First check whether BootOrder is present in current configuration\r
-  //\r
-  BootOrderList = BdsLibGetVariableAndSize (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    &BootOrderListSize\r
-                    );\r
-\r
-  //\r
-  // If exists, delete it to hold new BootOrder\r
-  //\r
-  if (BootOrderList) {\r
-    EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);\r
-    SafeFreePool (BootOrderList);\r
-    BootOrderList = NULL;\r
-  }\r
-  //\r
-  // Maybe here should be some check method to ensure that\r
-  // no new added boot options will be added\r
-  // but the setup engine now will give only one callback\r
-  // that is to say, user are granted only one chance to\r
-  // decide whether the boot option will be added or not\r
-  // there should be no indictor to show whether this\r
-  // is a "new" boot option\r
-  //\r
-  BootOrderListSize = BootOptionMenu.MenuNumber;\r
-\r
-  if (BootOrderListSize > 0) {\r
-    BootOrderList = AllocateZeroPool (BootOrderListSize * sizeof (UINT16));\r
-    ASSERT (BootOrderList != NULL);\r
-    BootOrderListPtr = BootOrderList;\r
-\r
-    //\r
-    // Get all current used Boot#### from BootOptionMenu.\r
-    // OptionNumber in each BM_LOAD_OPTION is really its\r
-    // #### value.\r
-    //\r
-    for (Index = 0; Index < BootOrderListSize; Index++) {\r
-      NewMenuEntry    = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
-      *BootOrderList  = (UINT16) NewMenuEntry->OptionNumber;\r
-      BootOrderList++;\r
-    }\r
-\r
-    BootOrderList = BootOrderListPtr;\r
-\r
-    //\r
-    // After building the BootOrderList, write it back\r
-    //\r
-    Status = gRT->SetVariable (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    BootOrderListSize * sizeof (UINT16),\r
-                    BootOrderList\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-Var_DelDriverOption (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Delete Load Option that represent a Deleted state in BootOptionMenu.\r
-  After deleting this Driver option, call Var_ChangeDriverOrder to\r
-  make sure DriverOrder is in valid state.\r
-  \r
-Arguments:\r
-  LoadOption -- Pointer to the Driver option that to be deleted\r
-\r
-Returns:\r
-  EFI_SUCCESS\r
-  Others\r
-  \r
---*/\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-\r
-  UINT16          DriverString[12];\r
-  EFI_STATUS      Status;\r
-  UINTN           Index;\r
-  UINTN           Index2;\r
-\r
-  Status  = EFI_SUCCESS;\r
-  Index2  = 0;\r
-  for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, (Index - Index2));\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (!NewLoadContext->Deleted) {\r
-      continue;\r
-    }\r
-\r
-    UnicodeSPrint (\r
-      DriverString,\r
-      sizeof (DriverString),\r
-      L"Driver%04x",\r
-      NewMenuEntry->OptionNumber\r
-      );\r
-\r
-    EfiLibDeleteVariable (DriverString, &gEfiGlobalVariableGuid);\r
-    Index2++;\r
-\r
-    RemoveEntryList (&NewMenuEntry->Link);\r
-    BOpt_DestroyMenuEntry (NewMenuEntry);\r
-    NewMenuEntry = NULL;\r
-  }\r
-\r
-  DriverOptionMenu.MenuNumber -= Index2;\r
-\r
-  Status = Var_ChangeDriverOrder ();\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-Var_ChangeDriverOrder (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  After any operation on Driver####, there will be a discrepancy in \r
-  DriverOrder. Since some are missing but in DriverOrder, while some \r
-  are present but are not reflected by DriverOrder. Then a function \r
-  rebuild DriverOrder from scratch by content from DriverOptionMenu is \r
-  needed.\r
-  \r
-Arguments:\r
-\r
-Returns:\r
-  EFI_SUCCESS\r
-  Others\r
-  \r
---*/\r
-{\r
-  EFI_STATUS    Status;\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        *DriverOrderList;\r
-  UINT16        *DriverOrderListPtr;\r
-  UINTN         DriverOrderListSize;\r
-  UINTN         Index;\r
-\r
-  DriverOrderList     = NULL;\r
-  DriverOrderListSize = 0;\r
-\r
-  //\r
-  // First check whether DriverOrder is present in current configuration\r
-  //\r
-  DriverOrderList = BdsLibGetVariableAndSize (\r
-                      L"DriverOrder",\r
-                      &gEfiGlobalVariableGuid,\r
-                      &DriverOrderListSize\r
-                      );\r
-\r
-  //\r
-  // If exists, delete it to hold new DriverOrder\r
-  //\r
-  if (DriverOrderList) {\r
-    EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);\r
-    SafeFreePool (DriverOrderList);\r
-    DriverOrderList = NULL;\r
-  }\r
-\r
-  DriverOrderListSize = DriverOptionMenu.MenuNumber;\r
-\r
-  if (DriverOrderListSize > 0) {\r
-    DriverOrderList = AllocateZeroPool (DriverOrderListSize * sizeof (UINT16));\r
-    ASSERT (DriverOrderList != NULL);\r
-    DriverOrderListPtr = DriverOrderList;\r
-\r
-    //\r
-    // Get all current used Driver#### from DriverOptionMenu.\r
-    // OptionNumber in each BM_LOAD_OPTION is really its\r
-    // #### value.\r
-    //\r
-    for (Index = 0; Index < DriverOrderListSize; Index++) {\r
-      NewMenuEntry      = BOpt_GetMenuEntry (&DriverOptionMenu, Index);\r
-      *DriverOrderList  = (UINT16) NewMenuEntry->OptionNumber;\r
-      DriverOrderList++;\r
-    }\r
-\r
-    DriverOrderList = DriverOrderListPtr;\r
-\r
-    //\r
-    // After building the DriverOrderList, write it back\r
-    //\r
-    Status = gRT->SetVariable (\r
-                    L"DriverOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    DriverOrderListSize * sizeof (UINT16),\r
-                    DriverOrderList\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-Var_UpdateAllConsoleOption (\r
-  VOID\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *OutDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *InpDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *ErrDevicePath;\r
-  EFI_STATUS                Status;\r
-\r
-  OutDevicePath = EfiLibGetVariable (L"ConOut", &gEfiGlobalVariableGuid);\r
-  InpDevicePath = EfiLibGetVariable (L"ConIn", &gEfiGlobalVariableGuid);\r
-  ErrDevicePath = EfiLibGetVariable (L"ErrOut", &gEfiGlobalVariableGuid);\r
-  if (OutDevicePath) {\r
-    ChangeVariableDevicePath (OutDevicePath);\r
-    Status = gRT->SetVariable (\r
-                    L"ConOut",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    GetDevicePathSize (OutDevicePath),\r
-                    OutDevicePath\r
-                    );\r
-    ASSERT (!EFI_ERROR (Status));\r
-  }\r
-\r
-  if (InpDevicePath) {\r
-    ChangeVariableDevicePath (InpDevicePath);\r
-    Status = gRT->SetVariable (\r
-                    L"ConIn",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    GetDevicePathSize (InpDevicePath),\r
-                    InpDevicePath\r
-                    );\r
-    ASSERT (!EFI_ERROR (Status));\r
-  }\r
-\r
-  if (ErrDevicePath) {\r
-    ChangeVariableDevicePath (ErrDevicePath);\r
-    Status = gRT->SetVariable (\r
-                    L"ErrOut",\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    GetDevicePathSize (ErrDevicePath),\r
-                    ErrDevicePath\r
-                    );\r
-    ASSERT (!EFI_ERROR (Status));\r
-  }\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateConsoleOption (\r
-  IN UINT16                     *ConsoleName,\r
-  IN BM_MENU_OPTION             *ConsoleMenu,\r
-  IN UINT16                     UpdatePageId\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *ConDevicePath;\r
-  BM_MENU_ENTRY             *NewMenuEntry;\r
-  BM_CONSOLE_CONTEXT        *NewConsoleContext;\r
-  BM_TERMINAL_CONTEXT       *NewTerminalContext;\r
-  EFI_STATUS                Status;\r
-  VENDOR_DEVICE_PATH        Vendor;\r
-  EFI_DEVICE_PATH_PROTOCOL  *TerminalDevicePath;\r
-  UINTN                     Index;\r
-  UINT16                    *Temp;\r
-\r
-  ConDevicePath = EfiLibGetVariable (ConsoleName, &gEfiGlobalVariableGuid);\r
-  if (ConDevicePath != NULL) {\r
-    EfiLibDeleteVariable (ConsoleName, &gEfiGlobalVariableGuid);\r
-    SafeFreePool (ConDevicePath);\r
-    ConDevicePath = NULL;\r
-  };\r
-\r
-  //\r
-  // First add all console input device to it from console input menu\r
-  //\r
-  for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (NewConsoleContext->IsActive) {\r
-      ConDevicePath = AppendDevicePathInstance (\r
-                        ConDevicePath,\r
-                        NewConsoleContext->DevicePath\r
-                        );\r
-    }\r
-  }\r
-\r
-  for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if ((NewTerminalContext->IsConIn && (UpdatePageId == FORM_CON_IN_ID)) ||\r
-        (NewTerminalContext->IsConOut && (UpdatePageId == FORM_CON_OUT_ID)) ||\r
-        (NewTerminalContext->IsStdErr && (UpdatePageId == FORM_CON_ERR_ID))\r
-        ) {\r
-      Vendor.Header.Type    = MESSAGING_DEVICE_PATH;\r
-      Vendor.Header.SubType = MSG_VENDOR_DP;\r
-      CopyMem (\r
-        &Vendor.Guid,\r
-        &Guid[NewTerminalContext->TerminalType],\r
-        sizeof (EFI_GUID)\r
-        );\r
-      SetDevicePathNodeLength (&Vendor.Header, sizeof (VENDOR_DEVICE_PATH));\r
-      TerminalDevicePath = AppendDevicePathNode (\r
-                            NewTerminalContext->DevicePath,\r
-                            (EFI_DEVICE_PATH_PROTOCOL *) &Vendor\r
-                            );\r
-      ASSERT (TerminalDevicePath != NULL);\r
-      ChangeTerminalDevicePath (TerminalDevicePath, TRUE);\r
-      Temp = DevicePathToStr (TerminalDevicePath);\r
-      ConDevicePath = AppendDevicePathInstance (\r
-                        ConDevicePath,\r
-                        TerminalDevicePath\r
-                        );\r
-    }\r
-  }\r
-\r
-  if (ConDevicePath) {\r
-    Status = gRT->SetVariable (\r
-                    ConsoleName,\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    GetDevicePathSize (ConDevicePath),\r
-                    ConDevicePath\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateConsoleInpOption (\r
-  VOID\r
-  )\r
-{\r
-  return Var_UpdateConsoleOption (L"ConIn", &ConsoleInpMenu, FORM_CON_IN_ID);\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateConsoleOutOption (\r
-  VOID\r
-  )\r
-{\r
-  return Var_UpdateConsoleOption (L"ConOut", &ConsoleOutMenu, FORM_CON_OUT_ID);\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateErrorOutOption (\r
-  VOID\r
-  )\r
-{\r
-  return Var_UpdateConsoleOption (L"ErrOut", &ConsoleErrMenu, FORM_CON_ERR_ID);\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateDriverOption (\r
-  IN  BMM_CALLBACK_DATA         *CallbackData,\r
-  IN  EFI_HII_HANDLE            HiiHandle,\r
-  IN  UINT16                    *DescriptionData,\r
-  IN  UINT16                    *OptionalData,\r
-  IN  UINT8                     ForceReconnect\r
-  )\r
-{\r
-  UINT16          Index;\r
-  UINT16          *DriverOrderList;\r
-  UINT16          *NewDriverOrderList;\r
-  UINT16          DriverString[12];\r
-  UINTN           DriverOrderListSize;\r
-  VOID            *Buffer;\r
-  UINTN           BufferSize;\r
-  UINT8           *Ptr;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  BOOLEAN         OptionalDataExist;\r
-  EFI_STATUS      Status;\r
-\r
-  OptionalDataExist = FALSE;\r
-\r
-  Index             = BOpt_GetDriverOptionNumber ();\r
-  UnicodeSPrint (\r
-    DriverString,\r
-    sizeof (DriverString),\r
-    L"Driver%04x",\r
-    Index\r
-    );\r
-\r
-  if (*DescriptionData == 0x0000) {\r
-    StrCpy (DescriptionData, DriverString);\r
-  }\r
-\r
-  BufferSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (DescriptionData) + GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
-\r
-  if (*OptionalData != 0x0000) {\r
-    OptionalDataExist = TRUE;\r
-    BufferSize += StrSize (OptionalData);\r
-  }\r
-\r
-  Buffer = AllocateZeroPool (BufferSize);\r
-  if (NULL == Buffer) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);\r
-  if (NULL == NewMenuEntry) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  NewLoadContext                  = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-  NewLoadContext->Deleted         = FALSE;\r
-  NewLoadContext->LoadOptionSize  = BufferSize;\r
-  Ptr = (UINT8 *) Buffer;\r
-  NewLoadContext->LoadOption = Ptr;\r
-  *((UINT32 *) Ptr) = LOAD_OPTION_ACTIVE | (ForceReconnect << 1);\r
-  NewLoadContext->Attributes = *((UINT32 *) Ptr);\r
-  NewLoadContext->IsActive = TRUE;\r
-  NewLoadContext->ForceReconnect = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_FORCE_RECONNECT);\r
-\r
-  Ptr += sizeof (UINT32);\r
-  *((UINT16 *) Ptr) = (UINT16) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
-  NewLoadContext->FilePathListLength = *((UINT16 *) Ptr);\r
-\r
-  Ptr += sizeof (UINT16);\r
-  CopyMem (\r
-    Ptr,\r
-    DescriptionData,\r
-    StrSize (DescriptionData)\r
-    );\r
-\r
-  NewLoadContext->Description = AllocateZeroPool (StrSize (DescriptionData));\r
-  ASSERT (NewLoadContext->Description != NULL);\r
-  NewMenuEntry->DisplayString = NewLoadContext->Description;\r
-  CopyMem (\r
-    NewLoadContext->Description,\r
-    (VOID *) Ptr,\r
-    StrSize (DescriptionData)\r
-    );\r
-\r
-  Ptr += StrSize (DescriptionData);\r
-  CopyMem (\r
-    Ptr,\r
-    CallbackData->LoadContext->FilePathList,\r
-    GetDevicePathSize (CallbackData->LoadContext->FilePathList)\r
-    );\r
-\r
-  NewLoadContext->FilePathList = AllocateZeroPool (GetDevicePathSize (CallbackData->LoadContext->FilePathList));\r
-  ASSERT (NewLoadContext->FilePathList != NULL);\r
-\r
-  CopyMem (\r
-    NewLoadContext->FilePathList,\r
-    (VOID *) Ptr,\r
-    GetDevicePathSize (CallbackData->LoadContext->FilePathList)\r
-    );\r
-\r
-  NewMenuEntry->HelpString    = DevicePathToStr (NewLoadContext->FilePathList);\r
-  NewMenuEntry->OptionNumber  = Index;\r
-  NewMenuEntry->DisplayStringToken = GetStringTokenFromDepository (\r
-                                      CallbackData,\r
-                                      DriverOptionStrDepository\r
-                                      );\r
-  CallbackData->Hii->NewString (\r
-                      CallbackData->Hii,\r
-                      NULL,\r
-                      HiiHandle,\r
-                      &NewMenuEntry->DisplayStringToken,\r
-                      NewMenuEntry->DisplayString\r
-                      );\r
-\r
-  NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
-                                    CallbackData,\r
-                                    DriverOptionHelpStrDepository\r
-                                    );\r
-  CallbackData->Hii->NewString (\r
-                      CallbackData->Hii,\r
-                      NULL,\r
-                      HiiHandle,\r
-                      &NewMenuEntry->HelpStringToken,\r
-                      NewMenuEntry->HelpString\r
-                      );\r
-\r
-  if (OptionalDataExist) {\r
-    Ptr += (UINT8) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
-\r
-    CopyMem (\r
-      Ptr,\r
-      OptionalData,\r
-      StrSize (OptionalData)\r
-      );\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  DriverString,\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  BufferSize,\r
-                  Buffer\r
-                  );\r
-  DriverOrderList = BdsLibGetVariableAndSize (\r
-                      L"DriverOrder",\r
-                      &gEfiGlobalVariableGuid,\r
-                      &DriverOrderListSize\r
-                      );\r
-  NewDriverOrderList = AllocateZeroPool (DriverOrderListSize + sizeof (UINT16));\r
-  ASSERT (NewDriverOrderList != NULL);\r
-  CopyMem (NewDriverOrderList, DriverOrderList, DriverOrderListSize);\r
-  NewDriverOrderList[DriverOrderListSize / sizeof (UINT16)] = Index;\r
-  if (DriverOrderList != NULL) {\r
-    EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  L"DriverOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  DriverOrderListSize + sizeof (UINT16),\r
-                  NewDriverOrderList\r
-                  );\r
-  SafeFreePool (DriverOrderList);\r
-  DriverOrderList = NULL;\r
-  SafeFreePool (NewDriverOrderList);\r
-  NewDriverOrderList = NULL;\r
-  InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);\r
-  DriverOptionMenu.MenuNumber++;\r
-\r
-  *DescriptionData  = 0x0000;\r
-  *OptionalData     = 0x0000;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateBootOption (\r
-  IN  BMM_CALLBACK_DATA                   *CallbackData,\r
-  IN  FILE_EXPLORER_NV_DATA               *NvRamMap\r
-  )\r
-{\r
-  UINT16          *BootOrderList;\r
-  UINT16          *NewBootOrderList;\r
-  UINTN           BootOrderListSize;\r
-  UINT16          BootString[10];\r
-  VOID            *Buffer;\r
-  UINTN           BufferSize;\r
-  UINT8           *Ptr;\r
-  UINT16          Index;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  BOOLEAN         OptionalDataExist;\r
-  EFI_STATUS      Status;\r
-\r
-  OptionalDataExist = FALSE;\r
-\r
-  Index             = BOpt_GetBootOptionNumber ();\r
-  UnicodeSPrint (BootString, sizeof (BootString), L"Boot%04x", Index);\r
-\r
-  if (NvRamMap->DescriptionData[0] == 0x0000) {\r
-    StrCpy (NvRamMap->DescriptionData, BootString);\r
-  }\r
-\r
-  BufferSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (NvRamMap->DescriptionData) + GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
-\r
-  if (NvRamMap->OptionalData[0] != 0x0000) {\r
-    OptionalDataExist = TRUE;\r
-    BufferSize += StrSize (NvRamMap->OptionalData);\r
-  }\r
-\r
-  Buffer = AllocateZeroPool (BufferSize);\r
-  if (NULL == Buffer) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);\r
-  if (NULL == NewMenuEntry) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  NewLoadContext                  = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-  NewLoadContext->Deleted         = FALSE;\r
-  NewLoadContext->LoadOptionSize  = BufferSize;\r
-  Ptr = (UINT8 *) Buffer;\r
-  NewLoadContext->LoadOption = Ptr;\r
-  *((UINT32 *) Ptr) = LOAD_OPTION_ACTIVE;\r
-  NewLoadContext->Attributes = *((UINT32 *) Ptr);\r
-  NewLoadContext->IsActive = TRUE;\r
-  NewLoadContext->ForceReconnect = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_FORCE_RECONNECT);\r
-\r
-  Ptr += sizeof (UINT32);\r
-  *((UINT16 *) Ptr) = (UINT16) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
-  NewLoadContext->FilePathListLength = *((UINT16 *) Ptr);\r
-  Ptr += sizeof (UINT16);\r
-\r
-  CopyMem (\r
-    Ptr,\r
-    NvRamMap->DescriptionData,\r
-    StrSize (NvRamMap->DescriptionData)\r
-    );\r
-\r
-  NewLoadContext->Description = AllocateZeroPool (StrSize (NvRamMap->DescriptionData));\r
-  ASSERT (NewLoadContext->Description != NULL);\r
-\r
-  NewMenuEntry->DisplayString = NewLoadContext->Description;\r
-  CopyMem (\r
-    NewLoadContext->Description,\r
-    (VOID *) Ptr,\r
-    StrSize (NvRamMap->DescriptionData)\r
-    );\r
-\r
-  Ptr += StrSize (NvRamMap->DescriptionData);\r
-  CopyMem (\r
-    Ptr,\r
-    CallbackData->LoadContext->FilePathList,\r
-    GetDevicePathSize (CallbackData->LoadContext->FilePathList)\r
-    );\r
-\r
-  NewLoadContext->FilePathList = AllocateZeroPool (GetDevicePathSize (CallbackData->LoadContext->FilePathList));\r
-  ASSERT (NewLoadContext->FilePathList != NULL);\r
-\r
-  CopyMem (\r
-    NewLoadContext->FilePathList,\r
-    (VOID *) Ptr,\r
-    GetDevicePathSize (CallbackData->LoadContext->FilePathList)\r
-    );\r
-\r
-  NewMenuEntry->HelpString    = DevicePathToStr (NewLoadContext->FilePathList);\r
-  NewMenuEntry->OptionNumber  = Index;\r
-  NewMenuEntry->DisplayStringToken = GetStringTokenFromDepository (\r
-                                      CallbackData,\r
-                                      BootOptionStrDepository\r
-                                      );\r
-  CallbackData->Hii->NewString (\r
-                      CallbackData->Hii,\r
-                      NULL,\r
-                      CallbackData->FeHiiHandle,\r
-                      &NewMenuEntry->DisplayStringToken,\r
-                      NewMenuEntry->DisplayString\r
-                      );\r
-\r
-  NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
-                                    CallbackData,\r
-                                    BootOptionHelpStrDepository\r
-                                    );\r
-\r
-  CallbackData->Hii->NewString (\r
-                      CallbackData->Hii,\r
-                      NULL,\r
-                      CallbackData->FeHiiHandle,\r
-                      &NewMenuEntry->HelpStringToken,\r
-                      NewMenuEntry->HelpString\r
-                      );\r
-\r
-  if (OptionalDataExist) {\r
-    Ptr += (UINT8) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
-\r
-    CopyMem (Ptr, NvRamMap->OptionalData, StrSize (NvRamMap->OptionalData));\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  BootString,\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  BufferSize,\r
-                  Buffer\r
-                  );\r
-\r
-  BootOrderList = BdsLibGetVariableAndSize (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    &BootOrderListSize\r
-                    );\r
-\r
-  NewBootOrderList = AllocateZeroPool (BootOrderListSize + sizeof (UINT16));\r
-  ASSERT (NewBootOrderList != NULL);\r
-  CopyMem (NewBootOrderList, BootOrderList, BootOrderListSize);\r
-  NewBootOrderList[BootOrderListSize / sizeof (UINT16)] = Index;\r
-\r
-  if (BootOrderList != NULL) {\r
-    EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  L"BootOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  BootOrderListSize + sizeof (UINT16),\r
-                  NewBootOrderList\r
-                  );\r
-\r
-  SafeFreePool (BootOrderList);\r
-  BootOrderList = NULL;\r
-  SafeFreePool (NewBootOrderList);\r
-  NewBootOrderList = NULL;\r
-  InsertTailList (&BootOptionMenu.Head, &NewMenuEntry->Link);\r
-  BootOptionMenu.MenuNumber++;\r
-\r
-  NvRamMap->DescriptionData[0]  = 0x0000;\r
-  NvRamMap->OptionalData[0]     = 0x0000;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateBootNext (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY     *NewMenuEntry;\r
-  BM_LOAD_CONTEXT   *NewLoadContext;\r
-  BMM_FAKE_NV_DATA  *CurrentFakeNVMap;\r
-  UINT16            Index;\r
-  EFI_STATUS        Status;\r
-\r
-  Status            = EFI_SUCCESS;\r
-  CurrentFakeNVMap  = CallbackData->BmmFakeNvData;\r
-  for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
-    if (NULL == NewMenuEntry) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    NewLoadContext              = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    NewLoadContext->IsBootNext  = FALSE;\r
-  }\r
-\r
-  if (CurrentFakeNVMap->BootNext == BootOptionMenu.MenuNumber) {\r
-    EfiLibDeleteVariable (L"BootNext", &gEfiGlobalVariableGuid);\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  NewMenuEntry = BOpt_GetMenuEntry (\r
-                  &BootOptionMenu,\r
-                  CurrentFakeNVMap->BootNext\r
-                  );\r
-  if (NULL == NewMenuEntry) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-  Status = gRT->SetVariable (\r
-                  L"BootNext",\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  sizeof (UINT16),\r
-                  &NewMenuEntry->OptionNumber\r
-                  );\r
-  NewLoadContext->IsBootNext              = TRUE;\r
-  CallbackData->BmmOldFakeNVData.BootNext = CurrentFakeNVMap->BootNext;\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateBootOrder (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-  UINT16      Index;\r
-  UINT16      *BootOrderList;\r
-  UINT16      *NewBootOrderList;\r
-  UINTN       BootOrderListSize;\r
-  UINT8       *Map;\r
-\r
-  BootOrderList     = NULL;\r
-  BootOrderListSize = 0;\r
-\r
-  //\r
-  // First check whether BootOrder is present in current configuration\r
-  //\r
-  BootOrderList = BdsLibGetVariableAndSize (\r
-                    L"BootOrder",\r
-                    &gEfiGlobalVariableGuid,\r
-                    &BootOrderListSize\r
-                    );\r
-\r
-  NewBootOrderList = AllocateZeroPool (BootOrderListSize);\r
-  if (!NewBootOrderList) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Map = AllocateZeroPool (BootOrderListSize / sizeof (UINT16));\r
-  if (!Map) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  // If exists, delete it to hold new BootOrder\r
-  //\r
-  if (BootOrderList) {\r
-    EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);\r
-  }\r
-\r
-  for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-    NewBootOrderList[Index] = CallbackData->BmmFakeNvData->OptionOrder[Index] - 1;\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  L"BootOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  BootOrderListSize,\r
-                  NewBootOrderList\r
-                  );\r
-  SafeFreePool (BootOrderList);\r
-  SafeFreePool (NewBootOrderList);\r
-  SafeFreePool (Map);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  BOpt_FreeMenu (&BootOptionMenu);\r
-  BOpt_GetBootOptions (CallbackData);\r
-\r
-  return EFI_SUCCESS;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateDriverOrder (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-  UINT16      Index;\r
-  UINT16      *DriverOrderList;\r
-  UINT16      *NewDriverOrderList;\r
-  UINTN       DriverOrderListSize;\r
-\r
-  DriverOrderList     = NULL;\r
-  DriverOrderListSize = 0;\r
-\r
-  //\r
-  // First check whether DriverOrder is present in current configuration\r
-  //\r
-  DriverOrderList = BdsLibGetVariableAndSize (\r
-                      L"DriverOrder",\r
-                      &gEfiGlobalVariableGuid,\r
-                      &DriverOrderListSize\r
-                      );\r
-\r
-  NewDriverOrderList = AllocateZeroPool (DriverOrderListSize);\r
-\r
-  if (!NewDriverOrderList) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  // If exists, delete it to hold new DriverOrder\r
-  //\r
-  if (DriverOrderList) {\r
-    EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);\r
-  }\r
-\r
-  for (Index = 0; Index < DriverOrderListSize; Index++) {\r
-    NewDriverOrderList[Index] = CallbackData->BmmFakeNvData->OptionOrder[Index] - 1;\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  L"DriverOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  VAR_FLAG,\r
-                  DriverOrderListSize,\r
-                  NewDriverOrderList\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  SafeFreePool (DriverOrderList);\r
-\r
-  BOpt_FreeMenu (&DriverOptionMenu);\r
-  BOpt_GetDriverOptions (CallbackData);\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-Var_UpdateBBSOption (\r
-  IN BMM_CALLBACK_DATA            *CallbackData\r
-  )\r
-{\r
-  UINTN                       Index;\r
-  UINTN                       Index2;\r
-  VOID                        *BootOptionVar;\r
-  CHAR16                      VarName[100];\r
-  UINTN                       OptionSize;\r
-  UINT16                      FilePathSize;\r
-  UINT8                       *Ptr;\r
-  EFI_STATUS                  Status;\r
-  CHAR16                      DescString[100];\r
-  UINTN                       NewOptionSize;\r
-  UINT8                       *NewOptionPtr;\r
-  UINT8                       *TempPtr;\r
-  UINT32                      *Attribute;\r
-\r
-  BM_MENU_OPTION              *OptionMenu;\r
-  BM_LEGACY_DEVICE_CONTEXT    *LegacyDeviceContext;\r
-  UINT8                       *LegacyDev;\r
-  UINT8                       *VarData;\r
-  UINTN                       VarSize;\r
-  BM_MENU_ENTRY               *NewMenuEntry;\r
-  BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;\r
-  UINT8                       *OriginalPtr;\r
-  UINT8                       *DisMap;\r
-  UINTN                       Pos;\r
-  UINTN                       Bit;\r
-  UINT16                      *NewOrder;\r
-  UINT16                      Tmp;\r
-\r
-  LegacyDeviceContext = NULL;\r
-  DisMap              = NULL;\r
-  NewOrder            = NULL;\r
-\r
-  if (FORM_SET_FD_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
-    OptionMenu            = (BM_MENU_OPTION *) &LegacyFDMenu;\r
-    LegacyDev             = CallbackData->BmmFakeNvData->LegacyFD;\r
-    CallbackData->BbsType = BBS_FLOPPY;\r
-  } else {\r
-    if (FORM_SET_HD_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
-      OptionMenu            = (BM_MENU_OPTION *) &LegacyHDMenu;\r
-      LegacyDev             = CallbackData->BmmFakeNvData->LegacyHD;\r
-      CallbackData->BbsType = BBS_HARDDISK;\r
-    } else {\r
-      if (FORM_SET_CD_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
-        OptionMenu            = (BM_MENU_OPTION *) &LegacyCDMenu;\r
-        LegacyDev             = CallbackData->BmmFakeNvData->LegacyCD;\r
-        CallbackData->BbsType = BBS_CDROM;\r
-      } else {\r
-        if (FORM_SET_NET_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
-          OptionMenu            = (BM_MENU_OPTION *) &LegacyNETMenu;\r
-          LegacyDev             = CallbackData->BmmFakeNvData->LegacyNET;\r
-          CallbackData->BbsType = BBS_EMBED_NETWORK;\r
-        } else {\r
-          OptionMenu            = (BM_MENU_OPTION *) &LegacyBEVMenu;\r
-          LegacyDev             = CallbackData->BmmFakeNvData->LegacyBEV;\r
-          CallbackData->BbsType = BBS_BEV_DEVICE;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  DisMap  = CallbackData->BmmOldFakeNVData.DisableMap;\r
-  Status  = EFI_SUCCESS;\r
-\r
-  //\r
-  // Find the first device's context\r
-  // If all devices are disabled( 0xFF == LegacyDev[0]), LegacyDeviceContext can be set to any VariableContext\r
-  // because we just use it to fill the desc string, and user can not see the string in UI\r
-  //\r
-  for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-    NewMenuEntry        = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    LegacyDeviceContext = (BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (0xFF != LegacyDev[0] && LegacyDev[0] == LegacyDeviceContext->Index) {\r
-      DEBUG ((EFI_D_ERROR, "DescStr: %s\n", LegacyDeviceContext->Description));\r
-      break;\r
-    }\r
-  }\r
-  //\r
-  // Update the Variable "LegacyDevOrder"\r
-  //\r
-  VarData = (UINT8 *) BdsLibGetVariableAndSize (\r
-                        VarLegacyDevOrder,\r
-                        &EfiLegacyDevOrderGuid,\r
-                        &VarSize\r
-                        );\r
-\r
-  if (NULL == VarData) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  OriginalPtr = VarData;\r
-  DevOrder    = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
-\r
-  while (VarData < VarData + VarSize) {\r
-    if (DevOrder->BbsType == CallbackData->BbsType) {\r
-      break;\r
-    }\r
-\r
-    VarData += sizeof (BBS_TYPE);\r
-    VarData += *(UINT16 *) VarData;\r
-    DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
-  }\r
-\r
-  if (VarData >= VarData + VarSize) {\r
-    SafeFreePool (OriginalPtr);\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  NewOrder = (UINT16 *) AllocateZeroPool (DevOrder->Length - sizeof (UINT16));\r
-  if (NULL == NewOrder) {\r
-    SafeFreePool (VarData);\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-    if (0xFF == LegacyDev[Index]) {\r
-      break;\r
-    }\r
-\r
-    NewOrder[Index] = LegacyDev[Index];\r
-  }\r
-  //\r
-  // Only the enable/disable state of each boot device with same device type can be changed,\r
-  // so we can count on the index information in DevOrder.\r
-  // DisMap bit array is the only reliable source to check a device's en/dis state,\r
-  // so we use DisMap to set en/dis state of each item in NewOrder array\r
-  //\r
-  for (Index2 = 0; Index2 < OptionMenu->MenuNumber; Index2++) {\r
-    Tmp = *(UINT16 *) ((UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index2 * sizeof (UINT16));\r
-    Tmp &= 0xFF;\r
-    Pos = Tmp / 8;\r
-    Bit = 7 - (Tmp % 8);\r
-    if (DisMap[Pos] & (1 << Bit)) {\r
-      NewOrder[Index] = (UINT16) (0xFF00 | Tmp);\r
-      Index++;\r
-    }\r
-  }\r
-\r
-  CopyMem (\r
-    (UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16),\r
-    NewOrder,\r
-    DevOrder->Length - sizeof (UINT16)\r
-    );\r
-  SafeFreePool (NewOrder);\r
-\r
-  Status = gRT->SetVariable (\r
-                  VarLegacyDevOrder,\r
-                  &EfiLegacyDevOrderGuid,\r
-                  VAR_FLAG,\r
-                  VarSize,\r
-                  OriginalPtr\r
-                  );\r
-\r
-  SafeFreePool (OriginalPtr);\r
-\r
-  //\r
-  // Update Optional Data of Boot####\r
-  //\r
-  BootOptionVar = GetLegacyBootOptionVar (CallbackData->BbsType, &Index, &OptionSize);\r
-\r
-  if (NULL != BootOptionVar) {\r
-    CopyMem (\r
-      DescString,\r
-      LegacyDeviceContext->Description,\r
-      StrSize (LegacyDeviceContext->Description)\r
-      );\r
-\r
-    NewOptionSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (DescString) + sizeof (BBS_TABLE) + sizeof (UINT16);\r
-\r
-    UnicodeSPrint (VarName, 100, L"Boot%04x", Index);\r
-\r
-    Ptr       = BootOptionVar;\r
-\r
-    Attribute = (UINT32 *) Ptr;\r
-    *Attribute |= LOAD_OPTION_ACTIVE;\r
-    if (0xFF == LegacyDev[0]) {\r
-      //\r
-      // Disable this legacy boot option\r
-      //\r
-      *Attribute &= ~LOAD_OPTION_ACTIVE;\r
-    }\r
-\r
-    Ptr += sizeof (UINT32);\r
-\r
-    FilePathSize = *(UINT16 *) Ptr;\r
-    Ptr += sizeof (UINT16);\r
-\r
-    NewOptionSize += FilePathSize;\r
-\r
-    NewOptionPtr = AllocateZeroPool (NewOptionSize);\r
-    if (NULL == NewOptionPtr) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    TempPtr = NewOptionPtr;\r
-\r
-    //\r
-    // Copy previous option data to new option except the description string\r
-    //\r
-    CopyMem (\r
-      TempPtr,\r
-      BootOptionVar,\r
-      sizeof (UINT32) + sizeof (UINT16)\r
-      );\r
-\r
-    TempPtr += (sizeof (UINT32) + sizeof (UINT16));\r
-\r
-    CopyMem (\r
-      TempPtr,\r
-      DescString,\r
-      StrSize (DescString)\r
-      );\r
-\r
-    TempPtr += StrSize (DescString);\r
-\r
-    //\r
-    // Description = (CHAR16 *)Ptr;\r
-    //\r
-    Ptr += StrSize ((CHAR16 *) Ptr);\r
-\r
-    CopyMem (\r
-      TempPtr,\r
-      Ptr,\r
-      FilePathSize\r
-      );\r
-\r
-    TempPtr += FilePathSize;\r
-\r
-    //\r
-    // DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)Ptr;\r
-    //\r
-    Ptr += FilePathSize;\r
-\r
-    //\r
-    // Now Ptr point to optional data, i.e. Bbs Table\r
-    //\r
-    CopyMem (\r
-      TempPtr,\r
-      LegacyDeviceContext->BbsTable,\r
-      sizeof (BBS_TABLE)\r
-      );\r
-\r
-    TempPtr += sizeof (BBS_TABLE);\r
-    *((UINT16 *) TempPtr) = (UINT16) LegacyDeviceContext->Index;\r
-\r
-    Status = gRT->SetVariable (\r
-                    VarName,\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    NewOptionSize,\r
-                    NewOptionPtr\r
-                    );\r
-\r
-    SafeFreePool (NewOptionPtr);\r
-    SafeFreePool (BootOptionVar);\r
-  }\r
-\r
-  BOpt_GetBootOptions (CallbackData);\r
-  return Status;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.c
deleted file mode 100644 (file)
index 23b8789..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name: \r
-\r
-  BootManager.c\r
-\r
-Abstract:\r
-\r
-  The platform boot manager reference implement\r
-\r
---*/\r
-#include "BootManager.h"\r
-\r
-UINT16                            mKeyInput;\r
-LIST_ENTRY                        *mBootOptionsList;\r
-BDS_COMMON_OPTION                 *gOption;\r
-EFI_HII_HANDLE                    gBootManagerHandle;\r
-EFI_HANDLE                        BootManagerCallbackHandle;\r
-EFI_FORM_CALLBACK_PROTOCOL        BootManagerCallback;\r
-EFI_GUID                          gBmGuid = BOOT_MANAGER_GUID;\r
-\r
-extern EFI_FORM_BROWSER_PROTOCOL  *gBrowser;\r
-extern UINT8                      BootManagerVfrBin[];\r
-extern UINT8                      BdsStrings[];\r
-extern BOOLEAN                    gConnectAllHappened;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootManagerCallbackRoutine (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *DataArray,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This is the function that is called to provide results data to the driver.  This data\r
-  consists of a unique key which is used to identify what data is either being passed back\r
-  or being asked for. \r
-\r
-Arguments:\r
-\r
-  KeyValue -        A unique value which is sent to the original exporting driver so that it\r
-                    can identify the type of data to expect.  The format of the data tends to\r
-                    vary based on the op-code that geerated the callback.\r
-\r
-  Data -            A pointer to the data being sent to the original exporting driver.\r
-\r
-Returns: \r
-\r
---*/\r
-{\r
-  BDS_COMMON_OPTION       *Option;\r
-  LIST_ENTRY              *Link;\r
-  UINT16                  KeyCount;\r
-  EFI_HII_CALLBACK_PACKET *DataPacket;\r
-\r
-  //\r
-  // Initialize the key count\r
-  //\r
-  KeyCount = 0;\r
-\r
-  for (Link = mBootOptionsList->ForwardLink; Link != mBootOptionsList; Link = Link->ForwardLink) {\r
-    Option = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);\r
-\r
-    KeyCount++;\r
-\r
-    gOption = Option;\r
-\r
-    //\r
-    // Is this device the one chosen?\r
-    //\r
-    if (KeyCount == KeyValue) {\r
-      //\r
-      // Assigning the returned Key to a global allows the original routine to know what was chosen\r
-      //\r
-      mKeyInput = KeyValue;\r
-\r
-      *Packet   = AllocateZeroPool (sizeof (EFI_HII_CALLBACK_PACKET) + 2);\r
-      ASSERT (*Packet != NULL);\r
-\r
-      //\r
-      // Assign the buffer address to DataPacket\r
-      //\r
-      DataPacket                        = *Packet;\r
-\r
-      DataPacket->DataArray.EntryCount  = 1;\r
-      DataPacket->DataArray.NvRamMap    = NULL;\r
-      ((EFI_IFR_DATA_ENTRY *) (((EFI_IFR_DATA_ARRAY *)DataPacket) + 1))->Flags = EXIT_REQUIRED | NV_NOT_CHANGED;\r
-      return EFI_SUCCESS;\r
-    } else {\r
-      continue;\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-CallBootManager (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Hook to enable UI timeout override behavior.\r
-\r
-Arguments:\r
-  BdsDeviceList - Device List that BDS needs to connect.\r
-\r
-  Entry - Pointer to current Boot Entry.\r
-\r
-Returns:\r
-  NONE\r
-\r
---*/\r
-{\r
-  EFI_STATUS          Status;\r
-  EFI_HII_PACKAGES    *PackageList;\r
-  BDS_COMMON_OPTION   *Option;\r
-  LIST_ENTRY          *Link;\r
-  EFI_HII_UPDATE_DATA *UpdateData;\r
-  CHAR16              *ExitData;\r
-  UINTN               ExitDataSize;\r
-  STRING_REF          Token;\r
-  STRING_REF          LastToken;\r
-  EFI_INPUT_KEY       Key;\r
-  UINT8               *Location;\r
-  EFI_GUID            BmGuid;\r
-  LIST_ENTRY          BdsBootOptionList;\r
-  BOOLEAN                BootMngrMenuResetRequired;\r
-\r
-  gOption = NULL;\r
-  InitializeListHead (&BdsBootOptionList);\r
-\r
-  //\r
-  // Connect all prior to entering the platform setup menu.\r
-  //\r
-  if (!gConnectAllHappened) {\r
-    BdsLibConnectAllDriversToAllControllers ();\r
-    gConnectAllHappened = TRUE;\r
-  }\r
-  //\r
-  // BugBug: Here we can not remove the legacy refresh macro, so we need\r
-  // get the boot order every time from "BootOrder" variable.\r
-  // Recreate the boot option list base on the BootOrder variable\r
-  //\r
-  BdsLibEnumerateAllBootOption (&BdsBootOptionList);\r
-\r
-  //\r
-  // This GUID must be the same as what is defined in BootManagerVfr.vfr\r
-  //\r
-  BmGuid            = gBmGuid;\r
-\r
-  mBootOptionsList  = &BdsBootOptionList;\r
-\r
-  //\r
-  // Post our VFR to the HII database\r
-  //\r
-  PackageList = PreparePackages (2, &BmGuid, BootManagerVfrBin, BdsStrings);\r
-  Status      = Hii->NewPack (Hii, PackageList, &gBootManagerHandle);\r
-  gBS->FreePool (PackageList);\r
-\r
-  //\r
-  // This example does not implement worker functions\r
-  // for the NV accessor functions.  Only a callback evaluator\r
-  //\r
-  BootManagerCallback.NvRead    = NULL;\r
-  BootManagerCallback.NvWrite   = NULL;\r
-  BootManagerCallback.Callback  = BootManagerCallbackRoutine;\r
-\r
-  //\r
-  // Install protocol interface\r
-  //\r
-  BootManagerCallbackHandle = NULL;\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &BootManagerCallbackHandle,\r
-                  &gEfiFormCallbackProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &BootManagerCallback\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  LastToken = 0;\r
-  Hii->NewString (Hii, NULL, gBootManagerHandle, &LastToken, L" ");\r
-\r
-  //\r
-  // Allocate space for creation of UpdateData Buffer\r
-  //\r
-  UpdateData = AllocateZeroPool (0x1000);\r
-  ASSERT (UpdateData != NULL);\r
-\r
-  //\r
-  // Flag update pending in FormSet\r
-  //\r
-  UpdateData->FormSetUpdate = TRUE;\r
-  //\r
-  // Register CallbackHandle data for FormSet\r
-  //\r
-  UpdateData->FormCallbackHandle = (EFI_PHYSICAL_ADDRESS) (UINTN) BootManagerCallbackHandle;\r
-  UpdateData->FormUpdate  = FALSE;\r
-  UpdateData->FormTitle   = 0;\r
-  UpdateData->DataCount   = 1;\r
-\r
-  //\r
-  // Create blank space.  Since when we update the contents of IFR data at a label, it is\r
-  // inserted at the location of the label.  So if you want to add a string with an empty\r
-  // space afterwards, you need to add the space first and then the string like below.\r
-  //\r
-  Status = CreateSubTitleOpCode (\r
-            LastToken,        // Token Value for the string\r
-            &UpdateData->Data // Buffer containing created op-code\r
-            );\r
-\r
-  Hii->UpdateForm (Hii, gBootManagerHandle, (EFI_FORM_LABEL) 0x0000, TRUE, UpdateData);\r
-\r
-  //\r
-  // Create "Boot Option Menu" title\r
-  //\r
-  Status = CreateSubTitleOpCode (\r
-            STRING_TOKEN (STR_BOOT_OPTION_BANNER),  // Token Value for the string\r
-            &UpdateData->Data                       // Buffer containing created op-code\r
-            );\r
-\r
-  Hii->UpdateForm (Hii, gBootManagerHandle, (EFI_FORM_LABEL) 0x0000, TRUE, UpdateData);\r
-\r
-  Token                 = LastToken;\r
-  mKeyInput             = 0;\r
-\r
-  UpdateData->DataCount = 0;\r
-  Location              = (UINT8 *) &UpdateData->Data;\r
-\r
-  for (Link = BdsBootOptionList.ForwardLink; Link != &BdsBootOptionList; Link = Link->ForwardLink) {\r
-    Option = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);\r
-\r
-    //\r
-    // At this stage we are creating a menu entry, thus the Keys are reproduceable\r
-    //\r
-    mKeyInput++;\r
-    Token++;\r
-\r
-    Status = Hii->NewString (Hii, NULL, gBootManagerHandle, &Token, Option->Description);\r
-\r
-    //\r
-    // If we got an error it is almost certainly due to the token value being invalid.\r
-    // Therefore we will set the Token to 0 to automatically add a token.\r
-    //\r
-    if (EFI_ERROR (Status)) {\r
-      Token   = 0;\r
-      Status  = Hii->NewString (Hii, NULL, gBootManagerHandle, &Token, Option->Description);\r
-    }\r
-\r
-    Status = CreateGotoOpCode (\r
-              0x1000, // Form ID\r
-              Token,  // Token Value for the string\r
-              0,      // Help String (none)\r
-              EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,  // The Op-Code flags\r
-              mKeyInput,                                          // The Key to get a callback on\r
-              Location  // Buffer containing created op-code\r
-              );\r
-\r
-    UpdateData->DataCount++;\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  }\r
-\r
-  Hii->UpdateForm (Hii, gBootManagerHandle, (EFI_FORM_LABEL) 0x0001, TRUE, UpdateData);\r
-\r
-  UpdateData->DataCount = 1;\r
-\r
-  //\r
-  // Create "Boot Option Menu" title\r
-  //\r
-  Status = CreateSubTitleOpCode (\r
-            STRING_TOKEN (STR_HELP_FOOTER), // Token Value for the string\r
-            &UpdateData->Data               // Buffer containing created op-code\r
-            );\r
-\r
-  Hii->UpdateForm (Hii, gBootManagerHandle, (EFI_FORM_LABEL) 0x0002, TRUE, UpdateData);\r
-\r
-  Status = CreateSubTitleOpCode (\r
-            LastToken,                      // Token Value for the string\r
-            &UpdateData->Data               // Buffer containing created op-code\r
-            );\r
-\r
-  Hii->UpdateForm (Hii, gBootManagerHandle, (EFI_FORM_LABEL) 0x0002, TRUE, UpdateData);\r
-\r
-  gBS->FreePool (UpdateData);\r
-\r
-  ASSERT (gBrowser);\r
-\r
-  BootMngrMenuResetRequired = FALSE;\r
-  gBrowser->SendForm (\r
-              gBrowser, \r
-              TRUE, \r
-              &gBootManagerHandle, \r
-              1, \r
-              NULL, \r
-              NULL, \r
-              NULL, \r
-              NULL, \r
-              &BootMngrMenuResetRequired\r
-              );\r
-\r
-  if (BootMngrMenuResetRequired) {\r
-    EnableResetRequired ();\r
-  }\r
-\r
-  Hii->ResetStrings (Hii, gBootManagerHandle);\r
-\r
-  if (gOption == NULL) {\r
-    return ;\r
-  }\r
-  \r
-  //\r
-  //Will leave browser, check any reset required change is applied? if yes, reset system\r
-  //\r
-  SetupResetReminder ();\r
-  \r
-  //\r
-  // BugBug: This code looks repeated from the BDS. Need to save code space.\r
-  //\r
-\r
-  //\r
-  // parse the selected option\r
-  //\r
-  Status = BdsLibBootViaBootOption (gOption, gOption->DevicePath, &ExitDataSize, &ExitData);\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    PlatformBdsBootSuccess (gOption);\r
-  } else {\r
-    PlatformBdsBootFail (gOption, Status, ExitData, ExitDataSize);\r
-    gST->ConOut->OutputString (\r
-                  gST->ConOut,\r
-                  GetStringById (STRING_TOKEN (STR_ANY_KEY_CONTINUE))\r
-                  );\r
-\r
-    //\r
-    // BdsLibUiWaitForSingleEvent (gST->ConIn->WaitForKey, 0);\r
-    //\r
-\r
-    gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
-  }\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.h
deleted file mode 100644 (file)
index 3a90932..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name: \r
-\r
-  BootManager.h\r
-\r
-Abstract:\r
-\r
-  The platform boot manager reference implement\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _EFI_BOOT_MANAGER_H\r
-#define _EFI_BOOT_MANAGER_H\r
-\r
-#include "Generic/Bds.h"\r
-#include "BdsPlatform.h"\r
-#include "Generic/String.h"\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootManagerCallbackRoutine (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *DataArray,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  );\r
-\r
-VOID\r
-CallBootManager (\r
-  VOID\r
-);\r
-\r
-#define BOOT_MANAGER_GUID \\r
-  { \\r
-    0x847bc3fe, 0xb974, 0x446d, {0x94, 0x49, 0x5a, 0xd5, 0x41, 0x2e, 0x99, 0x3b } \\r
-  }\r
-\r
-#endif\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManagerStrings.uni b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManagerStrings.uni
deleted file mode 100644 (file)
index 684ac2f..0000000
Binary files a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManagerStrings.uni and /dev/null differ
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManagerVfr.Vfr b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMngr/BootManagerVfr.Vfr
deleted file mode 100644 (file)
index 7fb193a..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// *++\r
-//\r
-// Copyright (c) 2006, Intel Corporation                                                         \r
-// All rights reserved. This program and the accompanying materials                          \r
-// are licensed and made available under the terms and conditions of the BSD License         \r
-// which accompanies this distribution.  The full text of the license may be found at        \r
-// http://opensource.org/licenses/bsd-license.php                                            \r
-//                                                                                           \r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-// \r
-// Module Name:\r
-//\r
-//   BootManager.vfr \r
-// \r
-// Abstract:\r
-// \r
-//   Browser formset.\r
-// \r
-// Revision History: \r
-// \r
-// --*/\r
-\r
-#include "BdsStrDefs.h"\r
-\r
-#define FORMSET_GUID  { 0x847bc3fe, 0xb974, 0x446d, { 0x94, 0x49, 0x5a, 0xd5, 0x41, 0x2e, 0x99, 0x3b } } \r
-\r
-#define BOOT_MANAGER_HEADER             0x00\r
-#define BOOT_MANAGER_LABEL              0x01\r
-#define BOOT_MANAGER_TAIL               0x02\r
-\r
-\r
-#define BOOT_MANAGER_CLASS       0x00\r
-#define BOOT_MANAGER_SUBCLASS    0x01\r
-\r
-formset \r
-  guid     = FORMSET_GUID,\r
-  title    = STRING_TOKEN(STR_BM_BANNER),  \r
-  help     = STRING_TOKEN(STR_LAST_STRING),\r
-  class    = BOOT_MANAGER_CLASS,      \r
-  subclass = BOOT_MANAGER_SUBCLASS,\r
-\r
-  form formid = 0x1000,\r
-       title  = STRING_TOKEN(STR_BM_BANNER);\r
-\r
-    label BOOT_MANAGER_HEADER;\r
-    label BOOT_MANAGER_LABEL;\r
-    //\r
-    // This is where we will dynamically add choices for the Boot Manager\r
-    //\r
-\r
-    label BOOT_MANAGER_TAIL;\r
-  endform;\r
-\r
-endformset;\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/Capsules.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/Capsules.c
deleted file mode 100644 (file)
index 23b83a3..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Capsules.c\r
-\r
-Abstract:\r
-\r
-  BDS routines to handle capsules.\r
-\r
---*/\r
-\r
-\r
-#include <Common/FlashMap.h>\r
-\r
-VOID\r
-BdsLockFv (\r
-  IN EFI_CPU_IO_PROTOCOL          *CpuIo,\r
-  IN EFI_FLASH_SUBAREA_ENTRY      *FlashEntry\r
-  );\r
-\r
-VOID\r
-BdsLockFv (\r
-  IN EFI_CPU_IO_PROTOCOL          *CpuIo,\r
-  IN EFI_FLASH_SUBAREA_ENTRY      *FlashEntry\r
-  )\r
-{\r
-  EFI_FV_BLOCK_MAP_ENTRY      *BlockMap;\r
-  EFI_FIRMWARE_VOLUME_HEADER  *FvHeader;\r
-  UINT64                      BaseAddress;\r
-  UINT8                       Data;\r
-  UINT32                      BlockLength;\r
-  UINTN                       Index;\r
-\r
-  BaseAddress = FlashEntry->Base - 0x400000 + 2;\r
-  FvHeader    = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) (FlashEntry->Base));\r
-  BlockMap    = &(FvHeader->FvBlockMap[0]);\r
-\r
-  while ((BlockMap->NumBlocks != 0) && (BlockMap->BlockLength != 0)) {\r
-    BlockLength = BlockMap->BlockLength;\r
-    for (Index = 0; Index < BlockMap->NumBlocks; Index++) {\r
-      CpuIo->Mem.Read (\r
-                  CpuIo,\r
-                  EfiCpuIoWidthUint8,\r
-                  BaseAddress,\r
-                  1,\r
-                  &Data\r
-                  );\r
-      Data = (UINT8) (Data | 0x3);\r
-      CpuIo->Mem.Write (\r
-                  CpuIo,\r
-                  EfiCpuIoWidthUint8,\r
-                  BaseAddress,\r
-                  1,\r
-                  &Data\r
-                  );\r
-      BaseAddress += BlockLength;\r
-    }\r
-\r
-    BlockMap++;\r
-  }\r
-}\r
-\r
-VOID\r
-BdsLockNonUpdatableFlash (\r
-  VOID\r
-  )\r
-{\r
-  EFI_FLASH_MAP_ENTRY_DATA  *FlashMapEntryData;\r
-  EFI_PEI_HOB_POINTERS      GuidHob;\r
-  EFI_STATUS                Status;\r
-  EFI_CPU_IO_PROTOCOL       *CpuIo;\r
-\r
-  Status = gBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, (VOID**)&CpuIo);\r
-  ASSERT_EFI_ERROR (Status);\r
-  \r
-  GuidHob.Raw = GetHobList ();\r
-  while ((GuidHob.Raw = GetNextGuidHob (&gEfiFlashMapHobGuid, GuidHob.Raw)) != NULL) {\r
-    FlashMapEntryData = (EFI_FLASH_MAP_ENTRY_DATA *) GET_GUID_HOB_DATA (GuidHob.Guid);\r
-\r
-    //\r
-    // Get the variable store area\r
-    //\r
-    if ((FlashMapEntryData->AreaType == EFI_FLASH_AREA_RECOVERY_BIOS) ||\r
-        (FlashMapEntryData->AreaType == EFI_FLASH_AREA_MAIN_BIOS)\r
-        ) {\r
-      BdsLockFv (CpuIo, &(FlashMapEntryData->Entries[0]));\r
-    }\r
-    GuidHob.Raw = GET_NEXT_HOB (GuidHob);\r
-  }\r
-\r
-  return ;\r
-}\r
-\r
-EFI_STATUS\r
-ProcessCapsules (\r
-  EFI_BOOT_MODE BootMode\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This routine is called to see if there are any capsules we need to process.\r
-  If the boot mode is not UPDATE, then we do nothing. Otherwise find the\r
-  capsule HOBS and produce firmware volumes for them via the DXE service.\r
-  Then call the dispatcher to dispatch drivers from them. Finally, check\r
-  the status of the updates.\r
-\r
-Arguments:\r
-\r
-  BootMode - the current boot mode\r
-\r
-Returns:\r
-  \r
-  EFI_INVALID_PARAMETER - boot mode is not correct for an update\r
-\r
-Note:\r
\r
- This function should be called by BDS in case we need to do some\r
- sort of processing even if there is no capsule to process. We\r
- need to do this if an earlier update went awry and we need to\r
- clear the capsule variable so on the next reset PEI does not see it and \r
- think there is a capsule available.\r
-\r
---*/\r
-{\r
-  EFI_STATUS                  Status;\r
-  EFI_HOB_CAPSULE_VOLUME      *CvHob;\r
-  EFI_PHYSICAL_ADDRESS        BaseAddress;\r
-  UINT64                      Length;\r
-  EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader;\r
-  EFI_HANDLE                  FvProtocolHandle;\r
-\r
-  //\r
-  // We don't do anything else if the boot mode is not flash-update\r
-  //\r
-  if (BootMode != BOOT_ON_FLASH_UPDATE) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  //\r
-  // Only one capsule HOB allowed.\r
-  //\r
-  CvHob = GetFirstHob (EFI_HOB_TYPE_CV);\r
-  if (CvHob == NULL) {\r
-    //\r
-    // We didn't find a hob, so had no errors.\r
-    //\r
-    BdsLockNonUpdatableFlash ();\r
-    return EFI_SUCCESS;\r
-  }\r
-  \r
-  BaseAddress = CvHob->BaseAddress;\r
-  Length      = CvHob->Length;\r
-\r
-  Status      = EFI_SUCCESS;\r
-  //\r
-  // Now walk the capsule and call the core to process each\r
-  // firmware volume in it.\r
-  //\r
-  while (Length != 0) {\r
-    //\r
-    // Point to the next firmware volume header, and then\r
-    // call the DXE service to process it.\r
-    //\r
-    FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress;\r
-    if (FwVolHeader->FvLength > Length) {\r
-      //\r
-      // Notes: need to stuff this status somewhere so that the\r
-      // error can be detected at OS runtime\r
-      //\r
-      Status = EFI_VOLUME_CORRUPTED;\r
-      break;\r
-    }\r
-\r
-    Status = gDS->ProcessFirmwareVolume (\r
-                    (VOID *) (UINTN) BaseAddress,\r
-                    (UINTN) FwVolHeader->FvLength,\r
-                    &FvProtocolHandle\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-    //\r
-    // Call the dispatcher to dispatch any drivers from the produced firmware volume\r
-    //\r
-    gDS->Dispatch ();\r
-    //\r
-    // On to the next FV in the capsule\r
-    //\r
-    Length -= FwVolHeader->FvLength;\r
-    BaseAddress = (EFI_PHYSICAL_ADDRESS) ((UINTN) BaseAddress + FwVolHeader->FvLength);\r
-    //\r
-    // Notes: when capsule spec is finalized, if the requirement is made to\r
-    // have each FV in a capsule aligned, then we will need to align the\r
-    // BaseAddress and Length here.\r
-    //\r
-  }\r
-   \r
-\r
-  BdsLockNonUpdatableFlash ();\r
-\r
-  return Status;\r
-}\r
-\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.c
deleted file mode 100644 (file)
index 3de404b..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name: \r
-\r
-  DeviceManager.c\r
-\r
-Abstract:\r
-\r
-  The platform device manager reference implement\r
-\r
---*/\r
-#include "DeviceManager.h"\r
-\r
-STATIC UINT16                     mTokenCount;\r
-EFI_FRONTPAGE_CALLBACK_INFO       FPCallbackInfo;\r
-extern UINTN                      gCallbackKey;\r
-extern EFI_FORM_BROWSER_PROTOCOL  *gBrowser;\r
-extern EFI_GUID                   gBdsStringPackGuid;\r
-extern BOOLEAN                    gConnectAllHappened;\r
-\r
-STRING_REF                        gStringTokenTable[] = {\r
-  STR_VIDEO_DEVICE,\r
-  STR_NETWORK_DEVICE,\r
-  STR_INPUT_DEVICE,\r
-  STR_ON_BOARD_DEVICE,\r
-  STR_OTHER_DEVICE,\r
-  STR_EMPTY_STRING,\r
-  0xFFFF\r
-};\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DeviceManagerCallbackRoutine (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *DataArray,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This is the function that is called to provide results data to the driver.  This data\r
-  consists of a unique key which is used to identify what data is either being passed back\r
-  or being asked for. \r
-\r
-Arguments:\r
-\r
-  KeyValue -        A unique value which is sent to the original exporting driver so that it\r
-                    can identify the type of data to expect.  The format of the data tends to\r
-                    vary based on the op-code that geerated the callback.\r
-\r
-  Data -            A pointer to the data being sent to the original exporting driver.\r
-\r
-Returns: \r
-\r
---*/\r
-{\r
-  //\r
-  // The KeyValue corresponds in this case to the handle which was requested to be displayed\r
-  //\r
-  EFI_FRONTPAGE_CALLBACK_INFO *CallbackInfo;\r
-\r
-  CallbackInfo = EFI_FP_CALLBACK_DATA_FROM_THIS (This);\r
-  switch (KeyValue) {\r
-  case 0x2000:\r
-    CallbackInfo->Data.VideoBIOS = (UINT8) (UINTN) (((EFI_IFR_DATA_ENTRY *)(DataArray + 1))->Data);\r
-    gRT->SetVariable (\r
-          L"VBIOS",\r
-          &gEfiGlobalVariableGuid,\r
-          EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-          sizeof (UINT8),\r
-          &CallbackInfo->Data.VideoBIOS\r
-          );\r
-    break;\r
-\r
-  default:\r
-    break;\r
-  }\r
-\r
-  gCallbackKey = KeyValue;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-InitializeDeviceManager (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Initialize HII information for the FrontPage\r
-\r
-Arguments:\r
-  None\r
-            \r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_STATUS          Status;\r
-  EFI_HII_PACKAGES    *PackageList;\r
-  EFI_HII_UPDATE_DATA *UpdateData;\r
-\r
-  //\r
-  // Allocate space for creation of UpdateData Buffer\r
-  //\r
-  UpdateData = AllocateZeroPool (0x1000);\r
-  ASSERT (UpdateData != NULL);\r
-\r
-  PackageList = PreparePackages (1, &gBdsStringPackGuid, DeviceManagerVfrBin);\r
-  Status      = Hii->NewPack (Hii, PackageList, &FPCallbackInfo.DevMgrHiiHandle);\r
-  gBS->FreePool (PackageList);\r
-\r
-  //\r
-  // This example does not implement worker functions for the NV accessor functions.  Only a callback evaluator\r
-  //\r
-  FPCallbackInfo.Signature                = EFI_FP_CALLBACK_DATA_SIGNATURE;\r
-  FPCallbackInfo.DevMgrCallback.NvRead    = NULL;\r
-  FPCallbackInfo.DevMgrCallback.NvWrite   = NULL;\r
-  FPCallbackInfo.DevMgrCallback.Callback  = DeviceManagerCallbackRoutine;\r
-\r
-  //\r
-  // Install protocol interface\r
-  //\r
-  FPCallbackInfo.CallbackHandle = NULL;\r
-\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &FPCallbackInfo.CallbackHandle,\r
-                  &gEfiFormCallbackProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &FPCallbackInfo.DevMgrCallback\r
-                  );\r
-\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  //\r
-  // Flag update pending in FormSet\r
-  //\r
-  UpdateData->FormSetUpdate = TRUE;\r
-  //\r
-  // Register CallbackHandle data for FormSet\r
-  //\r
-  UpdateData->FormCallbackHandle = (EFI_PHYSICAL_ADDRESS) (UINTN) FPCallbackInfo.CallbackHandle;\r
-  //\r
-  // Simply registering the callback handle\r
-  //\r
-  Hii->UpdateForm (Hii, FPCallbackInfo.DevMgrHiiHandle, (EFI_FORM_LABEL) 0x0000, TRUE, UpdateData);\r
-\r
-  gBS->FreePool (UpdateData);\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-CallDeviceManager (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Call the browser and display the device manager\r
-\r
-Arguments:\r
-  \r
-  None\r
-  \r
-Returns:\r
-  EFI_SUCCESS            - Operation is successful.\r
-  EFI_INVALID_PARAMETER  - If the inputs to SendForm function is not valid.\r
-  \r
---*/\r
-{\r
-  EFI_STATUS          Status;\r
-  UINTN               BufferSize;\r
-  UINTN               Count;\r
-  EFI_HII_HANDLE      Index;\r
-  UINT8               *Buffer;\r
-  EFI_IFR_FORM_SET    *FormSetData;\r
-  CHAR16              *String;\r
-  UINTN               StringLength;\r
-  EFI_HII_UPDATE_DATA *UpdateData;\r
-  STRING_REF          Token;\r
-  STRING_REF          TokenHelp;\r
-  IFR_OPTION          *IfrOptionList;\r
-  UINT8               *VideoOption;\r
-  UINTN               VideoOptionSize;\r
-  EFI_HII_HANDLE      *HiiHandles;\r
-  UINT16              HandleBufferLength;\r
-  BOOLEAN                BootDeviceMngrMenuResetRequired;\r
-\r
-  IfrOptionList       = NULL;\r
-  VideoOption         = NULL;\r
-  HiiHandles          = NULL;\r
-  HandleBufferLength  = 0;\r
-\r
-  //\r
-  // Connect all prior to entering the platform setup menu.\r
-  //\r
-  if (!gConnectAllHappened) {\r
-    BdsLibConnectAllDriversToAllControllers ();\r
-    gConnectAllHappened = TRUE;\r
-  }\r
-  //\r
-  // Allocate space for creation of UpdateData Buffer\r
-  //\r
-  UpdateData = AllocateZeroPool (0x1000);\r
-  ASSERT (UpdateData != NULL);\r
-\r
-  Status        = EFI_SUCCESS;\r
-  Buffer        = NULL;\r
-  FormSetData   = NULL;\r
-  gCallbackKey  = 0;\r
-  if (mTokenCount == 0) {\r
-    Hii->NewString (Hii, NULL, FPCallbackInfo.DevMgrHiiHandle, &mTokenCount, L" ");\r
-  }\r
-\r
-  Token     = mTokenCount;\r
-  TokenHelp = (UINT16) (Token + 1);\r
-\r
-  //\r
-  // Reset the menu\r
-  //\r
-  for (Index = 0, Count = 1; Count < 0x10000; Count <<= 1, Index++) {\r
-    //\r
-    // We will strip off all previous menu entries\r
-    //\r
-    UpdateData->DataCount = 0xFF;\r
-\r
-    //\r
-    // Erase entries on this label\r
-    //\r
-    Hii->UpdateForm (Hii, FPCallbackInfo.DevMgrHiiHandle, (EFI_FORM_LABEL) Count, FALSE, UpdateData);\r
-\r
-    //\r
-    // Did we reach the end of the Token Table?\r
-    //\r
-    if (gStringTokenTable[Index] == 0xFFFF) {\r
-      break;\r
-    }\r
-\r
-    CreateSubTitleOpCode (gStringTokenTable[Index], &UpdateData->Data);\r
-    //\r
-    // Add a single menu item - in this case a subtitle for the device type\r
-    //\r
-    UpdateData->DataCount = 1;\r
-\r
-    //\r
-    // Add default title for this label\r
-    //\r
-    Hii->UpdateForm (Hii, FPCallbackInfo.DevMgrHiiHandle, (EFI_FORM_LABEL) Count, TRUE, UpdateData);\r
-  }\r
-  //\r
-  // Add a space and an exit string.  Remember since we add things at the label and push other things beyond the\r
-  // label down, we add this in reverse order\r
-  //\r
-  CreateSubTitleOpCode (STRING_TOKEN (STR_EXIT_STRING), &UpdateData->Data);\r
-  Hii->UpdateForm (Hii, FPCallbackInfo.DevMgrHiiHandle, (EFI_FORM_LABEL) Count, TRUE, UpdateData);\r
-  CreateSubTitleOpCode (STR_EMPTY_STRING, &UpdateData->Data);\r
-  Hii->UpdateForm (Hii, FPCallbackInfo.DevMgrHiiHandle, (EFI_FORM_LABEL) Count, TRUE, UpdateData);\r
-\r
-  //\r
-  // Get all the Hii handles\r
-  //\r
-  Status = BdsLibGetHiiHandles (Hii, &HandleBufferLength, &HiiHandles);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  for (Index = 1, BufferSize = 0; Index < HandleBufferLength; Index++) {\r
-    //\r
-    // Am not initializing Buffer since the first thing checked is the size\r
-    // this way I can get the real buffersize in the smallest code size\r
-    //\r
-    Status = Hii->GetForms (Hii, Index, 0, &BufferSize, Buffer);\r
-\r
-    if (Status != EFI_NOT_FOUND) {\r
-      //\r
-      // BufferSize should have the real size of the forms now\r
-      //\r
-      Buffer = AllocateZeroPool (BufferSize);\r
-      ASSERT (Buffer != NULL);\r
-\r
-      //\r
-      // Am not initializing Buffer since the first thing checked is the size\r
-      // this way I can get the real buffersize in the smallest code size\r
-      //\r
-      Status = Hii->GetForms (Hii, Index, 0, &BufferSize, Buffer);\r
-\r
-      //\r
-      // Skip EFI_HII_PACK_HEADER, advance to EFI_IFR_FORM_SET data.\r
-      //\r
-      FormSetData = (EFI_IFR_FORM_SET *) (Buffer + sizeof (EFI_HII_PACK_HEADER));\r
-\r
-      //\r
-      // If this formset belongs in the device manager, add it to the menu\r
-      //\r
-      if (FormSetData->Class != EFI_NON_DEVICE_CLASS) {\r
-\r
-        StringLength  = 0x1000;\r
-        String        = AllocateZeroPool (StringLength);\r
-        ASSERT (String != NULL);\r
-\r
-        Status  = Hii->GetString (Hii, Index, FormSetData->FormSetTitle, TRUE, NULL, &StringLength, String);\r
-        Status  = Hii->NewString (Hii, NULL, FPCallbackInfo.DevMgrHiiHandle, &Token, String);\r
-\r
-        //\r
-        // If token value exceeded real token value - we need to add a new token values\r
-        //\r
-        if (Status == EFI_INVALID_PARAMETER) {\r
-          Token     = 0;\r
-          TokenHelp = 0;\r
-          Status    = Hii->NewString (Hii, NULL, FPCallbackInfo.DevMgrHiiHandle, &Token, String);\r
-        }\r
-\r
-        StringLength = 0x1000;\r
-        if (FormSetData->Help == 0) {\r
-          TokenHelp = 0;\r
-        } else {\r
-          Status = Hii->GetString (Hii, Index, FormSetData->Help, TRUE, NULL, &StringLength, String);\r
-          if (StringLength == 0x02) {\r
-            TokenHelp = 0;\r
-          } else {\r
-            Status = Hii->NewString (Hii, NULL, FPCallbackInfo.DevMgrHiiHandle, &TokenHelp, String);\r
-            if (Status == EFI_INVALID_PARAMETER) {\r
-              TokenHelp = 0;\r
-              Status    = Hii->NewString (Hii, NULL, FPCallbackInfo.DevMgrHiiHandle, &TokenHelp, String);\r
-            }\r
-          }\r
-        }\r
-\r
-        gBS->FreePool (String);\r
-\r
-        CreateGotoOpCode (\r
-          0x1000,     // Device Manager Page\r
-          Token,      // Description String Token\r
-          TokenHelp,  // Description Help String Token\r
-          EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,  // Flag designating callback is active\r
-          (UINT16) Index,                                     // Callback key value\r
-          &UpdateData->Data                                   // Buffer to fill with op-code\r
-          );\r
-\r
-        //\r
-        // In the off-chance that we have lots of extra tokens allocated to the DeviceManager\r
-        // this ensures we are fairly re-using the tokens instead of constantly growing the token\r
-        // storage for this one handle.  If we incremented the token value beyond what it normally\r
-        // would use, we will fall back into the error path which seeds the token value with a 0\r
-        // so that we can correctly add a token value.\r
-        //\r
-        if (TokenHelp == 0) {\r
-          //\r
-          // Since we didn't add help, only advance Token by 1\r
-          //\r
-          Token++;\r
-        } else {\r
-          Token     = (UINT16) (Token + 2);\r
-          TokenHelp = (UINT16) (TokenHelp + 2);\r
-        }\r
-        //\r
-        // This for loop basically will take the Class value which is a bitmask and\r
-        // update the form for every active bit.  There will be a label at each bit\r
-        // location.  So if someone had a device which a class of EFI_DISK_DEVICE_CLASS |\r
-        // EFI_ON_BOARD_DEVICE_CLASS, this routine will unwind that mask and drop the menu entry\r
-        // on each corresponding label.\r
-        //\r
-        for (Count = 1; Count < 0x10000; Count <<= 1) {\r
-          //\r
-          // This is an active bit, so update the form\r
-          //\r
-          if (FormSetData->Class & Count) {\r
-            Hii->UpdateForm (\r
-                  Hii,\r
-                  FPCallbackInfo.DevMgrHiiHandle,\r
-                  (EFI_FORM_LABEL) (FormSetData->Class & Count),\r
-                  TRUE,\r
-                  UpdateData\r
-                  );\r
-          }\r
-        }\r
-      }\r
-\r
-      BufferSize = 0;\r
-      //\r
-      // Reset Buffer pointer to original location\r
-      //\r
-      gBS->FreePool (Buffer);\r
-    }\r
-  }\r
-  //\r
-  // Add oneof for video BIOS selection\r
-  //\r
-  VideoOption = BdsLibGetVariableAndSize (\r
-                  L"VBIOS",\r
-                  &gEfiGlobalVariableGuid,\r
-                  &VideoOptionSize\r
-                  );\r
-  if (NULL == VideoOption) {\r
-    FPCallbackInfo.Data.VideoBIOS = 0;\r
-  } else {\r
-    FPCallbackInfo.Data.VideoBIOS = VideoOption[0];\r
-    gBS->FreePool (VideoOption);\r
-  }\r
-\r
-  ASSERT (FPCallbackInfo.Data.VideoBIOS <= 1);\r
-\r
-  Status = gBS->AllocatePool (EfiBootServicesData, 2 * sizeof (IFR_OPTION), (VOID**) &IfrOptionList);\r
-  if (IfrOptionList != NULL) {\r
-    IfrOptionList[0].Flags        = EFI_IFR_FLAG_INTERACTIVE;\r
-    IfrOptionList[0].Key          = SET_VIDEO_BIOS_TYPE_QUESTION_ID + 0x2000;\r
-    IfrOptionList[0].StringToken  = STRING_TOKEN (STR_ONE_OF_PCI);\r
-    IfrOptionList[0].Value        = 0;\r
-    IfrOptionList[0].OptionString = NULL;\r
-    IfrOptionList[1].Flags        = EFI_IFR_FLAG_INTERACTIVE;\r
-    IfrOptionList[1].Key          = SET_VIDEO_BIOS_TYPE_QUESTION_ID + 0x2000;\r
-    IfrOptionList[1].StringToken  = STRING_TOKEN (STR_ONE_OF_AGP);\r
-    IfrOptionList[1].Value        = 1;\r
-    IfrOptionList[1].OptionString = NULL;\r
-    IfrOptionList[FPCallbackInfo.Data.VideoBIOS].Flags |= EFI_IFR_FLAG_DEFAULT;\r
-\r
-    CreateOneOfOpCode (\r
-      SET_VIDEO_BIOS_TYPE_QUESTION_ID,\r
-      (UINT8) 1,\r
-      STRING_TOKEN (STR_ONE_OF_VBIOS),\r
-      STRING_TOKEN (STR_ONE_OF_VBIOS_HELP),\r
-      IfrOptionList,\r
-      2,\r
-      &UpdateData->Data\r
-      );\r
-\r
-    UpdateData->DataCount = 4;\r
-    Hii->UpdateForm (Hii, FPCallbackInfo.DevMgrHiiHandle, (EFI_FORM_LABEL) EFI_VBIOS_CLASS, TRUE, UpdateData);\r
-    gBS->FreePool (IfrOptionList);\r
-  }\r
-\r
-  BootDeviceMngrMenuResetRequired = FALSE;\r
-  Status = gBrowser->SendForm (\r
-                      gBrowser,\r
-                      TRUE,                             // Use the database\r
-                      &FPCallbackInfo.DevMgrHiiHandle,  // The HII Handle\r
-                      1,\r
-                      NULL,\r
-                      FPCallbackInfo.CallbackHandle,\r
-                      (UINT8 *) &FPCallbackInfo.Data,\r
-                      NULL,\r
-                      &BootDeviceMngrMenuResetRequired\r
-                      );\r
-\r
-  if (BootDeviceMngrMenuResetRequired) {\r
-    EnableResetRequired ();\r
-  }\r
-\r
-  Hii->ResetStrings (Hii, FPCallbackInfo.DevMgrHiiHandle);\r
-\r
-  //\r
-  // We will have returned from processing a callback - user either hit ESC to exit, or selected\r
-  // a target to display\r
-  //\r
-  if (gCallbackKey != 0 && gCallbackKey < 0x2000) {\r
-    BootDeviceMngrMenuResetRequired = FALSE;\r
-    Status = gBrowser->SendForm (\r
-                        gBrowser,\r
-                        TRUE,                             // Use the database\r
-                        (EFI_HII_HANDLE *) &gCallbackKey, // The HII Handle\r
-                        1,\r
-                        NULL,\r
-                        NULL,                             // This is the handle that the interface to the callback was installed on\r
-                        NULL,\r
-                        NULL,\r
-                        &BootDeviceMngrMenuResetRequired\r
-                        );\r
-\r
-    if (BootDeviceMngrMenuResetRequired) {\r
-      EnableResetRequired ();\r
-    }\r
-    //\r
-    // Force return to Device Manager\r
-    //\r
-    gCallbackKey = 4;\r
-  }\r
-\r
-  if (gCallbackKey >= 0x2000) {\r
-    gCallbackKey = 4;\r
-  }\r
-\r
-  gBS->FreePool (UpdateData);\r
-  gBS->FreePool (HiiHandles);\r
-\r
-  return Status;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.h
deleted file mode 100644 (file)
index dd6d935..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name: \r
-\r
-  DeviceManager.c\r
-\r
-Abstract:\r
-\r
-  The platform device manager reference implement\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _DEVICE_MANAGER_H\r
-#define _DEVICE_MANAGER_H\r
-\r
-#include "Generic/FrontPage.h"\r
-\r
-#define EFI_NON_DEVICE_CLASS              0x00  // Useful when you do not want something in the Device Manager\r
-#define EFI_DISK_DEVICE_CLASS             0x01\r
-#define EFI_VIDEO_DEVICE_CLASS            0x02\r
-#define EFI_NETWORK_DEVICE_CLASS          0x04\r
-#define EFI_INPUT_DEVICE_CLASS            0x08\r
-#define EFI_ON_BOARD_DEVICE_CLASS         0x10\r
-#define EFI_OTHER_DEVICE_CLASS            0x20\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DeviceManagerCallbackRoutine (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *DataArray,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  )\r
-;\r
-\r
-EFI_STATUS\r
-InitializeDeviceManager (\r
-  VOID\r
-  )\r
-;\r
-\r
-EFI_STATUS\r
-CallDeviceManager (\r
-  VOID\r
-  )\r
-;\r
-\r
-#endif\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManagerStrings.uni b/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManagerStrings.uni
deleted file mode 100644 (file)
index f549ff2..0000000
Binary files a/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManagerStrings.uni and /dev/null differ
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManagerVfr.Vfr b/EdkUnixPkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManagerVfr.Vfr
deleted file mode 100644 (file)
index 5497c6d..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-// *++\r
-//\r
-// Copyright (c) 2006, Intel Corporation                                                         \r
-// All rights reserved. This program and the accompanying materials                          \r
-// are licensed and made available under the terms and conditions of the BSD License         \r
-// which accompanies this distribution.  The full text of the license may be found at        \r
-// http://opensource.org/licenses/bsd-license.php                                            \r
-//                                                                                           \r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-// \r
-// Module Name:\r
-//\r
-//   DeviceManagerVfr.vfr \r
-// \r
-// Abstract:\r
-// \r
-//   Device Manager formset.\r
-// \r
-// Revision History: \r
-// \r
-// --*/\r
-\r
-#include "BdsStrDefs.h"\r
-\r
-#define FORMSET_GUID  { 0x3ebfa8e6, 0x511d, 0x4b5b, { 0xa9, 0x5f, 0xfb, 0x38, 0x26, 0xf, 0x1c, 0x27 } }\r
-\r
-#define EFI_DISK_DEVICE_CLASS              0x01\r
-#define EFI_VIDEO_DEVICE_CLASS             0x02\r
-#define EFI_NETWORK_DEVICE_CLASS           0x04\r
-#define EFI_INPUT_DEVICE_CLASS             0x08\r
-#define EFI_ON_BOARD_DEVICE_CLASS          0x10\r
-#define EFI_OTHER_DEVICE_CLASS             0x20\r
-#define EFI_VBIOS_CLASS                    0x40\r
-\r
-#define DEVICE_MANAGER_CLASS               0x0000\r
-#define FRONT_PAGE_SUBCLASS                         0x0003\r
-\r
-formset \r
-  guid     = FORMSET_GUID,\r
-  title    = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE),  \r
-  help     = STRING_TOKEN(STR_EMPTY_STRING),\r
-  class    = DEVICE_MANAGER_CLASS,      \r
-  subclass = FRONT_PAGE_SUBCLASS,\r
-\r
-  form formid = 0x1000,\r
-       title  = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE);\r
-\r
-    //\r
-    // This is where devices get added to the device manager hierarchy\r
-    //\r
-    subtitle text = STRING_TOKEN(STR_DISK_DEVICE);\r
-    label EFI_DISK_DEVICE_CLASS;\r
-\r
-    subtitle text = STRING_TOKEN(STR_VIDEO_DEVICE);\r
-    label EFI_VIDEO_DEVICE_CLASS;\r
-\r
-    subtitle text = STRING_TOKEN(STR_NETWORK_DEVICE);\r
-    label EFI_NETWORK_DEVICE_CLASS;\r
-\r
-    subtitle text = STRING_TOKEN(STR_INPUT_DEVICE);\r
-    label EFI_INPUT_DEVICE_CLASS;\r
-\r
-    subtitle text = STRING_TOKEN(STR_ON_BOARD_DEVICE);\r
-    label EFI_ON_BOARD_DEVICE_CLASS;\r
-\r
-    subtitle text = STRING_TOKEN(STR_OTHER_DEVICE);\r
-    label EFI_OTHER_DEVICE_CLASS;\r
-    \r
-    subtitle text = STRING_TOKEN(STR_EMPTY_STRING);\r
-    label EFI_VBIOS_CLASS;\r
-    \r
-  endform;\r
-endformset;\r
-\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPage.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPage.c
deleted file mode 100644 (file)
index 56292f9..0000000
+++ /dev/null
@@ -1,902 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  FrontPage.c\r
-\r
-Abstract:\r
-\r
-  FrontPage routines to handle the callbacks and browser calls\r
-  \r
---*/\r
-\r
-#include "Bds.h"\r
-#include "BdsPlatform.h"\r
-#include "FrontPage.h"\r
-#include "String.h"\r
-\r
-EFI_GUID                    mProcessorSubClass  = EFI_PROCESSOR_SUBCLASS_GUID;\r
-EFI_GUID                    mMemorySubClass     = EFI_MEMORY_SUBCLASS_GUID;\r
-EFI_GUID                    mMiscSubClass       = EFI_MISC_SUBCLASS_GUID;\r
-\r
-UINT16                      mLastSelection;\r
-EFI_HII_HANDLE              gFrontPageHandle;\r
-EFI_HANDLE                  FrontPageCallbackHandle;\r
-EFI_FORM_CALLBACK_PROTOCOL  FrontPageCallback;\r
-EFI_FORM_BROWSER_PROTOCOL   *gBrowser;\r
-UINTN                       gCallbackKey;\r
-BOOLEAN                     gConnectAllHappened = FALSE;\r
-\r
-extern EFI_HII_HANDLE       gFrontPageHandle;\r
-extern EFI_GUID             gBdsStringPackGuid;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FrontPageCallbackRoutine (\r
-  IN EFI_FORM_CALLBACK_PROTOCOL       *This,\r
-  IN UINT16                           KeyValue,\r
-  IN EFI_IFR_DATA_ARRAY               *DataArray,\r
-  OUT EFI_HII_CALLBACK_PACKET         **Packet\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This is the function that is called to provide results data to the driver.  This data\r
-  consists of a unique key which is used to identify what data is either being passed back\r
-  or being asked for. \r
-\r
-Arguments:\r
-\r
-  KeyValue -        A unique value which is sent to the original exporting driver so that it\r
-                    can identify the type of data to expect.  The format of the data tends to\r
-                    vary based on the op-code that geerated the callback.\r
-\r
-  Data -            A pointer to the data being sent to the original exporting driver.\r
-\r
-Returns: \r
-\r
---*/\r
-{\r
-  CHAR16        *LanguageString;\r
-  UINTN         Count;\r
-  CHAR16        UnicodeLang[3];\r
-  CHAR8         Lang[3];\r
-  EFI_STATUS    Status;\r
-  UINTN         Index;\r
-  CHAR16        *TmpStr;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color;\r
-\r
-  SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);\r
-  SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);\r
-  SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);\r
-\r
-  Count = 0;\r
-\r
-  //\r
-  // The first 4 entries in the Front Page are to be GUARANTEED to remain constant so IHV's can\r
-  // describe to their customers in documentation how to find their setup information (namely\r
-  // under the device manager and specific buckets)\r
-  //\r
-  switch (KeyValue) {\r
-  case 0x0001:\r
-    //\r
-    // This is the continue - clear the screen and return an error to get out of FrontPage loop\r
-    //\r
-    gCallbackKey = 1;\r
-    break;\r
-\r
-  case 0x1234:\r
-    //\r
-    // Collect the languages from what our current Language support is based on our VFR\r
-    //\r
-    Hii->GetPrimaryLanguages (Hii, gFrontPageHandle, &LanguageString);\r
-\r
-    //\r
-    // Based on the DataArray->Data->Data value, we can determine\r
-    // which language was chosen by the user\r
-    //\r
-    for (Index = 0; Count != (UINTN) (((EFI_IFR_DATA_ENTRY *) (DataArray + 1))->Data); Index += 3) {\r
-      Count++;\r
-    }\r
-    //\r
-    // Preserve the choice the user made\r
-    //\r
-    mLastSelection = (UINT16) Count;\r
-\r
-    //\r
-    // The Language (in Unicode format) the user chose\r
-    //\r
-    CopyMem (UnicodeLang, &LanguageString[Index], 6);\r
-\r
-    //\r
-    // Convert Unicode to ASCII (Since the ISO standard assumes ASCII equivalent abbreviations\r
-    // we can be safe in converting this Unicode stream to ASCII without any loss in meaning.\r
-    //\r
-    for (Index = 0; Index < 3; Index++) {\r
-      Lang[Index] = (CHAR8) UnicodeLang[Index];\r
-    }\r
-\r
-    Status = gRT->SetVariable (\r
-                    L"Lang",\r
-                    &gEfiGlobalVariableGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                    3,\r
-                    Lang\r
-                    );\r
-\r
-    gBS->FreePool (LanguageString);\r
-    gCallbackKey = 2;\r
-    break;\r
-\r
-  case 0x1064:\r
-    //\r
-    // Boot Manager\r
-    //\r
-    gCallbackKey = 3;\r
-    break;\r
-\r
-  case 0x8567:\r
-    //\r
-    // Device Manager\r
-    //\r
-    gCallbackKey = 4;\r
-    break;\r
-\r
-  case 0x9876:\r
-    //\r
-    // Boot Maintenance Manager\r
-    //\r
-    gCallbackKey = 5;\r
-    break;\r
-\r
-  case 0xFFFE:\r
-\r
-    break;\r
-\r
-  case 0xFFFF:\r
-    //\r
-    // FrontPage TimeOut Callback\r
-    //\r
-    TmpStr = GetStringById (STRING_TOKEN (STR_START_BOOT_OPTION));\r
-    if (TmpStr != NULL) {\r
-      PlatformBdsShowProgress (\r
-        Foreground,\r
-        Background,\r
-        TmpStr,\r
-        Color,\r
-        (UINTN) (((EFI_IFR_DATA_ENTRY *) (DataArray+1))->Data),\r
-        0\r
-        );\r
-      gBS->FreePool (TmpStr);\r
-    }\r
-    break;\r
-\r
-  default:\r
-    gCallbackKey = 0;\r
-    break;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-InitializeFrontPage (\r
-  BOOLEAN                         ReInitializeStrings\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Initialize HII information for the FrontPage\r
-\r
-Arguments:\r
-  None\r
-            \r
-Returns:\r
-  EFI_SUCCESS       - The operation is successful.\r
-  EFI_DEVICE_ERROR  - If the dynamic opcode creation failed.\r
-\r
---*/\r
-{\r
-  EFI_STATUS          Status;\r
-  EFI_HII_PACKAGES    *PackageList;\r
-  EFI_HII_UPDATE_DATA *UpdateData;\r
-  IFR_OPTION          *OptionList;\r
-  CHAR16              *LanguageString;\r
-  UINTN               OptionCount;\r
-  UINTN               Index;\r
-  STRING_REF          Token;\r
-  UINT16              Key;\r
-  CHAR8               AsciiLang[4];\r
-  CHAR16              UnicodeLang[4];\r
-  CHAR16              Lang[4];\r
-  CHAR16              *StringBuffer;\r
-  UINTN               BufferSize;\r
-  UINT8               *TempBuffer;\r
-\r
-  UpdateData  = NULL;\r
-  OptionList  = NULL;\r
-\r
-  if (ReInitializeStrings) {\r
-    //\r
-    // BugBug: Dont' use a goto\r
-    //\r
-    goto ReInitStrings;\r
-  }\r
-  //\r
-  // Go ahead and initialize the Device Manager\r
-  //\r
-  InitializeDeviceManager ();\r
-\r
-  //\r
-  // BugBug: if FrontPageVfrBin is generated by a tool, why are we patching it here\r
-  //\r
-  TempBuffer    = (UINT8 *) FrontPageVfrBin;\r
-  TempBuffer    = TempBuffer + sizeof (EFI_HII_PACK_HEADER);\r
-  TempBuffer    = (UINT8 *) &((EFI_IFR_FORM_SET *) TempBuffer)->NvDataSize;\r
-  *TempBuffer   = 1;\r
-\r
-  gCallbackKey  = 0;\r
-\r
-  PackageList   = PreparePackages (1, &gBdsStringPackGuid, FrontPageVfrBin);\r
-\r
-  Status        = Hii->NewPack (Hii, PackageList, &gFrontPageHandle);\r
-\r
-  gBS->FreePool (PackageList);\r
-\r
-  //\r
-  // There will be only one FormConfig in the system\r
-  // If there is another out there, someone is trying to install us\r
-  // again.  Fail that scenario.\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiFormBrowserProtocolGuid,\r
-                  NULL,\r
-                  (VOID**)&gBrowser\r
-                  );\r
-\r
-  //\r
-  // This example does not implement worker functions\r
-  // for the NV accessor functions.  Only a callback evaluator\r
-  //\r
-  FrontPageCallback.NvRead    = NULL;\r
-  FrontPageCallback.NvWrite   = NULL;\r
-  FrontPageCallback.Callback  = FrontPageCallbackRoutine;\r
-\r
-  //\r
-  // Install protocol interface\r
-  //\r
-  FrontPageCallbackHandle = NULL;\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &FrontPageCallbackHandle,\r
-                  &gEfiFormCallbackProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &FrontPageCallback\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-ReInitStrings:\r
-  //\r
-  // BugBug: This logic is in BdsInitLanguage. It should not be in two places!\r
-  //\r
-  BufferSize = 4;\r
-  Status = gRT->GetVariable (\r
-                  L"Lang",\r
-                  &gEfiGlobalVariableGuid,\r
-                  NULL,\r
-                  &BufferSize,\r
-                  AsciiLang\r
-                  );\r
-\r
-  for (Index = 0; Index < 3; Index++) {\r
-    UnicodeLang[Index] = (CHAR16) AsciiLang[Index];\r
-  }\r
-\r
-  UnicodeLang[3] = 0;\r
-\r
-  //\r
-  // Allocate space for creation of UpdateData Buffer\r
-  //\r
-  UpdateData = AllocateZeroPool (0x1000);\r
-  ASSERT (UpdateData != NULL);\r
-\r
-  OptionList = AllocateZeroPool (0x1000);\r
-  ASSERT (OptionList != NULL);\r
-\r
-  //\r
-  // Flag update pending in FormSet\r
-  //\r
-  UpdateData->FormSetUpdate = TRUE;\r
-  //\r
-  // Register CallbackHandle data for FormSet\r
-  //\r
-  UpdateData->FormCallbackHandle = (EFI_PHYSICAL_ADDRESS) (UINTN) FrontPageCallbackHandle;\r
-  UpdateData->FormUpdate  = FALSE;\r
-  UpdateData->FormTitle   = 0;\r
-  UpdateData->DataCount   = 1;\r
-\r
-  //\r
-  // Collect the languages from what our current Language support is based on our VFR\r
-  //\r
-  Hii->GetPrimaryLanguages (Hii, gFrontPageHandle, &LanguageString);\r
-\r
-  OptionCount = 0;\r
-\r
-  //\r
-  // Try for a 512 byte Buffer\r
-  //\r
-  BufferSize = 0x200;\r
-\r
-  //\r
-  // Allocate memory for our Form binary\r
-  //\r
-  StringBuffer = AllocateZeroPool (BufferSize);\r
-  ASSERT (StringBuffer != NULL);\r
-\r
-  for (Index = 0; LanguageString[Index] != 0; Index += 3) {\r
-    Token = 0;\r
-    CopyMem (Lang, &LanguageString[Index], 6);\r
-    Lang[3] = 0;\r
-\r
-    if (!StrCmp (Lang, UnicodeLang)) {\r
-      mLastSelection = (UINT16) OptionCount;\r
-    }\r
-\r
-    Status = Hii->GetString (Hii, gStringPackHandle, 1, TRUE, Lang, &BufferSize, StringBuffer);\r
-    Hii->NewString (Hii, NULL, gStringPackHandle, &Token, StringBuffer);\r
-    CopyMem (&OptionList[OptionCount].StringToken, &Token, sizeof (UINT16));\r
-    CopyMem (&OptionList[OptionCount].Value, &OptionCount, sizeof (UINT16));\r
-    Key = 0x1234;\r
-    CopyMem (&OptionList[OptionCount].Key, &Key, sizeof (UINT16));\r
-    OptionList[OptionCount].Flags = EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS;\r
-    OptionCount++;\r
-  }\r
-\r
-  gBS->FreePool (LanguageString);\r
-\r
-  if (ReInitializeStrings) {\r
-    gBS->FreePool (StringBuffer);\r
-    gBS->FreePool (OptionList);\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  Status = CreateOneOfOpCode (\r
-            FRONT_PAGE_QUESTION_ID,                               // Question ID\r
-            FRONT_PAGE_DATA_WIDTH,                                // Data Width\r
-            (STRING_REF) STRING_TOKEN (STR_LANGUAGE_SELECT),      // Prompt Token\r
-            (STRING_REF) STRING_TOKEN (STR_LANGUAGE_SELECT_HELP), // Help Token\r
-            OptionList,       // List of Options\r
-            OptionCount,      // Number of Options\r
-            &UpdateData->Data // Data Buffer\r
-            );\r
-\r
-  //\r
-  // Assign the number of options and the oneof and endoneof op-codes to count\r
-  //\r
-  UpdateData->DataCount = (UINT8) (OptionCount + 2);\r
-\r
-  Hii->UpdateForm (Hii, gFrontPageHandle, (EFI_FORM_LABEL) 0x0002, TRUE, UpdateData);\r
-\r
-  gBS->FreePool (UpdateData);\r
-  //\r
-  // gBS->FreePool (OptionList);\r
-  //\r
-  gBS->FreePool (StringBuffer);\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-CallFrontPage (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Call the browser and display the front page\r
-\r
-Arguments:\r
-  \r
-  None\r
-  \r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  UINT8       FakeNvRamMap[1];\r
-  BOOLEAN     FrontPageMenuResetRequired;\r
-\r
-  //\r
-  // Begin waiting for USER INPUT\r
-  //\r
-  REPORT_STATUS_CODE (\r
-        EFI_PROGRESS_CODE,\r
-        (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_INPUT_WAIT)\r
-        );\r
-\r
-  FakeNvRamMap[0] = (UINT8) mLastSelection;\r
-  FrontPageMenuResetRequired = FALSE;\r
-  Status = gBrowser->SendForm (\r
-                      gBrowser,\r
-                      TRUE,                     // Use the database\r
-                      &gFrontPageHandle,        // The HII Handle\r
-                      1,\r
-                      NULL,\r
-                      FrontPageCallbackHandle,  // This is the handle that the interface to the callback was installed on\r
-                      FakeNvRamMap,\r
-                      NULL,\r
-                      &FrontPageMenuResetRequired\r
-                      );\r
-  //\r
-  // Check whether user change any option setting which needs a reset to be effective\r
-  //                      \r
-  if (FrontPageMenuResetRequired) {\r
-    EnableResetRequired ();\r
-  }\r
-\r
-  Hii->ResetStrings (Hii, gFrontPageHandle);\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-GetStringFromToken (\r
-  IN      EFI_GUID                  *ProducerGuid,\r
-  IN      STRING_REF                Token,\r
-  OUT     CHAR16                    **String\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Acquire the string associated with the ProducerGuid and return it.\r
-\r
-Arguments:\r
-  \r
-  ProducerGuid - The Guid to search the HII database for\r
-  Token - The token value of the string to extract\r
-  String - The string that is extracted\r
-  \r
-Returns:\r
-\r
-  EFI_SUCCESS - The function returns EFI_SUCCESS always.\r
-\r
---*/\r
-{\r
-  EFI_STATUS      Status;\r
-  UINT16          HandleBufferLength;\r
-  EFI_HII_HANDLE  *HiiHandleBuffer;\r
-  UINTN           StringBufferLength;\r
-  UINTN           NumberOfHiiHandles;\r
-  UINTN           Index;\r
-  UINT16          Length;\r
-  EFI_GUID        HiiGuid;\r
-\r
-  //\r
-  // Initialize params.\r
-  //\r
-  HandleBufferLength  = 0;\r
-  HiiHandleBuffer     = NULL;\r
-\r
-  //\r
-  // Get all the Hii handles\r
-  //\r
-  Status = BdsLibGetHiiHandles (Hii, &HandleBufferLength, &HiiHandleBuffer);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  //\r
-  // Get the Hii Handle that matches the StructureNode->ProducerName\r
-  //\r
-  NumberOfHiiHandles = HandleBufferLength / sizeof (EFI_HII_HANDLE);\r
-  for (Index = 0; Index < NumberOfHiiHandles; Index++) {\r
-    Length = 0;\r
-    Status = ExtractDataFromHiiHandle (\r
-              HiiHandleBuffer[Index],\r
-              &Length,\r
-              NULL,\r
-              &HiiGuid\r
-              );\r
-    if (CompareGuid (ProducerGuid, &HiiGuid)) {\r
-      break;\r
-    }\r
-  }\r
-  //\r
-  // Find the string based on the current language\r
-  //\r
-  StringBufferLength  = 0x100;\r
-  *String             = AllocateZeroPool (0x100);\r
-  Status = Hii->GetString (\r
-                  Hii,\r
-                  HiiHandleBuffer[Index],\r
-                  Token,\r
-                  FALSE,\r
-                  NULL,\r
-                  &StringBufferLength,\r
-                  *String\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (*String);\r
-    *String = GetStringById (STRING_TOKEN (STR_MISSING_STRING));\r
-  }\r
-\r
-  gBS->FreePool (HiiHandleBuffer);\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-ConvertProcessorToString (\r
-  IN  EFI_PROCESSOR_CORE_FREQUENCY_DATA *ProcessorFrequency,\r
-  OUT CHAR16                            **String\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Convert Processor Frequency Data to a string\r
-\r
-Arguments:\r
-  \r
-  ProcessorFrequency - The frequency data to process\r
-  String - The string that is created\r
-  \r
-Returns:\r
-\r
---*/\r
-{\r
-  CHAR16  *StringBuffer;\r
-  UINTN   Index;\r
-  UINT32  FreqMhz;\r
-\r
-  if (ProcessorFrequency->Exponent >= 6) {\r
-    FreqMhz = ProcessorFrequency->Value;\r
-    for (Index = 0; Index < (UINTN) (ProcessorFrequency->Exponent - 6); Index++) {\r
-      FreqMhz *= 10;\r
-    }\r
-  } else {\r
-    FreqMhz = 0;\r
-  }\r
-\r
-  StringBuffer = AllocateZeroPool (0x20);\r
-  ASSERT (StringBuffer != NULL);\r
-  Index = UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, FreqMhz / 1000, 3);\r
-  StrCat (StringBuffer, L".");\r
-  UnicodeValueToString (StringBuffer + Index + 1, PREFIX_ZERO, (FreqMhz % 1000) / 10, 2);\r
-  StrCat (StringBuffer, L" GHz");\r
-\r
-  *String = (CHAR16 *) StringBuffer;\r
-\r
-  return ;\r
-}\r
-\r
-VOID\r
-ConvertMemorySizeToString (\r
-  IN  UINT32          MemorySize,\r
-  OUT CHAR16          **String\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Convert Memory Size to a string\r
-\r
-Arguments:\r
-  \r
-  MemorySize - The size of the memory to process\r
-  String - The string that is created\r
-  \r
-Returns:\r
-\r
---*/\r
-{\r
-  CHAR16  *StringBuffer;\r
-\r
-  StringBuffer = AllocateZeroPool (0x20);\r
-  ASSERT (StringBuffer != NULL);\r
-  UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, MemorySize, 6);\r
-  StrCat (StringBuffer, L" MB RAM");\r
-\r
-  *String = (CHAR16 *) StringBuffer;\r
-\r
-  return ;\r
-}\r
-\r
-VOID\r
-UpdateFrontPageStrings (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Update the banner information for the Front Page based on DataHub information\r
-\r
-Arguments:\r
-  \r
-  None\r
-  \r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_STATUS                        Status;\r
-  STRING_REF                        TokenToUpdate;\r
-  CHAR16                            *NewString;\r
-  UINT64                            MonotonicCount;\r
-  EFI_DATA_HUB_PROTOCOL             *DataHub;\r
-  EFI_DATA_RECORD_HEADER            *Record;\r
-  EFI_SUBCLASS_TYPE1_HEADER         *DataHeader;\r
-  EFI_MISC_BIOS_VENDOR_DATA         *BiosVendor;\r
-  EFI_MISC_SYSTEM_MANUFACTURER_DATA *SystemManufacturer;\r
-  EFI_PROCESSOR_VERSION_DATA        *ProcessorVersion;\r
-  EFI_PROCESSOR_CORE_FREQUENCY_DATA *ProcessorFrequency;\r
-  EFI_MEMORY_ARRAY_START_ADDRESS_DATA *MemoryArray;\r
-  CHAR8                             LangCode[3];\r
-  CHAR16                            Lang[3];\r
-  UINTN                             Size;\r
-  UINTN                             Index;\r
-  BOOLEAN                           Find[5];\r
-\r
-  ZeroMem (Find, sizeof (Find));\r
-\r
-  //\r
-  // Update Front Page strings\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiDataHubProtocolGuid,\r
-                  NULL,\r
-                  (VOID**)&DataHub\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  Size = 3;\r
-\r
-  Status = gRT->GetVariable (\r
-                  L"Lang",\r
-                  &gEfiGlobalVariableGuid,\r
-                  NULL,\r
-                  &Size,\r
-                  LangCode\r
-                  );\r
-\r
-  for (Index = 0; Index < 3; Index++) {\r
-    Lang[Index] = (CHAR16) LangCode[Index];\r
-  }\r
-\r
-  MonotonicCount  = 0;\r
-  Record          = NULL;\r
-  do {\r
-    Status = DataHub->GetNextRecord (DataHub, &MonotonicCount, NULL, &Record);\r
-    if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {\r
-      DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *) (Record + 1);\r
-      if (CompareGuid (&Record->DataRecordGuid, &mMiscSubClass) &&\r
-          (DataHeader->RecordType == EFI_MISC_BIOS_VENDOR_RECORD_NUMBER)\r
-          ) {\r
-        BiosVendor = (EFI_MISC_BIOS_VENDOR_DATA *) (DataHeader + 1);\r
-        GetStringFromToken (&Record->ProducerName, BiosVendor->BiosVersion, &NewString);\r
-        TokenToUpdate = (STRING_REF) STR_FRONT_PAGE_BIOS_VERSION;\r
-        Hii->NewString (Hii, Lang, gFrontPageHandle, &TokenToUpdate, NewString);\r
-        gBS->FreePool (NewString);\r
-        Find[0] = TRUE;\r
-      }\r
-\r
-      if (CompareGuid (&Record->DataRecordGuid, &mMiscSubClass) &&\r
-          (DataHeader->RecordType == EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER)\r
-          ) {\r
-        SystemManufacturer = (EFI_MISC_SYSTEM_MANUFACTURER_DATA *) (DataHeader + 1);\r
-        GetStringFromToken (&Record->ProducerName, SystemManufacturer->SystemProductName, &NewString);\r
-        TokenToUpdate = (STRING_REF) STR_FRONT_PAGE_COMPUTER_MODEL;\r
-        Hii->NewString (Hii, Lang, gFrontPageHandle, &TokenToUpdate, NewString);\r
-        gBS->FreePool (NewString);\r
-        Find[1] = TRUE;\r
-      }\r
-\r
-      if (CompareGuid (&Record->DataRecordGuid, &mProcessorSubClass) &&\r
-          (DataHeader->RecordType == ProcessorVersionRecordType)\r
-          ) {\r
-        ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *) (DataHeader + 1);\r
-        GetStringFromToken (&Record->ProducerName, *ProcessorVersion, &NewString);\r
-        TokenToUpdate = (STRING_REF) STR_FRONT_PAGE_CPU_MODEL;\r
-        Hii->NewString (Hii, Lang, gFrontPageHandle, &TokenToUpdate, NewString);\r
-        gBS->FreePool (NewString);\r
-        Find[2] = TRUE;\r
-      }\r
-\r
-      if (CompareGuid (&Record->DataRecordGuid, &mProcessorSubClass) &&\r
-          (DataHeader->RecordType == ProcessorCoreFrequencyRecordType)\r
-          ) {\r
-        ProcessorFrequency = (EFI_PROCESSOR_CORE_FREQUENCY_DATA *) (DataHeader + 1);\r
-        ConvertProcessorToString (ProcessorFrequency, &NewString);\r
-        TokenToUpdate = (STRING_REF) STR_FRONT_PAGE_CPU_SPEED;\r
-        Hii->NewString (Hii, Lang, gFrontPageHandle, &TokenToUpdate, NewString);\r
-        gBS->FreePool (NewString);\r
-        Find[3] = TRUE;\r
-      }\r
-\r
-      if (CompareGuid (&Record->DataRecordGuid, &mMemorySubClass) &&\r
-          (DataHeader->RecordType == EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER)\r
-          ) {\r
-        MemoryArray = (EFI_MEMORY_ARRAY_START_ADDRESS_DATA *) (DataHeader + 1);\r
-        ConvertMemorySizeToString((UINT32)(RShiftU64((MemoryArray->MemoryArrayEndAddress - \r
-                                  MemoryArray->MemoryArrayStartAddress + 1), 20)),\r
-                                  &NewString);\r
-        TokenToUpdate = (STRING_REF) STR_FRONT_PAGE_MEMORY_SIZE;\r
-        Hii->NewString (Hii, Lang, gFrontPageHandle, &TokenToUpdate, NewString);\r
-        gBS->FreePool (NewString);\r
-        Find[4] = TRUE;\r
-      }\r
-    }\r
-  } while (!EFI_ERROR (Status) && (MonotonicCount != 0) && !(Find[0] && Find[1] && Find[2] && Find[3] && Find[4]));\r
-\r
-  return ;\r
-}\r
-\r
-VOID\r
-PlatformBdsEnterFrontPage (\r
-  IN UINT16                       TimeoutDefault,\r
-  IN BOOLEAN                      ConnectAllHappened\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  This function is the main entry of the platform setup entry.\r
-  The function will present the main menu of the system setup, \r
-  this is the platform reference part and can be customize.\r
-  \r
-Arguments:\r
-  TimeoutDefault     - The fault time out value before the system\r
-                       continue to boot.\r
-  ConnectAllHappened - The indicater to check if the connect all have\r
-                       already happended.\r
-  \r
-Returns:\r
-  None\r
-\r
---*/\r
-{\r
-  EFI_STATUS                    Status;\r
-  EFI_HII_UPDATE_DATA           *UpdateData;\r
-  EFI_CONSOLE_CONTROL_PROTOCOL  *ConsoleControl;\r
-\r
-  //\r
-  // Indicate if we need connect all in the platform setup\r
-  //\r
-  if (ConnectAllHappened) {\r
-    gConnectAllHappened = TRUE;\r
-  }\r
-  //\r
-  // Allocate space for creation of Buffer\r
-  //\r
-  UpdateData = AllocateZeroPool (0x1000);\r
-  ASSERT (UpdateData != NULL);\r
-\r
-  UpdateData->FormSetUpdate       = FALSE;\r
-  UpdateData->FormCallbackHandle  = 0;\r
-  UpdateData->FormUpdate          = FALSE;\r
-  UpdateData->FormTitle           = 0;\r
-  UpdateData->DataCount           = 1;\r
-\r
-  //\r
-  // Remove Banner Op-code if any at this label\r
-  //\r
-  Hii->UpdateForm (Hii, gFrontPageHandle, (EFI_FORM_LABEL) 0xFFFF, FALSE, UpdateData);\r
-\r
-  //\r
-  // Create Banner Op-code which reflects correct timeout value\r
-  //\r
-  CreateBannerOpCode (\r
-    STRING_TOKEN (STR_TIME_OUT_PROMPT),\r
-    TimeoutDefault,\r
-    (UINT8) EFI_IFR_BANNER_TIMEOUT,\r
-    &UpdateData->Data\r
-    );\r
-\r
-  //\r
-  // Add Banner Op-code at this label\r
-  //\r
-  Hii->UpdateForm (Hii, gFrontPageHandle, (EFI_FORM_LABEL) 0xFFFF, TRUE, UpdateData);\r
-\r
-  do {\r
-\r
-    InitializeFrontPage (TRUE);\r
-\r
-    //\r
-    // Update Front Page strings\r
-    //\r
-    UpdateFrontPageStrings ();\r
-\r
-    gCallbackKey = 0;\r
-    PERF_START (0, "BdsTimeOut", "BDS", 0);\r
-    Status = CallFrontPage ();\r
-    PERF_END (0, "BdsTimeOut", "BDS", 0);\r
-\r
-    //\r
-    // If gCallbackKey is greater than 1 and less or equal to 5,\r
-    // it will lauch configuration utilities.\r
-    // 2 = set language\r
-    // 3 = boot manager\r
-    // 4 = device manager\r
-    // 5 = boot maintainenance manager\r
-    //\r
-    if ((gCallbackKey > 0x0001) && (gCallbackKey <= 0x0005)) {\r
-      REPORT_STATUS_CODE (\r
-            EFI_PROGRESS_CODE,\r
-            (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_USER_SETUP)\r
-            );\r
-    }\r
-    //\r
-    // Based on the key that was set, we can determine what to do\r
-    //\r
-    switch (gCallbackKey) {\r
-    //\r
-    // The first 4 entries in the Front Page are to be GUARANTEED to remain constant so IHV's can\r
-    // describe to their customers in documentation how to find their setup information (namely\r
-    // under the device manager and specific buckets)\r
-    //\r
-    // These entries consist of the Continue, Select language, Boot Manager, and Device Manager\r
-    //\r
-    case 0x0001:\r
-      //\r
-      // User hit continue\r
-      //\r
-      break;\r
-\r
-    case 0x0002:\r
-      //\r
-      // User made a language setting change - display front page again\r
-      //\r
-      break;\r
-\r
-    case 0x0003:\r
-      //\r
-      // User chose to run the Boot Manager\r
-      //\r
-      CallBootManager ();\r
-      break;\r
-\r
-    case 0x0004:\r
-      //\r
-      // Display the Device Manager\r
-      //\r
-      do {\r
-        CallDeviceManager();\r
-      } while (gCallbackKey == 4);\r
-      break;\r
-\r
-    case 0x0005:\r
-      //\r
-      // Display the Boot Maintenance Manager\r
-      //\r
-      BdsStartBootMaint ();\r
-      break;\r
-    }\r
-\r
-  } while ((Status == EFI_SUCCESS) && (gCallbackKey != 1));\r
-\r
-  //\r
-  //Will leave browser, check any reset required change is applied? if yes, reset system\r
-  //\r
-  SetupResetReminder ();\r
-  \r
-  //\r
-  // Automatically load current entry\r
-  // Note: The following lines of code only execute when Auto boot\r
-  // takes affect\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiConsoleControlProtocolGuid, NULL, (VOID**)&ConsoleControl);\r
-  ConsoleControl->SetMode (ConsoleControl, EfiConsoleControlScreenText);\r
-\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPage.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPage.h
deleted file mode 100644 (file)
index 5c33252..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  FrontPage.h\r
-\r
-Abstract:\r
-\r
-  FrontPage routines to handle the callbacks and browser calls\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _FRONT_PAGE_H\r
-#define _FRONT_PAGE_H\r
-\r
-#include "Generic/DeviceMngr/DeviceManager.h"\r
-#include "Generic/BootMaint/BootMaint.h"\r
-#include "Generic/BootMngr/BootManager.h"\r
-\r
-//\r
-// This is the VFR compiler generated header file which defines the\r
-// string identifiers.\r
-//\r
-#include "BdsStrDefs.h"\r
-#define EFI_DISK_DEVICE_CLASS           0x01\r
-#define EFI_VIDEO_DEVICE_CLASS          0x02\r
-#define EFI_NETWORK_DEVICE_CLASS        0x04\r
-#define EFI_INPUT_DEVICE_CLASS          0x08\r
-#define EFI_ON_BOARD_DEVICE_CLASS       0x10\r
-#define EFI_OTHER_DEVICE_CLASS          0x20\r
-#define EFI_VBIOS_CLASS                 0x40\r
-\r
-#define SET_VIDEO_BIOS_TYPE_QUESTION_ID 0x00\r
-\r
-#pragma pack(1)\r
-typedef struct {\r
-  UINT8 VideoBIOS;\r
-} MyDevMgrIfrNVData;\r
-#pragma pack()\r
-\r
-#define EFI_FP_CALLBACK_DATA_SIGNATURE  EFI_SIGNATURE_32 ('F', 'P', 'C', 'B')\r
-#define EFI_FP_CALLBACK_DATA_FROM_THIS(a) \\r
-  CR (a, \\r
-      EFI_FRONTPAGE_CALLBACK_INFO, \\r
-      DevMgrCallback, \\r
-      EFI_FP_CALLBACK_DATA_SIGNATURE \\r
-      )\r
-\r
-typedef struct {\r
-  UINTN                       Signature;\r
-  MyDevMgrIfrNVData           Data;\r
-  EFI_HII_HANDLE              DevMgrHiiHandle;\r
-  EFI_HANDLE                  CallbackHandle;\r
-  EFI_FORM_CALLBACK_PROTOCOL  DevMgrCallback;\r
-} EFI_FRONTPAGE_CALLBACK_INFO;\r
-\r
-//\r
-// These are the VFR compiler generated data representing our VFR data.\r
-//\r
-// BugBug: we should put g in front of these tool generated globals.\r
-//         maybe even gVrf would be a better prefix\r
-//\r
-extern UINT8  FrontPageVfrBin[];\r
-extern UINT8  FrontPageStringsStr[];\r
-extern UINT8  DeviceManagerVfrBin[];\r
-extern UINT8  DeviceManagerStringsStr[];\r
-\r
-#define FRONT_PAGE_QUESTION_ID  0x0000\r
-#define FRONT_PAGE_DATA_WIDTH   0x01\r
-\r
-EFI_STATUS\r
-InitializeFrontPage (\r
-  IN BOOLEAN    ReInitializeStrings\r
-  );\r
-\r
-BOOLEAN\r
-TimeCompare (\r
-  IN EFI_TIME               *FirstTime,\r
-  IN EFI_TIME               *SecondTime\r
-  );\r
-\r
-VOID\r
-PlatformBdsEnterFrontPage (\r
-  IN UINT16                 TimeoutDefault,\r
-  IN BOOLEAN                ConnectAllHappened\r
-  );\r
-\r
-#endif // _FRONT_PAGE_H_\r
-\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPageStrings.uni b/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPageStrings.uni
deleted file mode 100644 (file)
index 76dbdcf..0000000
Binary files a/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPageStrings.uni and /dev/null differ
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPageVfr.Vfr b/EdkUnixPkg/Dxe/PlatformBds/Generic/FrontPageVfr.Vfr
deleted file mode 100644 (file)
index 77efd2d..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-// *++\r
-//\r
-// Copyright (c) 2006, Intel Corporation                                                         \r
-// All rights reserved. This program and the accompanying materials                          \r
-// are licensed and made available under the terms and conditions of the BSD License         \r
-// which accompanies this distribution.  The full text of the license may be found at        \r
-// http://opensource.org/licenses/bsd-license.php                                            \r
-//                                                                                           \r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-// \r
-// Module Name:\r
-//\r
-//   FrontPageVfr.vfr \r
-// \r
-// Abstract:\r
-// \r
-//   Browser formset.\r
-// \r
-// Revision History: \r
-// \r
-// --*/\r
-\r
-#include "BdsStrDefs.h"\r
-\r
-#define FORMSET_GUID  { 0x9e0c30bc, 0x3f06, 0x4ba6, { 0x82, 0x88, 0x9, 0x17, 0x9b, 0x85, 0x5d, 0xbe } }\r
-\r
-#define FRONT_PAGE_ITEM_ONE    0x0001\r
-#define FRONT_PAGE_ITEM_TWO    0x0002\r
-#define FRONT_PAGE_ITEM_THREE  0x0003\r
-#define FRONT_PAGE_ITEM_FOUR   0x0004\r
-#define FRONT_PAGE_ITEM_FIVE   0x0005\r
-\r
-#define FRONT_PAGE_TIMEOUT     0xFFFF\r
-#define FRONT_PAGE_CLASS       0x0000\r
-#define FRONT_PAGE_SUBCLASS    0x0002\r
-\r
-formset \r
-  guid     = FORMSET_GUID,\r
-  title    = STRING_TOKEN(STR_FRONT_PAGE_TITLE),  \r
-  help     = STRING_TOKEN(STR_NULL_STRING),\r
-  class    = FRONT_PAGE_CLASS,      \r
-  subclass = FRONT_PAGE_SUBCLASS,\r
-\r
-  form formid = 0x1000,\r
-       title  = STRING_TOKEN(STR_FRONT_PAGE_TITLE);\r
-\r
-    banner \r
-      title = STRING_TOKEN(STR_FRONT_PAGE_COMPUTER_MODEL),\r
-      line  0,\r
-      align left;\r
-    \r
-    banner \r
-      title = STRING_TOKEN(STR_FRONT_PAGE_CPU_MODEL),\r
-      line  1,\r
-      align left;\r
-    \r
-    banner \r
-      title = STRING_TOKEN(STR_FRONT_PAGE_CPU_SPEED),\r
-      line  1,\r
-      align right;\r
-    \r
-    banner \r
-      title = STRING_TOKEN(STR_FRONT_PAGE_BIOS_VERSION),\r
-      line  2,\r
-      align left;\r
-    \r
-    banner \r
-      title = STRING_TOKEN(STR_FRONT_PAGE_MEMORY_SIZE),\r
-      line  2,\r
-      align right;\r
-\r
-//    banner \r
-//      title = STRING_TOKEN(STR_FRONT_PAGE_BANNER_0_LEFT),\r
-//      line  0,\r
-//      align left;\r
-    \r
-//    banner \r
-//      title = STRING_TOKEN(STR_FRONT_PAGE_BANNER_0_RIGHT),\r
-//      line  0,\r
-//      align right;\r
-    \r
-//    banner \r
-//      title = STRING_TOKEN(STR_FRONT_PAGE_BANNER_1_LEFT),\r
-//      line  1,\r
-//      align left;\r
-    \r
-//    banner \r
-//      title = STRING_TOKEN(STR_FRONT_PAGE_BANNER_1_RIGHT),\r
-//      line  1,\r
-//      align right;\r
-    \r
-//    banner \r
-//      title = STRING_TOKEN(STR_FRONT_PAGE_BANNER_2_LEFT),\r
-//      line  2,\r
-//      align left;\r
-    \r
-//    banner \r
-//      title = STRING_TOKEN(STR_FRONT_PAGE_BANNER_3_LEFT),\r
-//      line  3,\r
-//      align left;\r
-\r
-    goto FRONT_PAGE_ITEM_ONE, \r
-      prompt  = STRING_TOKEN(STR_CONTINUE_PROMPT), \r
-      help    = STRING_TOKEN(STR_CONTINUE_HELP),\r
-      flags   = INTERACTIVE | NV_ACCESS, \r
-      key     = 0x0001;\r
-\r
-    label FRONT_PAGE_ITEM_TWO;\r
-    //\r
-    // This is where we will dynamically add a OneOf type op-code to select Languages from the\r
-    // currently available choices\r
-    //\r
-\r
-    goto FRONT_PAGE_ITEM_THREE, \r
-      prompt  = STRING_TOKEN(STR_BOOT_MANAGER), \r
-      help    = STRING_TOKEN(STR_BOOT_MANAGER_HELP),\r
-      flags   = INTERACTIVE | NV_ACCESS, \r
-      key     = 0x1064;\r
-\r
-    goto FRONT_PAGE_ITEM_FOUR, \r
-      prompt  = STRING_TOKEN(STR_DEVICE_MANAGER), \r
-      help    = STRING_TOKEN(STR_DEVICE_MANAGER_HELP),\r
-      flags   = INTERACTIVE | NV_ACCESS, \r
-      key     = 0x8567;\r
-\r
-    goto FRONT_PAGE_ITEM_FIVE, \r
-      prompt  = STRING_TOKEN(STR_BOOT_MAINT_MANAGER), \r
-      help    = STRING_TOKEN(STR_BOOT_MAINT_MANAGER_HELP),\r
-      flags   = INTERACTIVE | NV_ACCESS, \r
-      key     = 0x9876;\r
-\r
-    label FRONT_PAGE_TIMEOUT;\r
-//  If one wanted to hard-code a value one could do it below, but our implementation follows EFI architecture\r
-//  and honors the TimeOut NV variable\r
-//\r
-//    banner\r
-//      title = STRING_TOKEN(STR_TIME_OUT_PROMPT),\r
-//      timeout = 0x000A;\r
-    \r
-  endform;\r
-\r
-  form formid = FRONT_PAGE_ITEM_ONE,\r
-       title  = STRING_TOKEN(STR_FRONT_PAGE_TITLE);  \r
-  endform;\r
-\r
-  form formid = FRONT_PAGE_ITEM_THREE,\r
-       title  = STRING_TOKEN(STR_FRONT_PAGE_TITLE);  \r
-  endform;\r
-\r
-  form formid = FRONT_PAGE_ITEM_FOUR,\r
-       title  = STRING_TOKEN(STR_FRONT_PAGE_TITLE);  \r
-  endform;\r
-\r
-  form formid = FRONT_PAGE_ITEM_FIVE,\r
-       title  = STRING_TOKEN(STR_FRONT_PAGE_TITLE);  \r
-  endform;\r
-\r
-endformset;\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/Language.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/Language.c
deleted file mode 100644 (file)
index 5091f20..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  language.c\r
-\r
-Abstract:\r
-\r
- Language settings\r
-  \r
-Revision History\r
-\r
---*/\r
-\r
-#include "String.h"\r
-#include "Language.h"\r
-\r
-#define NARROW_GLYPH_NUMBER 8\r
-#define WIDE_GLYPH_NUMBER   75\r
-\r
-//\r
-// Default language code, currently is English\r
-//\r
-CHAR8 *mDefaultLangCode = "eng";\r
-\r
-typedef struct {\r
-  EFI_HII_FONT_PACK FixedLength;\r
-  EFI_NARROW_GLYPH  NarrowArray[NARROW_GLYPH_NUMBER];\r
-  EFI_WIDE_GLYPH    WideArray[WIDE_GLYPH_NUMBER];\r
-} FONT_PACK;\r
-\r
-FONT_PACK mFontPack = {\r
-  {\r
-    {\r
-      sizeof (EFI_HII_FONT_PACK) + (NARROW_GLYPH_NUMBER * sizeof (EFI_NARROW_GLYPH)) + (WIDE_GLYPH_NUMBER * sizeof (EFI_WIDE_GLYPH)),\r
-      EFI_HII_FONT\r
-    },\r
-    NARROW_GLYPH_NUMBER,\r
-    WIDE_GLYPH_NUMBER\r
-  },\r
-  {     // Narrow Glyphs\r
-    {\r
-      0x05d0,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x4E,\r
-        0x6E,\r
-        0x62,\r
-        0x32,\r
-        0x32,\r
-        0x3C,\r
-        0x68,\r
-        0x4C,\r
-        0x4C,\r
-        0x46,\r
-        0x76,\r
-        0x72,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d1,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x78,\r
-        0x7C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x7E,\r
-        0x7E,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d2,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x78,\r
-        0x7C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x1C,\r
-        0x3E,\r
-        0x66,\r
-        0x66,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d3,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x7E,\r
-        0x7E,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d4,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x7C,\r
-        0x7E,\r
-        0x06,\r
-        0x06,\r
-        0x06,\r
-        0x06,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d5,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x3C,\r
-        0x3C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d6,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x38,\r
-        0x38,\r
-        0x1E,\r
-        0x1E,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x0000,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    }\r
-  },\r
-  {     // Wide Glyphs\r
-    {\r
-      0x0020,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      },\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      },\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },  //\r
-  }\r
-};\r
-\r
-VOID\r
-ExportFonts (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Routine to export glyphs to the HII database.  This is in addition to whatever is defined in the Graphics Console driver.\r
-\r
-Arguments:\r
-  None\r
-            \r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_HII_HANDLE    HiiHandle;\r
-  EFI_HII_PACKAGES  *PackageList;\r
-\r
-  PackageList = PreparePackages (1, NULL, &mFontPack);\r
-  //\r
-  // Register our Fonts into the global database\r
-  //\r
-  HiiHandle = 0;\r
-  Hii->NewPack (Hii, PackageList, &HiiHandle);\r
-\r
-  gBS->FreePool (PackageList);\r
-}\r
-\r
-VOID\r
-InitializeLanguage (\r
-  BOOLEAN LangCodesSettingRequired\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Determine the current language that will be used \r
-  based on language related EFI Variables\r
-\r
-Arguments:\r
-  LangCodesSettingRequired - If required to set LangCode variable\r
-            \r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  UINTN       Index;\r
-  UINTN       Size;\r
-  CHAR8       LangCode[ISO_639_2_ENTRY_SIZE];\r
-  CHAR8       *LangCodes;\r
-  CHAR16      *LanguageString;\r
-\r
-  LanguageString  = NULL;\r
-  LangCodes       = NULL;\r
-\r
-  ExportFonts ();\r
-\r
-  //\r
-  // Collect the languages from what our current Language support is based on our VFR\r
-  //\r
-  Hii->GetPrimaryLanguages (Hii, gStringPackHandle, &LanguageString);\r
-\r
-  LangCodes = AllocatePool (StrLen (LanguageString));\r
-  ASSERT (LangCodes);\r
-\r
-  //\r
-  // Convert LanguageString from Unicode to EFI defined ASCII LangCodes\r
-  //\r
-  for (Index = 0; LanguageString[Index] != 0x0000; Index++) {\r
-    LangCodes[Index] = (CHAR8) LanguageString[Index];\r
-  }\r
-\r
-  LangCodes[Index] = 0;\r
-\r
-  if (LangCodesSettingRequired) {\r
-    Status = gRT->SetVariable (\r
-                    L"LangCodes",\r
-                    &gEfiGlobalVariableGuid,\r
-                    EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                    AsciiStrLen (LangCodes),\r
-                    LangCodes\r
-                    );\r
-  }\r
-  //\r
-  // Find current LangCode from Lang NV Variable\r
-  //\r
-  Size = ISO_639_2_ENTRY_SIZE;\r
-  Status = gRT->GetVariable (\r
-                  L"Lang",\r
-                  &gEfiGlobalVariableGuid,\r
-                  NULL,\r
-                  &Size,\r
-                  &LangCode\r
-                  );\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    Status = EFI_NOT_FOUND;\r
-    for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
-      if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
-        Status = EFI_SUCCESS;\r
-        break;\r
-      }\r
-    }\r
-  }\r
-  //\r
-  // If we cannot get language code from Lang variable,\r
-  // or LangCode cannot be found from language table,\r
-  // set the mDefaultLangCode to Lang variable.\r
-  //\r
-  if (EFI_ERROR (Status)) {\r
-    Status = gRT->SetVariable (\r
-                    L"Lang",\r
-                    &gEfiGlobalVariableGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                    ISO_639_2_ENTRY_SIZE,\r
-                    mDefaultLangCode\r
-                    );\r
-  }\r
-\r
-  if (LangCodes) {\r
-    gBS->FreePool (LangCodes);\r
-  }\r
-\r
-  if (LanguageString != NULL) {\r
-    gBS->FreePool (LanguageString);\r
-  }\r
-\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/Language.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/Language.h
deleted file mode 100644 (file)
index 6b6d887..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Language.h\r
-\r
-Abstract:\r
-  \r
-  Language setting\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _LANGUAGE_H\r
-#define _LANGUAGE_H\r
-\r
-#ifndef ISO_639_2_ENTRY_SIZE\r
-#define ISO_639_2_ENTRY_SIZE  3\r
-#endif\r
-\r
-VOID\r
-InitializeLanguage (\r
-  BOOLEAN LangCodesSettingRequired\r
-  );\r
-\r
-#endif // _LANGUAGE_H_\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/MemoryTest.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/MemoryTest.c
deleted file mode 100644 (file)
index f16341b..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  MemoryTest.c\r
-\r
-Abstract:\r
-\r
-  Perform the platform memory test\r
-\r
---*/\r
-\r
-#include "Bds.h"\r
-#include "BdsPlatform.h"\r
-#include "String.h"\r
-\r
-//\r
-// BDS Platform Functions\r
-//\r
-EFI_STATUS\r
-PlatformBdsShowProgress (\r
-  IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,\r
-  IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,\r
-  IN CHAR16        *Title,\r
-  IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,\r
-  IN UINTN         Progress,\r
-  IN UINTN         PreviousValue\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Show progress bar with title above it. It only works in UGA mode.\r
-\r
-Arguments:\r
-  \r
-  TitleForeground - Foreground color for Title.\r
-  TitleBackground - Background color for Title.\r
-  Title           - Title above progress bar.\r
-  ProgressColor   - Progress bar color.\r
-  Progress        - Progress (0-100)\r
-\r
-Returns: \r
-  \r
-  EFI_STATUS      - Success update the progress bar\r
-\r
---*/\r
-{\r
-  EFI_STATUS            Status;\r
-  EFI_GRAPHICS_OUTPUT_PROTOCOL   *GraphicsOutput;\r
-  EFI_UGA_DRAW_PROTOCOL *UgaDraw;\r
-  UINT32                SizeOfX;\r
-  UINT32                SizeOfY;\r
-  UINT32                ColorDepth;\r
-  UINT32                RefreshRate;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL  Color;\r
-  UINTN                 BlockHeight;\r
-  UINTN                 BlockWidth;\r
-  UINTN                 BlockNum;\r
-  UINTN                 PosX;\r
-  UINTN                 PosY;\r
-  UINTN                 Index;\r
-\r
-  if (Progress > 100) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  UgaDraw = NULL;\r
-  Status = gBS->HandleProtocol (\r
-                  gST->ConsoleOutHandle,\r
-                  &gEfiGraphicsOutputProtocolGuid,\r
-                  (VOID**)&GraphicsOutput\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    GraphicsOutput = NULL;\r
-\r
-    Status = gBS->HandleProtocol (\r
-                    gST->ConsoleOutHandle,\r
-                    &gEfiUgaDrawProtocolGuid,\r
-                    (VOID**)&UgaDraw\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      return EFI_UNSUPPORTED;\r
-    }\r
-  }\r
-\r
-  if (GraphicsOutput != NULL) {\r
-    SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;\r
-    SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;\r
-  } else {\r
-    Status = UgaDraw->GetMode (\r
-                        UgaDraw,\r
-                        &SizeOfX,\r
-                        &SizeOfY,\r
-                        &ColorDepth,\r
-                        &RefreshRate\r
-                        );\r
-    if (EFI_ERROR (Status)) {\r
-      return EFI_UNSUPPORTED;\r
-    }\r
-  }\r
-\r
-  BlockWidth  = SizeOfX / 100;\r
-  BlockHeight = SizeOfY / 50;\r
-\r
-  BlockNum    = Progress;\r
-\r
-  PosX        = 0;\r
-  PosY        = SizeOfY * 48 / 50;\r
-\r
-  if (BlockNum == 0) {\r
-    //\r
-    // Clear progress area\r
-    //\r
-    SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);\r
-\r
-    if (GraphicsOutput != NULL) {\r
-      Status = GraphicsOutput->Blt (\r
-                          GraphicsOutput,\r
-                          &Color,\r
-                          EfiBltVideoFill,\r
-                          0,\r
-                          0,\r
-                          0,\r
-                          PosY - GLYPH_HEIGHT - 1,\r
-                          SizeOfX,\r
-                          SizeOfY - (PosY - GLYPH_HEIGHT - 1),\r
-                          SizeOfX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
-                          );\r
-    } else {\r
-      Status = UgaDraw->Blt (\r
-                          UgaDraw,\r
-                          (EFI_UGA_PIXEL *) &Color,\r
-                          EfiUgaVideoFill,\r
-                          0,\r
-                          0,\r
-                          0,\r
-                          PosY - GLYPH_HEIGHT - 1,\r
-                          SizeOfX,\r
-                          SizeOfY - (PosY - GLYPH_HEIGHT - 1),\r
-                          SizeOfX * sizeof (EFI_UGA_PIXEL)\r
-                          );\r
-    }\r
-  }\r
-  //\r
-  // Show progress by drawing blocks\r
-  //\r
-  for (Index = PreviousValue; Index < BlockNum; Index++) {\r
-    PosX = Index * BlockWidth;\r
-    if (GraphicsOutput != NULL) {\r
-      Status = GraphicsOutput->Blt (\r
-                          GraphicsOutput,\r
-                          &ProgressColor,\r
-                          EfiBltVideoFill,\r
-                          0,\r
-                          0,\r
-                          PosX,\r
-                          PosY,\r
-                          BlockWidth - 1,\r
-                          BlockHeight,\r
-                          (BlockWidth) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
-                          );\r
-    } else {\r
-      Status = UgaDraw->Blt (\r
-                          UgaDraw,\r
-                          (EFI_UGA_PIXEL *) &ProgressColor,\r
-                          EfiUgaVideoFill,\r
-                          0,\r
-                          0,\r
-                          PosX,\r
-                          PosY,\r
-                          BlockWidth - 1,\r
-                          BlockHeight,\r
-                          (BlockWidth) * sizeof (EFI_UGA_PIXEL)\r
-                          );\r
-    }\r
-  }\r
-\r
-  PrintXY (\r
-    (SizeOfX - StrLen (Title) * GLYPH_WIDTH) / 2,\r
-    PosY - GLYPH_HEIGHT - 1,\r
-    &TitleForeground,\r
-    &TitleBackground,\r
-    Title\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-BdsMemoryTest (\r
-  IN EXTENDMEM_COVERAGE_LEVEL Level\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Perform the memory test base on the memory test intensive level, \r
-  and update the memory resource.\r
-\r
-Arguments:\r
-  \r
-  Level  - The memory test intensive level.\r
-\r
-Returns: \r
-  \r
-  EFI_STATUS      - Success test all the system memory and update\r
-                    the memory resource\r
-                    \r
---*/\r
-{\r
-  EFI_STATUS                        Status;\r
-  EFI_STATUS                        InitStatus;\r
-  EFI_STATUS                        KeyStatus;\r
-  EFI_STATUS                        ReturnStatus;\r
-  BOOLEAN                           RequireSoftECCInit;\r
-  EFI_GENERIC_MEMORY_TEST_PROTOCOL  *GenMemoryTest;\r
-  UINT64                            TestedMemorySize;\r
-  UINT64                            TotalMemorySize;\r
-  UINTN                             TestPercent;\r
-  UINT64                            PreviousValue;\r
-  BOOLEAN                           ErrorOut;\r
-  BOOLEAN                           TestAbort;\r
-  EFI_INPUT_KEY                     Key;\r
-  CHAR16                            StrPercent[16];\r
-  CHAR16                            *StrTotalMemory;\r
-  CHAR16                            *Pos;\r
-  CHAR16                            *TmpStr;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL     Foreground;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL     Background;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL     Color;\r
-  UINT8                             Value;\r
-  UINTN                             DataSize;\r
-\r
-  ReturnStatus = EFI_SUCCESS;\r
-  ZeroMem (&Key, sizeof (EFI_INPUT_KEY));\r
-\r
-  Pos = AllocatePool (128);\r
-\r
-  if (Pos == NULL) {\r
-    return ReturnStatus;\r
-  }\r
-\r
-  StrTotalMemory    = Pos;\r
-\r
-  TestedMemorySize  = 0;\r
-  TotalMemorySize   = 0;\r
-  PreviousValue     = 0;\r
-  ErrorOut          = FALSE;\r
-  TestAbort         = FALSE;\r
-\r
-  SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);\r
-  SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);\r
-  SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);\r
-\r
-  RequireSoftECCInit = FALSE;\r
-\r
-  gST->ConOut->ClearScreen (gST->ConOut);\r
-  gST->ConOut->SetAttribute (gST->ConOut, EFI_YELLOW | EFI_BRIGHT);\r
-  gST->ConOut->EnableCursor (gST->ConOut, FALSE);\r
-\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiGenericMemTestProtocolGuid,\r
-                  NULL,\r
-                  (VOID**)&GenMemoryTest\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (Pos);\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  InitStatus = GenMemoryTest->MemoryTestInit (\r
-                                GenMemoryTest,\r
-                                Level,\r
-                                &RequireSoftECCInit\r
-                                );\r
-  if (InitStatus == EFI_NO_MEDIA) {\r
-    //\r
-    // The PEI codes also have the relevant memory test code to check the memory,\r
-    // it can select to test some range of the memory or all of them. If PEI code\r
-    // checks all the memory, this BDS memory test will has no not-test memory to\r
-    // do the test, and then the status of EFI_NO_MEDIA will be returned by\r
-    // "MemoryTestInit". So it does not need to test memory again, just return.\r
-    //\r
-    gBS->FreePool (Pos);\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  gST->ConOut->SetCursorPosition (gST->ConOut, 0, 2);\r
-  TmpStr = GetStringById (STRING_TOKEN (STR_ESC_TO_SKIP_MEM_TEST));\r
-\r
-  if (TmpStr != NULL) {\r
-    gST->ConOut->OutputString (gST->ConOut, TmpStr);\r
-    gBS->FreePool (TmpStr);\r
-  }\r
-\r
-  do {\r
-    Status = GenMemoryTest->PerformMemoryTest (\r
-                              GenMemoryTest,\r
-                              &TestedMemorySize,\r
-                              &TotalMemorySize,\r
-                              &ErrorOut,\r
-                              TestAbort\r
-                              );\r
-    if (ErrorOut && (Status == EFI_DEVICE_ERROR)) {\r
-      TmpStr = GetStringById (STRING_TOKEN (STR_SYSTEM_MEM_ERROR));\r
-      if (TmpStr != NULL) {\r
-        PrintXY (10, 10, NULL, NULL, TmpStr);\r
-        gST->ConOut->SetCursorPosition (gST->ConOut, 0, 4);\r
-        gST->ConOut->OutputString (gST->ConOut, TmpStr);\r
-        gBS->FreePool (TmpStr);\r
-      }\r
-\r
-      ASSERT (0);\r
-    }\r
-\r
-    TestPercent = (UINTN) DivU64x32 (\r
-                            DivU64x32 (MultU64x32 (TestedMemorySize, 100), 16),\r
-                            (UINTN)DivU64x32 (TotalMemorySize, 16)\r
-                            );\r
-    if (TestPercent != PreviousValue) {\r
-      UnicodeValueToString (StrPercent, 0, TestPercent, 0);\r
-      gST->ConOut->SetCursorPosition (gST->ConOut, 0, 0);\r
-      TmpStr = GetStringById (STRING_TOKEN (STR_MEMORY_TEST_PERCENT));\r
-      if (TmpStr != NULL) {\r
-        BdsLibOutputStrings (gST->ConOut, StrPercent, TmpStr, NULL);\r
-        gBS->FreePool (TmpStr);\r
-      }\r
-\r
-      TmpStr = GetStringById (STRING_TOKEN (STR_PERFORM_MEM_TEST));\r
-      if (TmpStr != NULL) {\r
-        PlatformBdsShowProgress (\r
-          Foreground,\r
-          Background,\r
-          TmpStr,\r
-          Color,\r
-          TestPercent,\r
-          (UINTN) PreviousValue\r
-          );\r
-        gBS->FreePool (TmpStr);\r
-      }\r
-    }\r
-\r
-    PreviousValue = TestPercent;\r
-\r
-    KeyStatus     = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
-    if (Key.ScanCode == SCAN_ESC) {\r
-      if (!RequireSoftECCInit) {\r
-        TmpStr = GetStringById (STRING_TOKEN (STR_PERFORM_MEM_TEST));\r
-        if (TmpStr != NULL) {\r
-          PlatformBdsShowProgress (\r
-            Foreground,\r
-            Background,\r
-            TmpStr,\r
-            Color,\r
-            100,\r
-            (UINTN) PreviousValue\r
-            );\r
-          gBS->FreePool (TmpStr);\r
-        }\r
-\r
-        gST->ConOut->SetCursorPosition (gST->ConOut, 0, 0);\r
-        gST->ConOut->OutputString (gST->ConOut, L"100");\r
-        Status = GenMemoryTest->Finished (GenMemoryTest);\r
-        goto Done;\r
-      }\r
-\r
-      TestAbort = TRUE;\r
-    }\r
-  } while (Status != EFI_NOT_FOUND);\r
-\r
-  Status = GenMemoryTest->Finished (GenMemoryTest);\r
-\r
-Done:\r
-  UnicodeValueToString (StrTotalMemory, COMMA_TYPE, (UINTN) TotalMemorySize, 0);\r
-  if (StrTotalMemory[0] == L',') {\r
-    StrTotalMemory++;\r
-  }\r
-\r
-  TmpStr = GetStringById (STRING_TOKEN (STR_MEM_TEST_COMPLETED));\r
-  if (TmpStr != NULL) {\r
-    StrCat (StrTotalMemory, TmpStr);\r
-    gBS->FreePool (TmpStr);\r
-  }\r
-\r
-  gST->ConOut->ClearScreen (gST->ConOut);\r
-  gST->ConOut->SetAttribute (gST->ConOut, EFI_YELLOW | EFI_BRIGHT);\r
-  gST->ConOut->EnableCursor (gST->ConOut, FALSE);\r
-  gST->ConOut->OutputString (gST->ConOut, StrTotalMemory);\r
-  PlatformBdsShowProgress (\r
-    Foreground,\r
-    Background,\r
-    StrTotalMemory,\r
-    Color,\r
-    100,\r
-    (UINTN) PreviousValue\r
-    );\r
-\r
-  gBS->FreePool (Pos);\r
-\r
-  DataSize = sizeof (Value);\r
-  Status = gRT->GetVariable (\r
-                  L"BootState",\r
-                  &gEfiBootStateGuid,\r
-                  NULL,\r
-                  &DataSize,\r
-                  &Value\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    Value = 1;\r
-    gRT->SetVariable (\r
-          L"BootState",\r
-          &gEfiBootStateGuid,\r
-          EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-          sizeof (Value),\r
-          &Value\r
-          );\r
-  }\r
-\r
-  return ReturnStatus;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/String.c b/EdkUnixPkg/Dxe/PlatformBds/Generic/String.c
deleted file mode 100644 (file)
index 2805456..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  string.c\r
-\r
-Abstract:\r
-\r
-  String support\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#include "Bds.h"\r
-#include "String.h"\r
-#include "Language.h"\r
-\r
-extern UINT8  BdsStrings[];\r
-\r
-EFI_GUID      gBdsStringPackGuid = { 0x7bac95d3, 0xddf, 0x42f3, {0x9e, 0x24, 0x7c, 0x64, 0x49, 0x40, 0x37, 0x9a} };\r
-\r
-EFI_HII_HANDLE    gStringPackHandle;\r
-EFI_HII_PROTOCOL  *Hii;\r
-\r
-EFI_STATUS\r
-InitializeStringSupport (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Initialize HII global accessor for string support\r
-\r
-Arguments:\r
-  None\r
-\r
-Returns:\r
-  String from ID.\r
-\r
---*/\r
-{\r
-  EFI_STATUS        Status;\r
-  EFI_HII_PACKAGES  *PackageList;\r
-  //\r
-  // There should only ever be one HII protocol\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiHiiProtocolGuid,\r
-                  NULL,\r
-                  (VOID**)&Hii\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-    PackageList = PreparePackages (1, &gBdsStringPackGuid, BdsStrings);\r
-    Status      = Hii->NewPack (Hii, PackageList, &gStringPackHandle);\r
-    gBS->FreePool (PackageList);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-CHAR16 *\r
-GetStringById (\r
-  IN  STRING_REF   Id\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Get string by string id from HII Interface\r
-\r
-Arguments:\r
-\r
-  Id       - String ID.\r
-           \r
-Returns:\r
-\r
-  CHAR16 * - String from ID.\r
-  NULL     - If error occurs.\r
-\r
---*/\r
-{\r
-  CHAR16      *String;\r
-  UINTN       StringLength;\r
-  EFI_STATUS  Status;\r
-\r
-  //\r
-  // Set default string size assumption at no more than 256 bytes\r
-  //\r
-  StringLength  = 0x100;\r
-\r
-  String        = AllocateZeroPool (StringLength);\r
-  if (String == NULL) {\r
-    //\r
-    // If this happens, we are oh-so-dead, but return a NULL in any case.\r
-    //\r
-    return NULL;\r
-  }\r
-  //\r
-  // Get the current string for the current Language\r
-  //\r
-  Status = Hii->GetString (Hii, gStringPackHandle, Id, FALSE, NULL, &StringLength, String);\r
-  if (EFI_ERROR (Status)) {\r
-    if (Status == EFI_BUFFER_TOO_SMALL) {\r
-      //\r
-      // Free the old pool\r
-      //\r
-      gBS->FreePool (String);\r
-\r
-      //\r
-      // Allocate new pool with correct value\r
-      //\r
-      String = AllocatePool (StringLength);\r
-      ASSERT (String != NULL);\r
-\r
-      Status = Hii->GetString (Hii, gStringPackHandle, Id, FALSE, NULL, &StringLength, String);\r
-      if (!EFI_ERROR (Status)) {\r
-        return String;\r
-      }\r
-    }\r
-\r
-    return NULL;\r
-  }\r
-\r
-  return String;\r
-}\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/String.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/String.h
deleted file mode 100644 (file)
index b79df19..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  string.h\r
-\r
-Abstract:\r
-  \r
-  String support\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _STRING_H_\r
-#define _STRING_H_\r
-\r
-//\r
-// This is the VFR compiler generated header file which defines the\r
-// string identifiers.\r
-//\r
-#include "BdsStrDefs.h"\r
-\r
-//\r
-// String Definition Guid for BDS Platform\r
-//\r
-#define EFI_BDS_PLATFORM_GUID \\r
-  { \\r
-    0x7777E939, 0xD57E, 0x4DCB, {0xA0, 0x8E, 0x64, 0xD7, 0x98, 0x57, 0x1E, 0x0F } \\r
-  }\r
-\r
-extern EFI_HII_HANDLE    gStringPackHandle;\r
-extern EFI_HII_PROTOCOL  *Hii;\r
-\r
-CHAR16            *\r
-GetStringById (\r
-  IN  STRING_REF   Id\r
-  );\r
-\r
-EFI_STATUS\r
-InitializeStringSupport (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-CallFrontPage (\r
-  VOID\r
-  );\r
-\r
-#endif // _STRING_H_\r
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/Strings.uni b/EdkUnixPkg/Dxe/PlatformBds/Generic/Strings.uni
deleted file mode 100644 (file)
index 41a6b9a..0000000
Binary files a/EdkUnixPkg/Dxe/PlatformBds/Generic/Strings.uni and /dev/null differ
index 98de30f73ac8c2bce360d281658656f7232c16fe..1dec5985141668aa048e5dd1d702ee48da30e5b6 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">\r
-  <MsaHeader>\r
-    <ModuleName>Bds</ModuleName>\r
-    <ModuleType>DXE_DRIVER</ModuleType>\r
-    <GuidValue>f392b762-8985-11db-be87-0040d02b1835</GuidValue>\r
-    <Version>1.0</Version>\r
-    <Abstract>Platfrom BDS driver</Abstract>\r
-    <Description>\r
-      Do platform action customized by IBV/OEM.\r
-    </Description>\r
-    <Copyright>Copyright (c) 2006, Intel Corporation</Copyright>\r
-    <License>All rights reserved. This program and the accompanying materials\r
-      are licensed and made available under the terms and conditions of the BSD License\r
-      which accompanies this distribution.  The full text of the license may be found at\r
-      http://opensource.org/licenses/bsd-license.php\r
-      THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-      WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>\r
-    <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052</Specification>\r
-  </MsaHeader>\r
-  <ModuleDefinitions>\r
-    <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>\r
-    <BinaryModule>false</BinaryModule>\r
-    <OutputFileBasename>Bds</OutputFileBasename>\r
-  </ModuleDefinitions>\r
-  <LibraryClassDefinitions>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>DebugLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>UefiLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>UefiDriverEntryPoint</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>BaseLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>EdkGraphicsLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>DxeServicesTableLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>PerformanceLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>PrintLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>EdkIfrSupportLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>ReportStatusCodeLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>HobLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>EdkGenericBdsLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>MemoryAllocationLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>BaseMemoryLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>UefiBootServicesTableLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>UefiRuntimeServicesTableLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>DevicePathLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>HiiLib</Keyword>\r
-    </LibraryClass>\r
-  </LibraryClassDefinitions>\r
-  <SourceFiles>\r
-    <Filename>PlatformData.c</Filename>\r
-    <Filename>BdsPlatform.h</Filename>\r
-    <Filename>BdsPlatform.c</Filename>\r
-    <Filename>Generic/Bds.h</Filename>\r
-    <Filename>Generic/BdsEntry.c</Filename>\r
-    <Filename>Generic/FrontPage.h</Filename>\r
-    <Filename>Generic/FrontPage.c</Filename>\r
-    <Filename>Generic/FrontPageStrings.uni</Filename>\r
-    <Filename>Generic/FrontPageVfr.Vfr</Filename>\r
-    <Filename>Generic/Language.h</Filename>\r
-    <Filename>Generic/Language.c</Filename>\r
-    <Filename>Generic/String.h</Filename>\r
-    <Filename>Generic/String.c</Filename>\r
-    <Filename>Generic/Strings.uni</Filename>\r
-    <Filename>Generic/Capsules.c</Filename>\r
-    <Filename>Generic/MemoryTest.c</Filename>\r
-    <Filename>Generic/BootMaint/BmString.uni</Filename>\r
-    <Filename>Generic/BootMaint/Bm.vfr</Filename>\r
-    <Filename>Generic/BootMaint/BBSsupport.h</Filename>\r
-    <Filename>Generic/BootMaint/BootMaint.h</Filename>\r
-    <Filename>Generic/BootMaint/FormGuid.h</Filename>\r
-    <Filename>Generic/BootMaint/BmLib.c</Filename>\r
-    <Filename>Generic/BootMaint/BootOption.c</Filename>\r
-    <Filename>Generic/BootMaint/ConsoleOption.c</Filename>\r
-    <Filename>Generic/BootMaint/Data.c</Filename>\r
-    <Filename>Generic/BootMaint/Variable.c</Filename>\r
-    <Filename>Generic/BootMaint/UpdatePage.c</Filename>\r
-    <Filename>Generic/BootMaint/BBSsupport.c</Filename>\r
-    <Filename>Generic/BootMaint/BootMaint.c</Filename>\r
-    <Filename>Generic/BootMaint/FileExplorer.c</Filename>\r
-    <Filename>Generic/BootMaint/FE.vfr</Filename>\r
-    <Filename>Generic/BootMngr/BootManager.h</Filename>\r
-    <Filename>Generic/BootMngr/BootManager.c</Filename>\r
-    <Filename>Generic/BootMngr/BootManagerStrings.uni</Filename>\r
-    <Filename>Generic/BootMngr/BootManagerVfr.Vfr</Filename>\r
-    <Filename>Generic/DeviceMngr/DeviceManager.h</Filename>\r
-    <Filename>Generic/DeviceMngr/DeviceManager.c</Filename>\r
-    <Filename>Generic/DeviceMngr/DeviceManagerStrings.uni</Filename>\r
-    <Filename>Generic/DeviceMngr/DeviceManagerVfr.Vfr</Filename>\r
-    <Filename>Generic/Bds.dxs</Filename>\r
-  </SourceFiles>\r
-  <PackageDependencies>\r
-    <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>\r
-    <Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>\r
-    <Package PackageGuid="f2805c44-8985-11db-9e98-0040d02b1835"/>\r
-  </PackageDependencies>\r
-  <Protocols>\r
-    <Protocol Usage="ALWAYS_PRODUCED">\r
-      <ProtocolCName>gEfiBdsArchProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiLegacyBiosProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiUgaSplashProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiHiiProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiFormCallbackProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiDataHubProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiFormBrowserProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiConsoleControlProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiCpuIoProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiUgaDrawProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiLoadFileProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiSimpleFileSystemProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiDevicePathProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiBlockIoProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiSerialIoProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiGenericMemTestProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="SOMETIMES_CONSUMED">\r
-      <ProtocolCName>gEfiCpuArchProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="SOMETIMES_CONSUMED">\r
-      <ProtocolCName>gEfiDriverBindingProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-  </Protocols>\r
-  <DataHubs>\r
-    <DataHubRecord Usage="SOMETIMES_CONSUMED">\r
-      <DataHubCName>BiosVendor</DataHubCName>\r
-    </DataHubRecord>\r
-    <DataHubRecord Usage="SOMETIMES_CONSUMED">\r
-      <DataHubCName>SystemManufacturer</DataHubCName>\r
-    </DataHubRecord>\r
-    <DataHubRecord Usage="SOMETIMES_CONSUMED">\r
-      <DataHubCName>ProcessorVersion</DataHubCName>\r
-    </DataHubRecord>\r
-    <DataHubRecord Usage="SOMETIMES_CONSUMED">\r
-      <DataHubCName>ProcessorFrequency</DataHubCName>\r
-    </DataHubRecord>\r
-    <DataHubRecord Usage="SOMETIMES_CONSUMED">\r
-      <DataHubCName>MemoryArray</DataHubCName>\r
-    </DataHubRecord>\r
-    <DataHubRecord Usage="SOMETIMES_CONSUMED">\r
-      <DataHubCName>SerialIoDevice</DataHubCName>\r
-    </DataHubRecord>\r
-    <DataHubRecord Usage="SOMETIMES_CONSUMED">\r
-      <DataHubCName>SerialIoPort</DataHubCName>\r
-    </DataHubRecord>\r
-  </DataHubs>\r
-  <Guids>\r
-    <GuidCNames Usage="ALWAYS_CONSUMED">\r
-      <GuidCName>gEfiBootStateGuid</GuidCName>\r
-    </GuidCNames>\r
-    <GuidCNames Usage="ALWAYS_CONSUMED">\r
-      <GuidCName>gEfiGlobalVariableGuid</GuidCName>\r
-    </GuidCNames>\r
-    <GuidCNames Usage="ALWAYS_CONSUMED">\r
-      <GuidCName>gEfiFlashMapHobGuid</GuidCName>\r
-    </GuidCNames>\r
-    <GuidCNames Usage="ALWAYS_CONSUMED">\r
-      <GuidCName>gEfiFileSystemVolumeLabelInfoIdGuid</GuidCName>\r
-    </GuidCNames>\r
-    <GuidCNames Usage="ALWAYS_CONSUMED">\r
-      <GuidCName>gEfiFileInfoGuid</GuidCName>\r
-    </GuidCNames>\r
-  </Guids>\r
-  <Externs>\r
-    <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>\r
-    <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>\r
-    <Extern>\r
-      <ModuleEntryPoint>BdsInitialize</ModuleEntryPoint>\r
-    </Extern>\r
-  </Externs>\r
-</ModuleSurfaceArea>
+<?xml version="1.0" encoding="UTF-8"?>
+<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <MsaHeader>
+    <ModuleName>Bds</ModuleName>
+    <ModuleType>DXE_DRIVER</ModuleType>
+    <GuidValue>f392b762-8985-11db-be87-0040d02b1835</GuidValue>
+    <Version>1.0</Version>
+    <Abstract>Platfrom BDS driver</Abstract>
+    <Description>Do platform action customized by IBV/OEM.</Description>
+    <Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
+    <License>All rights reserved. This program and the accompanying materials
+      are licensed and made available under the terms and conditions of the BSD License
+      which accompanies this distribution.  The full text of the license may be found at
+      http://opensource.org/licenses/bsd-license.php
+      THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+      WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>
+    <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052</Specification>
+  </MsaHeader>
+  <ModuleDefinitions>
+    <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
+    <BinaryModule>false</BinaryModule>
+    <OutputFileBasename>Bds</OutputFileBasename>
+  </ModuleDefinitions>
+  <LibraryClassDefinitions>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>DebugLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>UefiLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>UefiDriverEntryPoint</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>BaseLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>EdkGraphicsLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>DxeServicesTableLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>PerformanceLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>PrintLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>EdkIfrSupportLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>ReportStatusCodeLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>HobLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>EdkGenericBdsLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>MemoryAllocationLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>BaseMemoryLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>UefiBootServicesTableLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>UefiRuntimeServicesTableLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>DevicePathLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>HiiLib</Keyword>
+    </LibraryClass>
+    <LibraryClass Usage="ALWAYS_CONSUMED">
+      <Keyword>EdkGenericPlatformBdsLib</Keyword>
+    </LibraryClass>
+  </LibraryClassDefinitions>
+  <SourceFiles>
+    <Filename>PlatformData.c</Filename>
+    <Filename>BdsPlatform.h</Filename>
+    <Filename>BdsPlatform.c</Filename>
+    <Filename>Bds.dxs</Filename>
+  </SourceFiles>
+  <PackageDependencies>
+    <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
+    <Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>
+    <Package PackageGuid="f2805c44-8985-11db-9e98-0040d02b1835"/>
+  </PackageDependencies>
+  <Protocols>
+    <Protocol Usage="ALWAYS_PRODUCED">
+      <ProtocolCName>gEfiBdsArchProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiLegacyBiosProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiUgaSplashProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiHiiProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiFormCallbackProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiDataHubProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiFormBrowserProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiConsoleControlProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiCpuIoProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiUgaDrawProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiLoadFileProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiSimpleFileSystemProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiDevicePathProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiBlockIoProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiSerialIoProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiGenericMemTestProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="SOMETIMES_CONSUMED">
+      <ProtocolCName>gEfiCpuArchProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="SOMETIMES_CONSUMED">
+      <ProtocolCName>gEfiDriverBindingProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiUnixThunkProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiUnixIoProtocolGuid</ProtocolCName>
+    </Protocol>
+    <Protocol Usage="ALWAYS_CONSUMED">
+      <ProtocolCName>gEfiUnixUgaIoProtocolGuid</ProtocolCName>
+    </Protocol>
+  </Protocols>
+  <DataHubs>
+    <DataHubRecord Usage="SOMETIMES_CONSUMED">
+      <DataHubCName>BiosVendor</DataHubCName>
+    </DataHubRecord>
+    <DataHubRecord Usage="SOMETIMES_CONSUMED">
+      <DataHubCName>SystemManufacturer</DataHubCName>
+    </DataHubRecord>
+    <DataHubRecord Usage="SOMETIMES_CONSUMED">
+      <DataHubCName>ProcessorVersion</DataHubCName>
+    </DataHubRecord>
+    <DataHubRecord Usage="SOMETIMES_CONSUMED">
+      <DataHubCName>ProcessorFrequency</DataHubCName>
+    </DataHubRecord>
+    <DataHubRecord Usage="SOMETIMES_CONSUMED">
+      <DataHubCName>MemoryArray</DataHubCName>
+    </DataHubRecord>
+    <DataHubRecord Usage="SOMETIMES_CONSUMED">
+      <DataHubCName>SerialIoDevice</DataHubCName>
+    </DataHubRecord>
+    <DataHubRecord Usage="SOMETIMES_CONSUMED">
+      <DataHubCName>SerialIoPort</DataHubCName>
+    </DataHubRecord>
+  </DataHubs>
+  <Guids>
+    <GuidCNames Usage="ALWAYS_CONSUMED">
+      <GuidCName>gEfiBootStateGuid</GuidCName>
+    </GuidCNames>
+    <GuidCNames Usage="ALWAYS_CONSUMED">
+      <GuidCName>gEfiGlobalVariableGuid</GuidCName>
+    </GuidCNames>
+    <GuidCNames Usage="ALWAYS_CONSUMED">
+      <GuidCName>gEfiFlashMapHobGuid</GuidCName>
+    </GuidCNames>
+    <GuidCNames Usage="ALWAYS_CONSUMED">
+      <GuidCName>gEfiFileSystemVolumeLabelInfoIdGuid</GuidCName>
+    </GuidCNames>
+    <GuidCNames Usage="ALWAYS_CONSUMED">
+      <GuidCName>gEfiFileInfoGuid</GuidCName>
+    </GuidCNames>
+  </Guids>
+  <Externs>
+    <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
+    <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
+    <Extern>
+      <ModuleEntryPoint>BdsInitialize</ModuleEntryPoint>
+    </Extern>
+  </Externs>
+</ModuleSurfaceArea>
\ No newline at end of file
index b66d0e0eaf42ca92d5f4c4527d5b3c94d88fda99..97442850f5b86f1a260bb58f200af86d34c9d7f5 100644 (file)
@@ -20,7 +20,6 @@ Abstract:
 \r
 --*/\r
 \r
-#include "Generic/Bds.h"\r
 #include "BdsPlatform.h"\r
 \r
 //\r
diff --git a/EdkUnixPkg/Include/Library/EdkGenericBdsLib.h b/EdkUnixPkg/Include/Library/EdkGenericBdsLib.h
deleted file mode 100644 (file)
index 7ec0222..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsLib.h\r
-\r
-Abstract:\r
-\r
-  BDS library definition, include the file and data structure\r
-\r
---*/\r
-\r
-#ifndef _BDS_LIB_H_\r
-#define _BDS_LIB_H_\r
-\r
-extern EFI_HANDLE mBdsImageHandle;\r
-\r
-//\r
-// Constants which are variable names used to access variables\r
-//\r
-#define VarLegacyDevOrder L"LegacyDevOrder"\r
-\r
-//\r
-// Data structures and defines\r
-//\r
-#define FRONT_PAGE_QUESTION_ID  0x0000\r
-#define FRONT_PAGE_DATA_WIDTH   0x01\r
-\r
-//\r
-// ConnectType\r
-//\r
-#define CONSOLE_OUT 0x00000001\r
-#define STD_ERROR   0x00000002\r
-#define CONSOLE_IN  0x00000004\r
-#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)\r
-\r
-//\r
-// Load Option Attributes defined in EFI Specification\r
-//\r
-#define LOAD_OPTION_ACTIVE              0x00000001\r
-#define LOAD_OPTION_FORCE_RECONNECT     0x00000002\r
-#define IS_LOAD_OPTION_TYPE(_c, _Mask)  (BOOLEAN) (((_c) & (_Mask)) != 0)\r
-\r
-//\r
-// Define Maxmim characters that will be accepted\r
-//\r
-#define MAX_CHAR            480\r
-#define MAX_CHAR_SIZE       (MAX_CHAR * 2)\r
-\r
-#define MIN_ALIGNMENT_SIZE  4\r
-#define ALIGN_SIZE(a)       ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)\r
-\r
-//\r
-// Define maximum characters for boot option variable "BootXXXX"\r
-//\r
-#define BOOT_OPTION_MAX_CHAR 10\r
-\r
-//\r
-// This data structure is the part of BDS_CONNECT_ENTRY that we can hard code.\r
-//\r
-#define BDS_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('B', 'd', 'C', 'O')\r
-\r
-typedef struct {\r
-\r
-  UINTN                     Signature;\r
-  LIST_ENTRY                Link;\r
-\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-\r
-  CHAR16                    *OptionName;\r
-  UINTN                     OptionNumber;\r
-  UINT16                    BootCurrent;\r
-  UINT32                    Attribute;\r
-  CHAR16                    *Description;\r
-  VOID                      *LoadOptions;\r
-  UINT32                    LoadOptionsSize;\r
-\r
-} BDS_COMMON_OPTION;\r
-\r
-typedef struct {\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  UINTN                     ConnectType;\r
-} BDS_CONSOLE_CONNECT_ENTRY;\r
-\r
-//\r
-// Lib Functions\r
-//\r
-\r
-//\r
-// Bds boot relate lib functions\r
-//\r
-EFI_STATUS\r
-BdsLibUpdateBootOrderList (\r
-  IN  LIST_ENTRY                 *BdsOptionList,\r
-  IN  CHAR16                     *VariableName\r
-  );\r
-\r
-VOID\r
-BdsLibBootNext (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibBootViaBootOption (\r
-  IN  BDS_COMMON_OPTION             * Option,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL      * DevicePath,\r
-  OUT UINTN                         *ExitDataSize,\r
-  OUT CHAR16                        **ExitData OPTIONAL\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibEnumerateAllBootOption (\r
-  IN OUT LIST_ENTRY    *BdsBootOptionList\r
-  );\r
-\r
-VOID\r
-BdsLibBuildOptionFromHandle (\r
-  IN  EFI_HANDLE      Handle,\r
-  IN  LIST_ENTRY      *BdsBootOptionList\r
-  );\r
-\r
-VOID\r
-BdsLibBuildOptionFromShell (\r
-  IN  EFI_HANDLE                 Handle,\r
-  IN  LIST_ENTRY                 *BdsBootOptionList\r
-  );\r
-\r
-//\r
-// Bds misc lib functions\r
-//\r
-UINT16\r
-BdsLibGetTimeout (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibGetBootMode (\r
-  OUT EFI_BOOT_MODE       *BootMode\r
-  );\r
-\r
-VOID\r
-BdsLibLoadDrivers (\r
-  IN  LIST_ENTRY          *BdsDriverLists\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibBuildOptionFromVar (\r
-  IN  LIST_ENTRY          *BdsCommonOptionList,\r
-  IN  CHAR16              *VariableName\r
-  );\r
-\r
-VOID                      *\r
-BdsLibGetVariableAndSize (\r
-  IN  CHAR16              *Name,\r
-  IN  EFI_GUID            *VendorGuid,\r
-  OUT UINTN               *VariableSize\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibOutputStrings (\r
-  IN EFI_SIMPLE_TEXT_OUT_PROTOCOL   *ConOut,\r
-  ...\r
-  );\r
-\r
-BDS_COMMON_OPTION         *\r
-BdsLibVariableToOption (\r
-  IN OUT LIST_ENTRY               *BdsCommonOptionList,\r
-  IN CHAR16                       *VariableName\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibRegisterNewOption (\r
-  IN  LIST_ENTRY                     *BdsOptionList,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL       *DevicePath,\r
-  IN  CHAR16                         *String,\r
-  IN  CHAR16                         *VariableName\r
-  );\r
-\r
-//\r
-// Bds connect or disconnect driver lib funcion\r
-//\r
-VOID\r
-BdsLibConnectAllDriversToAllControllers (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-BdsLibConnectAll (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibConnectDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePathToConnect\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibConnectAllEfi (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibDisconnectAllEfi (\r
-  VOID\r
-  );\r
-\r
-//\r
-// Bds console relate lib functions\r
-//\r
-VOID\r
-BdsLibConnectAllConsoles (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibConnectAllDefaultConsoles (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibUpdateConsoleVariable (\r
-  IN  CHAR16                    *ConVarName,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *CustomizedConDevicePath,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *ExclusiveDevicePath\r
-  );\r
-\r
-EFI_STATUS\r
-BdsLibConnectConsoleVariable (\r
-  IN  CHAR16                 *ConVarName\r
-  );\r
-\r
-//\r
-// Bds device path relate lib functions\r
-//\r
-EFI_DEVICE_PATH_PROTOCOL  *\r
-BdsLibUnpackDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  );\r
-\r
-VOID\r
-BdsLibSafeFreePool (\r
-  IN  VOID             *Buffer\r
-  );\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-BdsLibDelPartMatchInstance (\r
-  IN     EFI_DEVICE_PATH_PROTOCOL  *Multi,\r
-  IN     EFI_DEVICE_PATH_PROTOCOL  *Single\r
-  );\r
-\r
-BOOLEAN\r
-BdsLibMatchDevicePaths (\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *Multi,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *Single\r
-  );\r
-\r
-CHAR16                    *\r
-DevicePathToStr (\r
-  EFI_DEVICE_PATH_PROTOCOL     *DevPath\r
-  );\r
-\r
-VOID                      *\r
-EfiLibGetVariable (\r
-  IN CHAR16               *Name,\r
-  IN EFI_GUID             *VendorGuid\r
-  );\r
-\r
-//\r
-// Internal definitions\r
-//\r
-typedef struct {\r
-  CHAR16  *str;\r
-  UINTN   len;\r
-  UINTN   maxlen;\r
-} POOL_PRINT;\r
-\r
-typedef struct {\r
-  UINT8 Type;\r
-  UINT8 SubType;\r
-  VOID (*Function) (POOL_PRINT *, VOID *);\r
-} DEVICE_PATH_STRING_TABLE;\r
-\r
-//\r
-// Internal functions\r
-//\r
-EFI_STATUS\r
-BdsBootByDiskSignatureAndPartition (\r
-  IN  BDS_COMMON_OPTION          * Option,\r
-  IN  HARDDRIVE_DEVICE_PATH      * HardDriveDevicePath,\r
-  IN  UINT32                     LoadOptionsSize,\r
-  IN  VOID                       *LoadOptions,\r
-  OUT UINTN                      *ExitDataSize,\r
-  OUT CHAR16                     **ExitData OPTIONAL\r
-  );\r
-\r
-//\r
-// Notes: EFI 64 shadow all option rom\r
-//\r
-#ifdef EFI64\r
-#define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom ();\r
-VOID\r
-ShadowAllOptionRom();\r
-#else\r
-#define EFI64_SHADOW_ALL_LEGACY_ROM()\r
-#endif\r
-\r
-//\r
-// BBS support macros and functions\r
-//\r
-#ifdef EFI32\r
-#define REFRESH_LEGACY_BOOT_OPTIONS \\r
-        BdsDeleteAllInvalidLegacyBootOptions ();\\r
-        BdsAddNonExistingLegacyBootOptions (); \\r
-        BdsUpdateLegacyDevOrder ()\r
-#else\r
-#define REFRESH_LEGACY_BOOT_OPTIONS\r
-#endif\r
-\r
-EFI_STATUS\r
-BdsDeleteAllInvalidLegacyBootOptions (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsAddNonExistingLegacyBootOptions (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsUpdateLegacyDevOrder (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-BdsRefreshBbsTableForBoot (\r
-  IN BDS_COMMON_OPTION        *Entry\r
-  );\r
-\r
-EFI_STATUS\r
-BdsDeleteBootOption (\r
-  IN UINTN                       OptionNumber,\r
-  IN OUT UINT16                  *BootOrder,\r
-  IN OUT UINTN                   *BootOrderSize\r
-  );\r
-\r
-//\r
-//The interface functions relate with Setup Browser Reset Reminder feature\r
-//\r
-VOID\r
-EnableResetReminderFeature (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-DisableResetReminderFeature (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EnableResetRequired (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-DisableResetRequired (\r
-  VOID\r
-  );\r
-\r
-BOOLEAN\r
-IsResetReminderFeatureEnable (\r
-  VOID\r
-  );\r
-\r
-BOOLEAN\r
-IsResetRequired (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-SetupResetReminder (\r
-  VOID\r
-  );\r
-  \r
-EFI_STATUS\r
-BdsLibGetHiiHandles (\r
-  IN     EFI_HII_PROTOCOL *Hii,\r
-  IN OUT UINT16           *HandleBufferLength,\r
-  OUT    EFI_HII_HANDLE   **HiiHandles\r
-  );\r
-\r
-#endif // _BDS_LIB_H_\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsBoot.c b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsBoot.c
deleted file mode 100644 (file)
index 755c042..0000000
+++ /dev/null
@@ -1,1097 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsBoot.c\r
-\r
-Abstract:\r
-\r
-  BDS Lib functions which relate with create or process the boot\r
-  option.\r
-\r
---*/\r
-#include "Performance.h"\r
-\r
-BOOLEAN mEnumBootDevice = FALSE;\r
-\r
-EFI_STATUS\r
-BdsLibDoLegacyBoot (\r
-  IN  BDS_COMMON_OPTION           *Option\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Boot the legacy system with the boot option\r
-\r
-Arguments:\r
-\r
-  Option           - The legacy boot option which have BBS device path\r
-\r
-Returns:\r
-\r
-  EFI_UNSUPPORTED  - There is no legacybios protocol, do not support\r
-                     legacy boot.\r
-                         \r
-  EFI_STATUS       - Return the status of LegacyBios->LegacyBoot ().\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-\r
-  Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL,
-                               (void **)&LegacyBios);\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // If no LegacyBios protocol we do not support legacy boot\r
-    //\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-  //\r
-  // Notes: if we seperate the int 19, then we don't need to refresh BBS\r
-  //\r
-  BdsRefreshBbsTableForBoot (Option);\r
-\r
-  //\r
-  // Write boot to OS performance data to a file\r
-  //\r
-  PERF_CODE (\r
-    WriteBootToOsPerformanceData ();\r
-  );\r
-\r
-\r
-  DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Legacy Boot: %S\n", Option->Description));\r
-  return LegacyBios->LegacyBoot (\r
-                      LegacyBios,\r
-                      (BBS_BBS_DEVICE_PATH *) Option->DevicePath,\r
-                      Option->LoadOptionsSize,\r
-                      Option->LoadOptions\r
-                      );\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibBootViaBootOption (\r
-  IN  BDS_COMMON_OPTION             * Option,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL      * DevicePath,\r
-  OUT UINTN                         *ExitDataSize,\r
-  OUT CHAR16                        **ExitData OPTIONAL\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Process the boot option follow the EFI 1.1 specification and \r
-  special treat the legacy boot option with BBS_DEVICE_PATH.\r
-\r
-Arguments:\r
-\r
-  Option       - The boot option need to be processed\r
-  \r
-  DevicePath   - The device path which describe where to load \r
-                 the boot image or the legcy BBS device path \r
-                 to boot the legacy OS\r
-\r
-  ExitDataSize - Returned directly from gBS->StartImage ()\r
-\r
-  ExitData     - Returned directly from gBS->StartImage ()\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS   - Status from gBS->StartImage (),\r
-                  or BdsBootByDiskSignatureAndPartition ()\r
-\r
-  EFI_NOT_FOUND - If the Device Path is not found in the system\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_HANDLE                Handle;\r
-  EFI_HANDLE                ImageHandle;\r
-  EFI_DEVICE_PATH_PROTOCOL  *TempDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *FilePath;\r
-  EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;\r
-  EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;\r
-  EFI_BLOCK_IO_PROTOCOL     *BlkIo;\r
-  VOID                      *Buffer;\r
-\r
-  *ExitDataSize = 0;\r
-  *ExitData     = NULL;\r
-\r
-  //\r
-  // Notes: put EFI64 ROM Shadow Solution\r
-  //\r
-  EFI64_SHADOW_ALL_LEGACY_ROM ();\r
-\r
-  //\r
-  // Notes: this code can be remove after the s3 script table\r
-  // hook on the event EFI_EVENT_SIGNAL_READY_TO_BOOT or\r
-  // EFI_EVENT_SIGNAL_LEGACY_BOOT\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiAcpiS3SaveProtocolGuid, NULL,
-                               (VOID **)&AcpiS3Save);\r
-  if (!EFI_ERROR (Status)) {\r
-    AcpiS3Save->S3Save (AcpiS3Save, NULL);\r
-  }\r
-  //\r
-  // If it's Device Path that starts with a hard drive path,\r
-  // this routine will do the booting.\r
-  //\r
-  Status = BdsBootByDiskSignatureAndPartition (\r
-            Option,\r
-            (HARDDRIVE_DEVICE_PATH *) DevicePath,\r
-            Option->LoadOptionsSize,\r
-            Option->LoadOptions,\r
-            ExitDataSize,\r
-            ExitData\r
-            );\r
-  if (!EFI_ERROR (Status)) {\r
-    //\r
-    // If we found a disk signature and partition device path return success\r
-    //\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  EfiSignalEventReadyToBoot ();\r
-\r
-  //\r
-  // Set Boot Current\r
-  //\r
-  gRT->SetVariable (\r
-        L"BootCurrent",\r
-        &gEfiGlobalVariableGuid,\r
-        EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-        sizeof (UINT16),\r
-        &Option->BootCurrent\r
-        );\r
-\r
-  if ((DevicePathType (Option->DevicePath) == BBS_DEVICE_PATH) &&\r
-      (DevicePathSubType (Option->DevicePath) == BBS_BBS_DP)\r
-    ) {\r
-    //\r
-    // Check to see if we should legacy BOOT. If yes then do the legacy boot\r
-    //\r
-    return BdsLibDoLegacyBoot (Option);\r
-  }\r
-\r
-  DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Booting EFI 1.1 way %S\n", Option->Description));\r
-\r
-  Status = gBS->LoadImage (\r
-                  TRUE,\r
-                  mBdsImageHandle,\r
-                  DevicePath,\r
-                  NULL,\r
-                  0,\r
-                  &ImageHandle\r
-                  );\r
-\r
-  //\r
-  // If we didn't find an image, we may need to load the default\r
-  // boot behavior for the device.\r
-  //\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // Find a Simple File System protocol on the device path. If the remaining\r
-    // device path is set to end then no Files are being specified, so try\r
-    // the removable media file name.\r
-    //\r
-    TempDevicePath = DevicePath;\r
-    Status = gBS->LocateDevicePath (\r
-                    &gEfiSimpleFileSystemProtocolGuid,\r
-                    &TempDevicePath,\r
-                    &Handle\r
-                    );\r
-    if (!EFI_ERROR (Status) && IsDevicePathEnd (TempDevicePath)) {\r
-      FilePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);\r
-      if (FilePath) {\r
-        //\r
-        // Issue a dummy read to the device to check for media change.\r
-        // When the removable media is changed, any Block IO read/write will\r
-        // cause the BlockIo protocol be reinstalled and EFI_MEDIA_CHANGED is\r
-        // returned. After the Block IO protocol is reinstalled, subsequent\r
-        // Block IO read/write will success.\r
-        //\r
-        Status = gBS->HandleProtocol (\r
-                        Handle,\r
-                        &gEfiBlockIoProtocolGuid,\r
-                        (VOID **) &BlkIo\r
-                        );\r
-        if (!EFI_ERROR (Status)) {\r
-          Buffer = AllocatePool (BlkIo->Media->BlockSize);\r
-          if (Buffer != NULL) {\r
-            BlkIo->ReadBlocks (\r
-                     BlkIo,\r
-                     BlkIo->Media->MediaId,\r
-                     0,\r
-                     BlkIo->Media->BlockSize,\r
-                     Buffer\r
-                     );\r
-            gBS->FreePool (Buffer);\r
-          }\r
-        }\r
-\r
-        Status = gBS->LoadImage (\r
-                        TRUE,\r
-                        mBdsImageHandle,\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
-        }\r
-      }\r
-    } else {\r
-      Status = EFI_NOT_FOUND;\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
-  // Provide the image with it's load options\r
-  //\r
-  Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid,
-                               (VOID **) &ImageInfo);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  if (Option->LoadOptionsSize != 0) {\r
-    ImageInfo->LoadOptionsSize  = Option->LoadOptionsSize;\r
-    ImageInfo->LoadOptions      = Option->LoadOptions;\r
-  }\r
-  //\r
-  // Before calling the image, enable the Watchdog Timer for\r
-  // the 5 Minute period\r
-  //\r
-  gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);\r
-\r
-  Status = gBS->StartImage (ImageHandle, ExitDataSize, ExitData);\r
-  DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Image Return Status = %r\n", Status));\r
-\r
-  //\r
-  // Clear the Watchdog Timer after the image returns\r
-  //\r
-  gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);\r
-\r
-Done:\r
-  //\r
-  // Clear Boot Current\r
-  //\r
-  gRT->SetVariable (\r
-        L"BootCurrent",\r
-        &gEfiGlobalVariableGuid,\r
-        EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-        0,\r
-        &Option->BootCurrent\r
-        );\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsBootByDiskSignatureAndPartition (\r
-  IN  BDS_COMMON_OPTION          * Option,\r
-  IN  HARDDRIVE_DEVICE_PATH      * HardDriveDevicePath,\r
-  IN  UINT32                     LoadOptionsSize,\r
-  IN  VOID                       *LoadOptions,\r
-  OUT UINTN                      *ExitDataSize,\r
-  OUT CHAR16                     **ExitData OPTIONAL\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Check to see if a hard ware device path was passed in. If it was then search\r
-  all the block IO devices for the passed in hard drive device path. \r
-  \r
-Arguments:\r
-\r
-  Option - The current processing boot option.\r
-\r
-  HardDriveDevicePath - EFI Device Path to boot, if it starts with a hard\r
-                        drive device path.\r
-\r
-  LoadOptionsSize - Passed into gBS->StartImage ()\r
-                    via the loaded image protocol.\r
-\r
-  LoadOptions     - Passed into gBS->StartImage ()\r
-                    via the loaded image protocol.\r
-\r
-  ExitDataSize - returned directly from gBS->StartImage ()\r
-\r
-  ExitData     - returned directly from gBS->StartImage ()\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS   - Status from gBS->StartImage (),\r
-                  or BootByDiskSignatureAndPartition ()\r
-                  \r
-  EFI_NOT_FOUND - If the Device Path is not found in the system\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  UINTN                     BlockIoHandleCount;\r
-  EFI_HANDLE                *BlockIoBuffer;\r
-  EFI_DEVICE_PATH_PROTOCOL  *BlockIoDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *BlockIoHdDevicePath;\r
-  HARDDRIVE_DEVICE_PATH     *TmpHdPath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevicePath;\r
-  UINTN                     Index;\r
-  BOOLEAN                   DevicePathMatch;\r
-  HARDDRIVE_DEVICE_PATH     *TempPath;\r
-\r
-  *ExitDataSize = 0;\r
-  *ExitData     = NULL;\r
-\r
-  if ( !((DevicePathType (&HardDriveDevicePath->Header) == MEDIA_DEVICE_PATH) &&\r
-          (DevicePathSubType (&HardDriveDevicePath->Header) == MEDIA_HARDDRIVE_DP))\r
-        ) {\r
-    //\r
-    // If the HardDriveDevicePath does not start with a Hard Drive Device Path\r
-    // exit.\r
-    //\r
-    return EFI_NOT_FOUND;\r
-  }\r
-  //\r
-  // The boot device have already been connected\r
-  //\r
-  Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiBlockIoProtocolGuid, NULL, &BlockIoHandleCount, &BlockIoBuffer);\r
-  if (EFI_ERROR (Status) || BlockIoHandleCount == 0) {\r
-    //\r
-    // If there was an error or there are no device handles that support\r
-    // the BLOCK_IO Protocol, then return.\r
-    //\r
-    return EFI_NOT_FOUND;\r
-  }\r
-  //\r
-  // Loop through all the device handles that support the BLOCK_IO Protocol\r
-  //\r
-  for (Index = 0; Index < BlockIoHandleCount; Index++) {\r
-\r
-    Status = gBS->HandleProtocol (BlockIoBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID *) &BlockIoDevicePath);\r
-    if (EFI_ERROR (Status) || BlockIoDevicePath == NULL) {\r
-      continue;\r
-    }\r
-    //\r
-    // Make PreviousDevicePath == the device path node before the end node\r
-    //\r
-    DevicePath          = BlockIoDevicePath;\r
-    BlockIoHdDevicePath = NULL;\r
-\r
-    //\r
-    // find HardDriver device path node\r
-    //\r
-    while (!IsDevicePathEnd (DevicePath)) {\r
-      if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) && \r
-          (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)\r
-          ) {\r
-        BlockIoHdDevicePath = DevicePath;\r
-        break;\r
-      }\r
-\r
-      DevicePath = NextDevicePathNode (DevicePath);\r
-    }\r
-\r
-    if (BlockIoHdDevicePath == NULL) {\r
-      continue;\r
-    }\r
-    //\r
-    // See if the harddrive device path in blockio matches the orig Hard Drive Node\r
-    //\r
-    DevicePathMatch = FALSE;\r
-\r
-    TmpHdPath       = (HARDDRIVE_DEVICE_PATH *) BlockIoHdDevicePath;\r
-    TempPath        = (HARDDRIVE_DEVICE_PATH *) BdsLibUnpackDevicePath ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);\r
-\r
-    //\r
-    // Only several fields will be checked. NOT whole NODE\r
-    //\r
-    if ( TmpHdPath->PartitionNumber == TempPath->PartitionNumber &&\r
-        TmpHdPath->MBRType == TempPath->MBRType &&\r
-        TmpHdPath->SignatureType == TempPath->SignatureType &&\r
-        CompareGuid ((EFI_GUID *) TmpHdPath->Signature, (EFI_GUID *) TempPath->Signature)) {\r
-      //\r
-      // Get the matched device path\r
-      //\r
-      DevicePathMatch = TRUE;\r
-    }\r
-    //\r
-    // Only do the boot, when devicepath match\r
-    //\r
-    if (DevicePathMatch) {\r
-      //\r
-      // Combine the Block IO and Hard Drive Device path together and try\r
-      // to boot from it.\r
-      //\r
-      DevicePath    = NextDevicePathNode ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);\r
-      NewDevicePath = AppendDevicePath (BlockIoDevicePath, DevicePath);\r
-\r
-      //\r
-      // Recursive boot with new device path\r
-      //\r
-      Status = BdsLibBootViaBootOption (Option, NewDevicePath, ExitDataSize, ExitData);\r
-      if (!EFI_ERROR (Status)) {\r
-        break;\r
-      }\r
-    }\r
-  }\r
-\r
-  gBS->FreePool (BlockIoBuffer);\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibDeleteOptionFromHandle (\r
-  IN  EFI_HANDLE                 Handle\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Delete the boot option associated with the handle passed in\r
-\r
-Arguments:\r
-\r
-  Handle - The handle which present the device path to create boot option\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS           - Delete the boot option success\r
-\r
-  EFI_NOT_FOUND         - If the Device Path is not found in the system\r
-\r
-  EFI_OUT_OF_RESOURCES  - Lack of memory resource\r
-\r
-  Other                 - Error return value from SetVariable()\r
-\r
---*/\r
-{\r
-  UINT16                    *BootOrder;\r
-  UINT8                     *BootOptionVar;\r
-  UINTN                     BootOrderSize;\r
-  UINTN                     BootOptionSize;\r
-  EFI_STATUS                Status;\r
-  UINTN                     Index;\r
-  UINT16                    BootOption[BOOT_OPTION_MAX_CHAR];\r
-  UINTN                     DevicePathSize;\r
-  UINTN                     OptionDevicePathSize;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *OptionDevicePath;\r
-  UINT8                     *TempPtr;\r
-  CHAR16                    *Description;\r
-\r
-  Status        = EFI_SUCCESS;\r
-  BootOrder     = NULL;\r
-  BootOrderSize = 0;\r
-\r
-  BootOrder = BdsLibGetVariableAndSize (\r
-                L"BootOrder",\r
-                &gEfiGlobalVariableGuid,\r
-                &BootOrderSize\r
-                );\r
-  if (NULL == BootOrder) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  DevicePath = DevicePathFromHandle (Handle);\r
-  if (DevicePath == NULL) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-  DevicePathSize = GetDevicePathSize (DevicePath);\r
-\r
-  Index = 0;\r
-  while (Index < BootOrderSize / sizeof (UINT16)) {\r
-    UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);\r
-    BootOptionVar = BdsLibGetVariableAndSize (\r
-                      BootOption,\r
-                      &gEfiGlobalVariableGuid,\r
-                      &BootOptionSize\r
-                      );\r
-    if (NULL == BootOptionVar) {\r
-      gBS->FreePool (BootOrder);\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    TempPtr = BootOptionVar;\r
-    TempPtr += sizeof (UINT32) + sizeof (UINT16);\r
-    Description = (CHAR16 *) TempPtr;\r
-    TempPtr += StrSize ((CHAR16 *) TempPtr);\r
-    OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;\r
-    OptionDevicePathSize = GetDevicePathSize (OptionDevicePath);\r
-\r
-    //\r
-    // Check whether the device path match\r
-    //\r
-    if ((OptionDevicePathSize == DevicePathSize) &&\r
-        (CompareMem (DevicePath, OptionDevicePath, DevicePathSize) == 0)) {\r
-      BdsDeleteBootOption (BootOrder[Index], BootOrder, &BootOrderSize);\r
-      gBS->FreePool (BootOptionVar);\r
-      break;\r
-    }\r
-\r
-    gBS->FreePool (BootOptionVar);\r
-    Index++;\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  L"BootOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  BootOrderSize,\r
-                  BootOrder\r
-                  );\r
-\r
-  gBS->FreePool (BootOrder);\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsDeleteAllInvalidEfiBootOption (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Delete all invalid EFI boot options. The probable invalid boot option could\r
-  be Removable media or Network boot device.\r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS           - Delete all invalid boot option success\r
-\r
-  EFI_NOT_FOUND         - Variable "BootOrder" is not found\r
-\r
-  EFI_OUT_OF_RESOURCES  - Lack of memory resource\r
-\r
-  Other                 - Error return value from SetVariable()\r
-\r
---*/\r
-{\r
-  UINT16                    *BootOrder;\r
-  UINT8                     *BootOptionVar;\r
-  UINTN                     BootOrderSize;\r
-  UINTN                     BootOptionSize;\r
-  EFI_STATUS                Status;\r
-  UINTN                     Index;\r
-  UINTN                     Index2;\r
-  UINT16                    BootOption[BOOT_OPTION_MAX_CHAR];\r
-  UINTN                     OptionDevicePathSize;\r
-  EFI_DEVICE_PATH_PROTOCOL  *TempDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *LastDeviceNode;\r
-  EFI_DEVICE_PATH_PROTOCOL  *OptionDevicePath;\r
-  UINT8                     *TempPtr;\r
-  CHAR16                    *Description;\r
-  EFI_HANDLE                Handle;\r
-  BOOLEAN                   NeedDelete;\r
-\r
-  Status        = EFI_SUCCESS;\r
-  BootOrder     = NULL;\r
-  BootOrderSize = 0;\r
-\r
-  BootOrder = BdsLibGetVariableAndSize (\r
-                L"BootOrder",\r
-                &gEfiGlobalVariableGuid,\r
-                &BootOrderSize\r
-                );\r
-  if (NULL == BootOrder) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  Index = 0;\r
-  while (Index < BootOrderSize / sizeof (UINT16)) {\r
-    UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);\r
-    BootOptionVar = BdsLibGetVariableAndSize (\r
-                      BootOption,\r
-                      &gEfiGlobalVariableGuid,\r
-                      &BootOptionSize\r
-                      );\r
-    if (NULL == BootOptionVar) {\r
-      gBS->FreePool (BootOrder);\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    TempPtr = BootOptionVar;\r
-    TempPtr += sizeof (UINT32) + sizeof (UINT16);\r
-    Description = (CHAR16 *) TempPtr;\r
-    TempPtr += StrSize ((CHAR16 *) TempPtr);\r
-    OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;\r
-    OptionDevicePathSize = GetDevicePathSize (OptionDevicePath);\r
-\r
-    //\r
-    // Skip legacy boot option (BBS boot device)\r
-    //\r
-    if ((DevicePathType (OptionDevicePath) == BBS_DEVICE_PATH) &&\r
-        (DevicePathSubType (OptionDevicePath) == BBS_BBS_DP)) {\r
-      gBS->FreePool (BootOptionVar);\r
-      Index++;\r
-      continue;\r
-    }\r
-\r
-    TempDevicePath = OptionDevicePath;\r
-    LastDeviceNode = OptionDevicePath;\r
-    while (!EfiIsDevicePathEnd (TempDevicePath)) {\r
-      LastDeviceNode = TempDevicePath;\r
-      TempDevicePath = EfiNextDevicePathNode (TempDevicePath);\r
-    }\r
-    //\r
-    // Skip the boot option that point to a file, since the device path in \r
-    // removable media boot option doesn't contains a file name.\r
-    //\r
-    if (((DevicePathType (LastDeviceNode) == MEDIA_DEVICE_PATH) &&\r
-         (DevicePathSubType (LastDeviceNode) == MEDIA_FILEPATH_DP)) ||\r
-        //\r
-        // Skip boot option for internal Shell, it's always valid\r
-        //\r
-        (EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode) != NULL)) {\r
-      gBS->FreePool (BootOptionVar);\r
-      Index++;\r
-      continue;\r
-    }\r
-\r
-    NeedDelete = TRUE;\r
-    //\r
-    // Check if it's a valid boot option for removable media\r
-    //\r
-    TempDevicePath = OptionDevicePath;\r
-    Status = gBS->LocateDevicePath (\r
-                    &gEfiSimpleFileSystemProtocolGuid,\r
-                    &TempDevicePath,\r
-                    &Handle\r
-                    );\r
-    if (!EFI_ERROR (Status)) {\r
-      NeedDelete = FALSE;\r
-    }\r
-    //\r
-    // Check if it's a valid boot option for network boot device\r
-    //\r
-    TempDevicePath = OptionDevicePath;\r
-    Status = gBS->LocateDevicePath (\r
-                    &gEfiLoadFileProtocolGuid,\r
-                    &TempDevicePath,\r
-                    &Handle\r
-                    );\r
-    if (!EFI_ERROR (Status)) {\r
-      NeedDelete = FALSE;\r
-    }\r
-\r
-    if (NeedDelete) {\r
-      //\r
-      // Delete this invalid boot option "Boot####"\r
-      //\r
-      Status = gRT->SetVariable (\r
-                      BootOption,\r
-                      &gEfiGlobalVariableGuid,\r
-                      EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                      0,\r
-                      NULL\r
-                      );\r
-      //\r
-      // Mark this boot option in boot order as deleted\r
-      //\r
-      BootOrder[Index] = 0xffff;\r
-    }\r
-\r
-    gBS->FreePool (BootOptionVar);\r
-    Index++;\r
-  }\r
-\r
-  //\r
-  // Adjust boot order array\r
-  //\r
-  Index2 = 0;\r
-  for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) {\r
-    if (BootOrder[Index] != 0xffff) {\r
-      BootOrder[Index2] = BootOrder[Index];\r
-      Index2 ++;\r
-    }\r
-  }\r
-  Status = gRT->SetVariable (\r
-                  L"BootOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  Index2 * sizeof (UINT16),\r
-                  BootOrder\r
-                  );\r
-\r
-  gBS->FreePool (BootOrder);\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibEnumerateAllBootOption (\r
-  IN OUT LIST_ENTRY      *BdsBootOptionList\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function will enumerate all possible boot device in the system,\r
-  it will only excute once of every boot.\r
-\r
-Arguments:\r
-\r
-  BdsBootOptionList - The header of the link list which indexed all\r
-                      current boot options\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - Finished all the boot device enumerate and create\r
-                the boot option base on that boot device\r
-\r
---*/\r
-{\r
-  EFI_STATUS                    Status;\r
-  UINT16                        BootOptionNumber;\r
-  UINTN                         NumberFileSystemHandles;\r
-  EFI_HANDLE                    *FileSystemHandles;\r
-  EFI_BLOCK_IO_PROTOCOL         *BlkIo;\r
-  UINTN                         Index;\r
-  UINTN                         NumberLoadFileHandles;\r
-  EFI_HANDLE                    *LoadFileHandles;\r
-  VOID                          *ProtocolInstance;\r
-  EFI_FIRMWARE_VOLUME_PROTOCOL  *Fv;\r
-  UINTN                         FvHandleCount;\r
-  EFI_HANDLE                    *FvHandleBuffer;\r
-  EFI_FV_FILETYPE               Type;\r
-  UINTN                         Size;\r
-  EFI_FV_FILE_ATTRIBUTES        Attributes;\r
-  UINT32                        AuthenticationStatus;\r
-  EFI_DEVICE_PATH_PROTOCOL      *FilePath;\r
-  EFI_HANDLE                    ImageHandle;\r
-  EFI_LOADED_IMAGE_PROTOCOL     *ImageInfo;\r
-  BOOLEAN                       NeedDelete;\r
-\r
-  BootOptionNumber = 0;\r
-\r
-  //\r
-  // If the boot device enumerate happened, just get the boot\r
-  // device from the boot order variable\r
-  //\r
-  if (mEnumBootDevice) {\r
-    BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");\r
-    return EFI_SUCCESS;\r
-  }\r
-  //\r
-  // Notes: this dirty code is to get the legacy boot option from the\r
-  // BBS table and create to variable as the EFI boot option, it should\r
-  // be removed after the CSM can provide legacy boot option directly\r
-  //\r
-  REFRESH_LEGACY_BOOT_OPTIONS;\r
-\r
-  //\r
-  // Delete invalid boot option\r
-  //\r
-  BdsDeleteAllInvalidEfiBootOption ();\r
-  //\r
-  // Parse removable media\r
-  //\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiSimpleFileSystemProtocolGuid,\r
-        NULL,\r
-        &NumberFileSystemHandles,\r
-        &FileSystemHandles\r
-        );\r
-  for (Index = 0; Index < NumberFileSystemHandles; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    FileSystemHandles[Index],\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    (VOID **) &BlkIo\r
-                    );\r
-    if (!EFI_ERROR (Status)) {\r
-      if (!BlkIo->Media->RemovableMedia) {\r
-        //\r
-        // If the file system handle supports a BlkIo protocol,\r
-        // skip the removable media devices\r
-        //\r
-        continue;\r
-      }\r
-    }\r
-\r
-    //\r
-    // Do the removable Media thing. \EFI\BOOT\boot{machinename}.EFI\r
-    //  machinename is ia32, ia64, x64, ...\r
-    //\r
-    FilePath = FileDevicePath (FileSystemHandles[Index], EFI_REMOVABLE_MEDIA_FILE_NAME);\r
-    NeedDelete = TRUE;\r
-    Status = gBS->LoadImage (\r
-                    TRUE,\r
-                    mBdsImageHandle,\r
-                    FilePath,\r
-                    NULL,\r
-                    0,\r
-                    &ImageHandle\r
-                    );\r
-    if (!EFI_ERROR(Status)) {\r
-      //\r
-      // Verify the image is a EFI application (and not a driver)\r
-      //\r
-      Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &ImageInfo);\r
-      ASSERT (!EFI_ERROR(Status));\r
-\r
-      if (ImageInfo->ImageCodeType == EfiLoaderCode) {\r
-        NeedDelete = FALSE;\r
-      }\r
-    }\r
-\r
-    if (NeedDelete) {\r
-      //\r
-      // No such file or the file is not a EFI application, delete this boot option\r
-      //\r
-      BdsLibDeleteOptionFromHandle (FileSystemHandles[Index]);\r
-    } else {\r
-      BdsLibBuildOptionFromHandle (FileSystemHandles[Index], BdsBootOptionList);\r
-      BootOptionNumber++;\r
-    }\r
-  }\r
-\r
-  if (NumberFileSystemHandles) {\r
-    gBS->FreePool (FileSystemHandles);\r
-  }\r
-  //\r
-  // Parse Network Boot Device\r
-  //\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiSimpleNetworkProtocolGuid,\r
-        NULL,\r
-        &NumberLoadFileHandles,\r
-        &LoadFileHandles\r
-        );\r
-  for (Index = 0; Index < NumberLoadFileHandles; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    LoadFileHandles[Index],\r
-                    &gEfiLoadFileProtocolGuid,\r
-                    (VOID **) &ProtocolInstance\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    BdsLibBuildOptionFromHandle (LoadFileHandles[Index], BdsBootOptionList);\r
-    BootOptionNumber++;\r
-  }\r
-\r
-  if (NumberLoadFileHandles) {\r
-    gBS->FreePool (LoadFileHandles);\r
-  }\r
-  //\r
-  // Check if we have on flash shell\r
-  //\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiFirmwareVolumeProtocolGuid,\r
-        NULL,\r
-        &FvHandleCount,\r
-        &FvHandleBuffer\r
-        );\r
-  for (Index = 0; Index < FvHandleCount; Index++) {\r
-    gBS->HandleProtocol (\r
-          FvHandleBuffer[Index],\r
-          &gEfiFirmwareVolumeProtocolGuid,\r
-          (VOID **) &Fv\r
-          );\r
-\r
-    Status = Fv->ReadFile (\r
-                  Fv,\r
-                  &gEfiShellFileGuid,\r
-                  NULL,\r
-                  &Size,\r
-                  &Type,\r
-                  &Attributes,\r
-                  &AuthenticationStatus\r
-                  );\r
-    if (EFI_ERROR (Status)) {\r
-      //\r
-      // Skip if no shell file in the FV\r
-      //\r
-      continue;\r
-    }\r
-    //\r
-    // Build the shell boot option\r
-    //\r
-    BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);\r
-    BootOptionNumber++;\r
-  }\r
-\r
-  if (FvHandleCount) {\r
-    gBS->FreePool (FvHandleBuffer);\r
-  }\r
-  //\r
-  // Make sure every boot only have one time\r
-  // boot device enumerate\r
-  //\r
-  BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");\r
-  mEnumBootDevice = TRUE;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-BdsLibBuildOptionFromHandle (\r
-  IN  EFI_HANDLE             Handle,\r
-  IN  LIST_ENTRY             *BdsBootOptionList\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Build the boot option with the handle parsed in\r
-  \r
-Arguments:\r
-\r
-  Handle - The handle which present the device path to create boot option\r
-  \r
-  BdsBootOptionList - The header of the link list which indexed all current\r
-                      boot options\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  CHAR16                    *TempString;\r
-\r
-  DevicePath  = DevicePathFromHandle (Handle);\r
-  TempString  = DevicePathToStr (DevicePath);\r
-\r
-  //\r
-  // Create and register new boot option\r
-  //\r
-  BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, TempString, L"BootOrder");\r
-}\r
-\r
-VOID\r
-BdsLibBuildOptionFromShell (\r
-  IN EFI_HANDLE              Handle,\r
-  IN OUT LIST_ENTRY          *BdsBootOptionList\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Build the on flash shell boot option with the handle parsed in\r
-  \r
-Arguments:\r
-\r
-  Handle - The handle which present the device path to create on flash shell\r
-           boot option\r
-  \r
-  BdsBootOptionList - The header of the link list which indexed all current\r
-                      boot options\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL          *DevicePath;\r
-  MEDIA_FW_VOL_FILEPATH_DEVICE_PATH ShellNode;\r
-\r
-  DevicePath = DevicePathFromHandle (Handle);\r
-\r
-  //\r
-  // Build the shell device path\r
-  //\r
-  EfiInitializeFwVolDevicepathNode (&ShellNode, &gEfiShellFileGuid);\r
-  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &ShellNode);\r
-\r
-  //\r
-  // Create and register the shell boot option\r
-  //\r
-  BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, L"Internal EFI Shell", L"BootOrder");\r
-\r
-}\r
-\r
-VOID\r
-BdsLibBootNext (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Boot from the EFI1.1 spec defined "BootNext" variable\r
-  \r
-Arguments:\r
-\r
-  None\r
-  \r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  UINT16            *BootNext;\r
-  UINTN             BootNextSize;\r
-  CHAR16            Buffer[20];\r
-  BDS_COMMON_OPTION *BootOption;\r
-  LIST_ENTRY        TempList;\r
-  UINTN             ExitDataSize;\r
-  CHAR16            *ExitData;\r
-\r
-  //\r
-  // Init the boot option name buffer and temp link list\r
-  //\r
-  InitializeListHead (&TempList);\r
-  ZeroMem (Buffer, sizeof (Buffer));\r
-\r
-  BootNext = BdsLibGetVariableAndSize (\r
-              L"BootNext",\r
-              &gEfiGlobalVariableGuid,\r
-              &BootNextSize\r
-              );\r
-\r
-  //\r
-  // Clear the boot next variable first\r
-  //\r
-  if (BootNext != NULL) {\r
-    gRT->SetVariable (\r
-          L"BootNext",\r
-          &gEfiGlobalVariableGuid,\r
-          EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-          0,\r
-          BootNext\r
-          );\r
-\r
-    //\r
-    // Start to build the boot option and try to boot\r
-    //\r
-    UnicodeSPrint (Buffer, sizeof (Buffer), L"Boot%04x", *BootNext);\r
-    BootOption = BdsLibVariableToOption (&TempList, Buffer);\r
-    BdsLibConnectDevicePath (BootOption->DevicePath);\r
-    BdsLibBootViaBootOption (BootOption, BootOption->DevicePath, &ExitDataSize, &ExitData);\r
-  }\r
-\r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsBoot.c.orig b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsBoot.c.orig
deleted file mode 100644 (file)
index 574c528..0000000
+++ /dev/null
@@ -1,798 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsBoot.c\r
-\r
-Abstract:\r
-\r
-  BDS Lib functions which relate with create or process the boot\r
-  option.\r
-\r
---*/\r
-#include "Performance.h"\r
-\r
-BOOLEAN mEnumBootDevice = FALSE;\r
-\r
-EFI_STATUS\r
-BdsLibDoLegacyBoot (\r
-  IN  BDS_COMMON_OPTION           *Option\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Boot the legacy system with the boot option\r
-\r
-Arguments:\r
-\r
-  Option           - The legacy boot option which have BBS device path\r
-\r
-Returns:\r
-\r
-  EFI_UNSUPPORTED  - There is no legacybios protocol, do not support\r
-                     legacy boot.\r
-                         \r
-  EFI_STATUS       - Return the status of LegacyBios->LegacyBoot ().\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-\r
-  Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL,
-                               (void **)&LegacyBios);\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // If no LegacyBios protocol we do not support legacy boot\r
-    //\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-  //\r
-  // Notes: if we seperate the int 19, then we don't need to refresh BBS\r
-  //\r
-  BdsRefreshBbsTableForBoot (Option);\r
-\r
-  //\r
-  // Write boot to OS performance data to a file\r
-  //\r
-  PERF_CODE (\r
-    WriteBootToOsPerformanceData ();\r
-  );\r
-\r
-\r
-  DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Legacy Boot: %S\n", Option->Description));\r
-  return LegacyBios->LegacyBoot (\r
-                      LegacyBios,\r
-                      (BBS_BBS_DEVICE_PATH *) Option->DevicePath,\r
-                      Option->LoadOptionsSize,\r
-                      Option->LoadOptions\r
-                      );\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibBootViaBootOption (\r
-  IN  BDS_COMMON_OPTION             * Option,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL      * DevicePath,\r
-  OUT UINTN                         *ExitDataSize,\r
-  OUT CHAR16                        **ExitData OPTIONAL\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Process the boot option follow the EFI 1.1 specification and \r
-  special treat the legacy boot option with BBS_DEVICE_PATH.\r
-\r
-Arguments:\r
-\r
-  Option       - The boot option need to be processed\r
-  \r
-  DevicePath   - The device path which describe where to load \r
-                 the boot image or the legcy BBS device path \r
-                 to boot the legacy OS\r
-\r
-  ExitDataSize - Returned directly from gBS->StartImage ()\r
-\r
-  ExitData     - Returned directly from gBS->StartImage ()\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS   - Status from gBS->StartImage (),\r
-                  or BdsBootByDiskSignatureAndPartition ()\r
-\r
-  EFI_NOT_FOUND - If the Device Path is not found in the system\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_HANDLE                Handle;\r
-  EFI_HANDLE                ImageHandle;\r
-  EFI_DEVICE_PATH_PROTOCOL  *TempDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *FilePath;\r
-  EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;\r
-  EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;\r
-\r
-  *ExitDataSize = 0;\r
-  *ExitData     = NULL;\r
-\r
-  //\r
-  // Notes: put EFI64 ROM Shadow Solution\r
-  //\r
-  EFI64_SHADOW_ALL_LEGACY_ROM ();\r
-\r
-  //\r
-  // Notes: this code can be remove after the s3 script table\r
-  // hook on the event EFI_EVENT_SIGNAL_READY_TO_BOOT or\r
-  // EFI_EVENT_SIGNAL_LEGACY_BOOT\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiAcpiS3SaveProtocolGuid, NULL,
-                               (VOID **)&AcpiS3Save);\r
-  if (!EFI_ERROR (Status)) {\r
-    AcpiS3Save->S3Save (AcpiS3Save, NULL);\r
-  }\r
-  //\r
-  // If it's Device Path that starts with a hard drive path,\r
-  // this routine will do the booting.\r
-  //\r
-  Status = BdsBootByDiskSignatureAndPartition (\r
-            Option,\r
-            (HARDDRIVE_DEVICE_PATH *) DevicePath,\r
-            Option->LoadOptionsSize,\r
-            Option->LoadOptions,\r
-            ExitDataSize,\r
-            ExitData\r
-            );\r
-  if (!EFI_ERROR (Status)) {\r
-    //\r
-    // If we found a disk signature and partition device path return success\r
-    //\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  EfiSignalEventReadyToBoot ();\r
-\r
-  //\r
-  // Set Boot Current\r
-  //\r
-  gRT->SetVariable (\r
-        L"BootCurrent",\r
-        &gEfiGlobalVariableGuid,\r
-        EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-        sizeof (UINT16),\r
-        &Option->BootCurrent\r
-        );\r
-\r
-  if ((DevicePathType (Option->DevicePath) == BBS_DEVICE_PATH) &&\r
-      (DevicePathSubType (Option->DevicePath) == BBS_BBS_DP)\r
-    ) {\r
-    //\r
-    // Check to see if we should legacy BOOT. If yes then do the legacy boot\r
-    //\r
-    return BdsLibDoLegacyBoot (Option);\r
-  }\r
-\r
-  DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Booting EFI 1.1 way %S\n", Option->Description));\r
-\r
-  Status = gBS->LoadImage (\r
-                  TRUE,\r
-                  mBdsImageHandle,\r
-                  DevicePath,\r
-                  NULL,\r
-                  0,\r
-                  &ImageHandle\r
-                  );\r
-\r
-  //\r
-  // If we didn't find an image, we may need to load the default\r
-  // boot behavior for the device.\r
-  //\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // Find a Simple File System protocol on the device path. If the remaining\r
-    // device path is set to end then no Files are being specified, so try\r
-    // the removable media file name.\r
-    //\r
-    TempDevicePath = DevicePath;\r
-    Status = gBS->LocateDevicePath (\r
-                    &gEfiSimpleFileSystemProtocolGuid,\r
-                    &TempDevicePath,\r
-                    &Handle\r
-                    );\r
-    if (!EFI_ERROR (Status) && IsDevicePathEnd (TempDevicePath)) {\r
-      FilePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);\r
-      if (FilePath) {\r
-        Status = gBS->LoadImage (\r
-                        TRUE,\r
-                        mBdsImageHandle,\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
-        }\r
-      }\r
-    } else {\r
-      Status = EFI_NOT_FOUND;\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
-  // Provide the image with it's load options\r
-  //\r
-  Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid,
-                               (VOID **) &ImageInfo);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  if (Option->LoadOptionsSize != 0) {\r
-    ImageInfo->LoadOptionsSize  = Option->LoadOptionsSize;\r
-    ImageInfo->LoadOptions      = Option->LoadOptions;\r
-  }\r
-  //\r
-  // Before calling the image, enable the Watchdog Timer for\r
-  // the 5 Minute period\r
-  //\r
-  gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);\r
-\r
-  Status = gBS->StartImage (ImageHandle, ExitDataSize, ExitData);\r
-  DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Image Return Status = %r\n", Status));\r
-\r
-  //\r
-  // Clear the Watchdog Timer after the image returns\r
-  //\r
-  gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);\r
-\r
-Done:\r
-  //\r
-  // Clear Boot Current\r
-  //\r
-  gRT->SetVariable (\r
-        L"BootCurrent",\r
-        &gEfiGlobalVariableGuid,\r
-        EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-        0,\r
-        &Option->BootCurrent\r
-        );\r
-\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsBootByDiskSignatureAndPartition (\r
-  IN  BDS_COMMON_OPTION          * Option,\r
-  IN  HARDDRIVE_DEVICE_PATH      * HardDriveDevicePath,\r
-  IN  UINT32                     LoadOptionsSize,\r
-  IN  VOID                       *LoadOptions,\r
-  OUT UINTN                      *ExitDataSize,\r
-  OUT CHAR16                     **ExitData OPTIONAL\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Check to see if a hard ware device path was passed in. If it was then search\r
-  all the block IO devices for the passed in hard drive device path. \r
-  \r
-Arguments:\r
-\r
-  Option - The current processing boot option.\r
-\r
-  HardDriveDevicePath - EFI Device Path to boot, if it starts with a hard\r
-                        drive device path.\r
-\r
-  LoadOptionsSize - Passed into gBS->StartImage ()\r
-                    via the loaded image protocol.\r
-\r
-  LoadOptions     - Passed into gBS->StartImage ()\r
-                    via the loaded image protocol.\r
-\r
-  ExitDataSize - returned directly from gBS->StartImage ()\r
-\r
-  ExitData     - returned directly from gBS->StartImage ()\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS   - Status from gBS->StartImage (),\r
-                  or BootByDiskSignatureAndPartition ()\r
-                  \r
-  EFI_NOT_FOUND - If the Device Path is not found in the system\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  UINTN                     BlockIoHandleCount;\r
-  EFI_HANDLE                *BlockIoBuffer;\r
-  EFI_DEVICE_PATH_PROTOCOL  *BlockIoDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *BlockIoHdDevicePath;\r
-  HARDDRIVE_DEVICE_PATH     *TmpHdPath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevicePath;\r
-  UINTN                     Index;\r
-  BOOLEAN                   DevicePathMatch;\r
-  HARDDRIVE_DEVICE_PATH     *TempPath;\r
-\r
-  *ExitDataSize = 0;\r
-  *ExitData     = NULL;\r
-\r
-  if ( !((DevicePathType (&HardDriveDevicePath->Header) == MEDIA_DEVICE_PATH) &&\r
-          (DevicePathSubType (&HardDriveDevicePath->Header) == MEDIA_HARDDRIVE_DP))\r
-        ) {\r
-    //\r
-    // If the HardDriveDevicePath does not start with a Hard Drive Device Path\r
-    // exit.\r
-    //\r
-    return EFI_NOT_FOUND;\r
-  }\r
-  //\r
-  // The boot device have already been connected\r
-  //\r
-  Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiBlockIoProtocolGuid, NULL, &BlockIoHandleCount, &BlockIoBuffer);\r
-  if (EFI_ERROR (Status) || BlockIoHandleCount == 0) {\r
-    //\r
-    // If there was an error or there are no device handles that support\r
-    // the BLOCK_IO Protocol, then return.\r
-    //\r
-    return EFI_NOT_FOUND;\r
-  }\r
-  //\r
-  // Loop through all the device handles that support the BLOCK_IO Protocol\r
-  //\r
-  for (Index = 0; Index < BlockIoHandleCount; Index++) {\r
-\r
-    Status = gBS->HandleProtocol (BlockIoBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID *) &BlockIoDevicePath);\r
-    if (EFI_ERROR (Status) || BlockIoDevicePath == NULL) {\r
-      continue;\r
-    }\r
-    //\r
-    // Make PreviousDevicePath == the device path node before the end node\r
-    //\r
-    DevicePath          = BlockIoDevicePath;\r
-    BlockIoHdDevicePath = NULL;\r
-\r
-    //\r
-    // find HardDriver device path node\r
-    //\r
-    while (!IsDevicePathEnd (DevicePath)) {\r
-      if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) && \r
-          (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)\r
-          ) {\r
-        BlockIoHdDevicePath = DevicePath;\r
-        break;\r
-      }\r
-\r
-      DevicePath = NextDevicePathNode (DevicePath);\r
-    }\r
-\r
-    if (BlockIoHdDevicePath == NULL) {\r
-      continue;\r
-    }\r
-    //\r
-    // See if the harddrive device path in blockio matches the orig Hard Drive Node\r
-    //\r
-    DevicePathMatch = FALSE;\r
-\r
-    TmpHdPath       = (HARDDRIVE_DEVICE_PATH *) BlockIoHdDevicePath;\r
-    TempPath        = (HARDDRIVE_DEVICE_PATH *) BdsLibUnpackDevicePath ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);\r
-\r
-    //\r
-    // Only several fields will be checked. NOT whole NODE\r
-    //\r
-    if ( TmpHdPath->PartitionNumber == TempPath->PartitionNumber &&\r
-        TmpHdPath->MBRType == TempPath->MBRType &&\r
-        TmpHdPath->SignatureType == TempPath->SignatureType &&\r
-        CompareGuid ((EFI_GUID *) TmpHdPath->Signature, (EFI_GUID *) TempPath->Signature)) {\r
-      //\r
-      // Get the matched device path\r
-      //\r
-      DevicePathMatch = TRUE;\r
-    }\r
-    //\r
-    // Only do the boot, when devicepath match\r
-    //\r
-    if (DevicePathMatch) {\r
-      //\r
-      // Combine the Block IO and Hard Drive Device path together and try\r
-      // to boot from it.\r
-      //\r
-      DevicePath    = NextDevicePathNode ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);\r
-      NewDevicePath = AppendDevicePath (BlockIoDevicePath, DevicePath);\r
-\r
-      //\r
-      // Recursive boot with new device path\r
-      //\r
-      Status = BdsLibBootViaBootOption (Option, NewDevicePath, ExitDataSize, ExitData);\r
-      if (!EFI_ERROR (Status)) {\r
-        break;\r
-      }\r
-    }\r
-  }\r
-\r
-  gBS->FreePool (BlockIoBuffer);\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibEnumerateAllBootOption (\r
-  IN OUT LIST_ENTRY      *BdsBootOptionList\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function will enumerate all possible boot device in the system,\r
-  it will only excute once of every boot.\r
-\r
-Arguments:\r
-\r
-  BdsBootOptionList - The header of the link list which indexed all\r
-                      current boot options\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - Finished all the boot device enumerate and create\r
-                the boot option base on that boot device\r
-\r
---*/\r
-{\r
-  EFI_STATUS                    Status;\r
-  UINT16                        BootOptionNumber;\r
-  UINTN                         NumberFileSystemHandles;\r
-  EFI_HANDLE                    *FileSystemHandles;\r
-  UINTN                         NumberBlkIoHandles;\r
-  EFI_HANDLE                    *BlkIoHandles;\r
-  EFI_BLOCK_IO_PROTOCOL         *BlkIo;\r
-  UINTN                         Index;\r
-  EFI_DEVICE_PATH_PROTOCOL      *DevicePath;\r
-  UINTN                         NumberLoadFileHandles;\r
-  EFI_HANDLE                    *LoadFileHandles;\r
-  VOID                          *ProtocolInstance;\r
-  EFI_FIRMWARE_VOLUME_PROTOCOL  *Fv;\r
-  UINTN                         FvHandleCount;\r
-  EFI_HANDLE                    *FvHandleBuffer;\r
-  EFI_FV_FILETYPE               Type;\r
-  UINTN                         Size;\r
-  EFI_FV_FILE_ATTRIBUTES        Attributes;\r
-  UINT32                        AuthenticationStatus;\r
-\r
-  BootOptionNumber = 0;\r
-\r
-  //\r
-  // If the boot device enumerate happened, just get the boot\r
-  // device from the boot order variable\r
-  //\r
-  if (mEnumBootDevice) {\r
-    BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");\r
-    return EFI_SUCCESS;\r
-  }\r
-  //\r
-  // Notes: this dirty code is to get the legacy boot option from the\r
-  // BBS table and create to variable as the EFI boot option, it should\r
-  // be removed after the CSM can provide legacy boot option directly\r
-  //\r
-  REFRESH_LEGACY_BOOT_OPTIONS;\r
-\r
-  //\r
-  // Check all the block IO to create boot option\r
-  //\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiBlockIoProtocolGuid,\r
-        NULL,\r
-        &NumberBlkIoHandles,\r
-        &BlkIoHandles\r
-        );\r
-  for (Index = 0; Index < NumberBlkIoHandles; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    BlkIoHandles[Index],\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    (VOID **) &BlkIo\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    if (!BlkIo->Media->RemovableMedia) {\r
-      //\r
-      // Skip fixed Media device on first loop interration\r
-      //\r
-      continue;\r
-    }\r
-\r
-    DevicePath = DevicePathFromHandle (BlkIoHandles[Index]);\r
-    if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) && \r
-        (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)\r
-        ) {\r
-      //\r
-      // Build the boot option\r
-      //\r
-      BdsLibBuildOptionFromHandle (BlkIoHandles[Index], BdsBootOptionList);\r
-      BootOptionNumber++;\r
-    }\r
-  }\r
-\r
-  if (NumberBlkIoHandles) {\r
-    gBS->FreePool (BlkIoHandles);\r
-  }\r
-  //\r
-  // Parse Fixed Disk Devices.\r
-  //\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiSimpleFileSystemProtocolGuid,\r
-        NULL,\r
-        &NumberFileSystemHandles,\r
-        &FileSystemHandles\r
-        );\r
-  for (Index = 0; Index < NumberFileSystemHandles; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    FileSystemHandles[Index],\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    (VOID **) &BlkIo\r
-                    );\r
-    if (!EFI_ERROR (Status)) {\r
-      if (BlkIo->Media->RemovableMedia) {\r
-        //\r
-        // If the file system handle supports a BlkIo protocol,\r
-        // skip the removable media devices\r
-        //\r
-        continue;\r
-      }\r
-    }\r
-\r
-    DevicePath = DevicePathFromHandle (FileSystemHandles[Index]);\r
-    if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) && \r
-        (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)\r
-        ) {\r
-      //\r
-      // If the FileSystem protocol does not contain a BlkIo protocol,\r
-      // then build it\r
-      //\r
-      BdsLibBuildOptionFromHandle (FileSystemHandles[Index], BdsBootOptionList);\r
-      BootOptionNumber++;\r
-    }\r
-  }\r
-\r
-  if (NumberFileSystemHandles) {\r
-    gBS->FreePool (FileSystemHandles);\r
-  }\r
-  //\r
-  // Parse Network Boot Device\r
-  //\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiSimpleNetworkProtocolGuid,\r
-        NULL,\r
-        &NumberLoadFileHandles,\r
-        &LoadFileHandles\r
-        );\r
-  for (Index = 0; Index < NumberLoadFileHandles; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    LoadFileHandles[Index],\r
-                    &gEfiLoadFileProtocolGuid,\r
-                    (VOID **) &ProtocolInstance\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    BdsLibBuildOptionFromHandle (LoadFileHandles[Index], BdsBootOptionList);\r
-    BootOptionNumber++;\r
-  }\r
-\r
-  if (NumberLoadFileHandles) {\r
-    gBS->FreePool (LoadFileHandles);\r
-  }\r
-  //\r
-  // Check if we have on flash shell\r
-  //\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiFirmwareVolumeProtocolGuid,\r
-        NULL,\r
-        &FvHandleCount,\r
-        &FvHandleBuffer\r
-        );\r
-  for (Index = 0; Index < FvHandleCount; Index++) {\r
-    gBS->HandleProtocol (\r
-          FvHandleBuffer[Index],\r
-          &gEfiFirmwareVolumeProtocolGuid,\r
-          (VOID **) &Fv\r
-          );\r
-\r
-    Status = Fv->ReadFile (\r
-                  Fv,\r
-                  &gEfiShellFileGuid,\r
-                  NULL,\r
-                  &Size,\r
-                  &Type,\r
-                  &Attributes,\r
-                  &AuthenticationStatus\r
-                  );\r
-    if (EFI_ERROR (Status)) {\r
-      //\r
-      // Skip if no shell file in the FV\r
-      //\r
-      continue;\r
-    }\r
-    //\r
-    // Build the shell boot option\r
-    //\r
-    BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);\r
-    BootOptionNumber++;\r
-  }\r
-\r
-  if (FvHandleCount) {\r
-    gBS->FreePool (FvHandleBuffer);\r
-  }\r
-  //\r
-  // Make sure every boot only have one time\r
-  // boot device enumerate\r
-  //\r
-  BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");\r
-  mEnumBootDevice = TRUE;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-BdsLibBuildOptionFromHandle (\r
-  IN  EFI_HANDLE             Handle,\r
-  IN  LIST_ENTRY             *BdsBootOptionList\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Build the boot option with the handle parsed in\r
-  \r
-Arguments:\r
-\r
-  Handle - The handle which present the device path to create boot option\r
-  \r
-  BdsBootOptionList - The header of the link list which indexed all current\r
-                      boot options\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  CHAR16                    *TempString;\r
-\r
-  DevicePath  = DevicePathFromHandle (Handle);\r
-  TempString  = DevicePathToStr (DevicePath);\r
-\r
-  //\r
-  // Create and register new boot option\r
-  //\r
-  BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, TempString, L"BootOrder");\r
-}\r
-\r
-VOID\r
-BdsLibBuildOptionFromShell (\r
-  IN EFI_HANDLE              Handle,\r
-  IN OUT LIST_ENTRY          *BdsBootOptionList\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Build the on flash shell boot option with the handle parsed in\r
-  \r
-Arguments:\r
-\r
-  Handle - The handle which present the device path to create on flash shell\r
-           boot option\r
-  \r
-  BdsBootOptionList - The header of the link list which indexed all current\r
-                      boot options\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL          *DevicePath;\r
-  MEDIA_FW_VOL_FILEPATH_DEVICE_PATH ShellNode;\r
-\r
-  DevicePath = DevicePathFromHandle (Handle);\r
-\r
-  //\r
-  // Build the shell device path\r
-  //\r
-  EfiInitializeFwVolDevicepathNode (&ShellNode, &gEfiShellFileGuid);\r
-  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &ShellNode);\r
-\r
-  //\r
-  // Create and register the shell boot option\r
-  //\r
-  BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, L"Internal EFI Shell", L"BootOrder");\r
-\r
-}\r
-\r
-VOID\r
-BdsLibBootNext (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Boot from the EFI1.1 spec defined "BootNext" variable\r
-  \r
-Arguments:\r
-\r
-  None\r
-  \r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  UINT16            *BootNext;\r
-  UINTN             BootNextSize;\r
-  CHAR16            Buffer[20];\r
-  BDS_COMMON_OPTION *BootOption;\r
-  LIST_ENTRY        TempList;\r
-  UINTN             ExitDataSize;\r
-  CHAR16            *ExitData;\r
-\r
-  //\r
-  // Init the boot option name buffer and temp link list\r
-  //\r
-  InitializeListHead (&TempList);\r
-  ZeroMem (Buffer, sizeof (Buffer));\r
-\r
-  BootNext = BdsLibGetVariableAndSize (\r
-              L"BootNext",\r
-              &gEfiGlobalVariableGuid,\r
-              &BootNextSize\r
-              );\r
-\r
-  //\r
-  // Clear the boot next variable first\r
-  //\r
-  if (BootNext != NULL) {\r
-    gRT->SetVariable (\r
-          L"BootNext",\r
-          &gEfiGlobalVariableGuid,\r
-          EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-          0,\r
-          BootNext\r
-          );\r
-\r
-    //\r
-    // Start to build the boot option and try to boot\r
-    //\r
-    UnicodeSPrint (Buffer, sizeof (Buffer), L"Boot%04x", *BootNext);\r
-    BootOption = BdsLibVariableToOption (&TempList, Buffer);\r
-    BdsLibConnectDevicePath (BootOption->DevicePath);\r
-    BdsLibBootViaBootOption (BootOption, BootOption->DevicePath, &ExitDataSize, &ExitData);\r
-  }\r
-\r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsConnect.c b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsConnect.c
deleted file mode 100644 (file)
index 9c649f1..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsConnect.c\r
-\r
-Abstract:\r
-\r
-  BDS Lib functions which relate with connect the device\r
-\r
---*/\r
-\r
-VOID\r
-BdsLibConnectAll (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  This function will connect all the system driver to controller\r
-  first, and then special connect the default console, this make\r
-  sure all the system controller avialbe and the platform default\r
-  console connected.\r
-  \r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  //\r
-  // Connect the platform console first\r
-  //\r
-  BdsLibConnectAllDefaultConsoles ();\r
-\r
-  //\r
-  // Generic way to connect all the drivers\r
-  //\r
-  BdsLibConnectAllDriversToAllControllers ();\r
-\r
-  //\r
-  // Here we have the assumption that we have already had\r
-  // platform default console\r
-  //\r
-  BdsLibConnectAllDefaultConsoles ();\r
-}\r
-\r
-VOID\r
-BdsLibGenericConnectAll (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  This function will connect all the system drivers to all controllers\r
-  first, and then connect all the console devices the system current \r
-  have. After this we should get all the device work and console avariable\r
-  if the system have console device.\r
-  \r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  //\r
-  // Most generic way to connect all the drivers\r
-  //\r
-  BdsLibConnectAllDriversToAllControllers ();\r
-  BdsLibConnectAllConsoles ();\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibConnectDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePathToConnect\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  This function will create all handles associate with every device\r
-  path node. If the handle associate with one device path node can not\r
-  be created success, then still give one chance to do the dispatch,\r
-  which load the missing drivers if possible.\r
-  \r
-Arguments:\r
-\r
-  DevicePathToConnect  - The device path which will be connected, it can\r
-                         be a multi-instance device path\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS          - All handles associate with every device path \r
-                         node have been created\r
-  \r
-  EFI_OUT_OF_RESOURCES - There is no resource to create new handles\r
-  \r
-  EFI_NOT_FOUND        - Create the handle associate with one device \r
-                         path node failed\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *CopyOfDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Instance;\r
-  EFI_DEVICE_PATH_PROTOCOL  *RemainingDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Next;\r
-  EFI_HANDLE                Handle;\r
-  EFI_HANDLE                PreviousHandle;\r
-  UINTN                     Size;\r
-\r
-  if (DevicePathToConnect == NULL) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  DevicePath        = DuplicateDevicePath (DevicePathToConnect);\r
-  CopyOfDevicePath  = DevicePath;\r
-  if (DevicePath == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  do {\r
-    //\r
-    // The outer loop handles multi instance device paths.\r
-    // Only console variables contain multiple instance device paths.\r
-    //\r
-    // After this call DevicePath points to the next Instance\r
-    //\r
-    Instance  = GetNextDevicePathInstance (&DevicePath, &Size);\r
-    Next      = Instance;\r
-    while (!IsDevicePathEndType (Next)) {\r
-      Next = NextDevicePathNode (Next);\r
-    }\r
-\r
-    SetDevicePathEndNode (Next);\r
-\r
-    //\r
-    // Start the real work of connect with RemainingDevicePath\r
-    //\r
-    PreviousHandle = NULL;\r
-    do {\r
-      //\r
-      // Find the handle that best matches the Device Path. If it is only a\r
-      // partial match the remaining part of the device path is returned in\r
-      // RemainingDevicePath.\r
-      //\r
-      RemainingDevicePath = Instance;\r
-      Status              = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &Handle);\r
-\r
-      if (!EFI_ERROR (Status)) {\r
-        if (Handle == PreviousHandle) {\r
-          //\r
-          // If no forward progress is made try invoking the Dispatcher.\r
-          // A new FV may have been added to the system an new drivers\r
-          // may now be found.\r
-          // Status == EFI_SUCCESS means a driver was dispatched\r
-          // Status == EFI_NOT_FOUND means no new drivers were dispatched\r
-          //\r
-          Status = gDS->Dispatch ();\r
-        }\r
-\r
-        if (!EFI_ERROR (Status)) {\r
-          PreviousHandle = Handle;\r
-          //\r
-          // Connect all drivers that apply to Handle and RemainingDevicePath,\r
-          // the Recursive flag is FALSE so only one level will be expanded.\r
-          //\r
-          // Do not check the connect status here, if the connect controller fail,\r
-          // then still give the chance to do dispatch, because partial\r
-          // RemainingDevicepath may be in the new FV\r
-          //\r
-          // 1. If the connect fail, RemainingDevicepath and handle will not\r
-          //    change, so next time will do the dispatch, then dispatch's status\r
-          //    will take effect\r
-          // 2. If the connect success, the RemainingDevicepath and handle will\r
-          //    change, then avoid the dispatch, we have chance to continue the\r
-          //    next connection\r
-          //\r
-          gBS->ConnectController (Handle, NULL, RemainingDevicePath, FALSE);\r
-        }\r
-      }\r
-      //\r
-      // Loop until RemainingDevicePath is an empty device path\r
-      //\r
-    } while (!EFI_ERROR (Status) && !IsDevicePathEnd (RemainingDevicePath));\r
-\r
-  } while (DevicePath != NULL);\r
-\r
-  if (CopyOfDevicePath != NULL) {\r
-    gBS->FreePool (CopyOfDevicePath);\r
-  }\r
-  //\r
-  // All handle with DevicePath exists in the handle database\r
-  //\r
-  return Status;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibConnectAllEfi (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function will connect all current system handles recursively. The\r
-  connection will finish until every handle's child handle created if it have.\r
-  \r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS          - All handles and it's child handle have been connected\r
-  \r
-  EFI_STATUS           - Return the status of gBS->LocateHandleBuffer(). \r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  UINTN       HandleCount;\r
-  EFI_HANDLE  *HandleBuffer;\r
-  UINTN       Index;\r
-\r
-  Status = gBS->LocateHandleBuffer (\r
-                  AllHandles,\r
-                  NULL,\r
-                  NULL,\r
-                  &HandleCount,\r
-                  &HandleBuffer\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  for (Index = 0; Index < HandleCount; Index++) {\r
-    Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);\r
-  }\r
-\r
-  gBS->FreePool (HandleBuffer);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibDisconnectAllEfi (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function will disconnect all current system handles. The disconnection\r
-  will finish until every handle have been disconnected.\r
-  \r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS          - All handles have been disconnected\r
-  \r
-  EFI_STATUS           - Return the status of gBS->LocateHandleBuffer(). \r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  UINTN       HandleCount;\r
-  EFI_HANDLE  *HandleBuffer;\r
-  UINTN       Index;\r
-\r
-  //\r
-  // Disconnect all\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  AllHandles,\r
-                  NULL,\r
-                  NULL,\r
-                  &HandleCount,\r
-                  &HandleBuffer\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  for (Index = 0; Index < HandleCount; Index++) {\r
-    Status = gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);\r
-  }\r
-\r
-  gBS->FreePool (HandleBuffer);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-BdsLibConnectAllDriversToAllControllers (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Connects all drivers to all controllers. \r
-  This function make sure all the current system driver will manage\r
-  the correspoinding controllers if have. And at the same time, make\r
-  sure all the system controllers have driver to manage it if have. \r
-  \r
-Arguments:\r
-  \r
-  None\r
-  \r
-Returns:\r
-  \r
-  None\r
-  \r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-\r
-  do {\r
-    //\r
-    // Connect All EFI 1.10 drivers following EFI 1.10 algorithm\r
-    //\r
-    BdsLibConnectAllEfi ();\r
-\r
-    //\r
-    // Check to see if it's possible to dispatch an more DXE drivers.\r
-    // The BdsLibConnectAllEfi () may have made new DXE drivers show up.\r
-    // If anything is Dispatched Status == EFI_SUCCESS and we will try\r
-    // the connect again.\r
-    //\r
-    Status = gDS->Dispatch ();\r
-\r
-  } while (!EFI_ERROR (Status));\r
-\r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsConsole.c b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsConsole.c
deleted file mode 100644 (file)
index 47a79ff..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsConsole.c\r
-\r
-Abstract:\r
-\r
-  BDS Lib functions which contain all the code to connect console device\r
-\r
---*/\r
-\r
-BOOLEAN\r
-IsNvNeed (\r
-  IN CHAR16 *ConVarName\r
-  )\r
-{\r
-  CHAR16 *Ptr;\r
-  \r
-  Ptr = ConVarName;\r
-  \r
-  //\r
-  // If the variable includes "Dev" at last, we consider\r
-  // it does not support NV attribute.\r
-  //\r
-  while (*Ptr) {\r
-    Ptr++;\r
-  }\r
-  \r
-  if ((*(Ptr - 3) == 'D') && (*(Ptr - 2) == 'e') && (*(Ptr - 1) == 'v')) {\r
-    return FALSE;\r
-  } else {\r
-    return TRUE;\r
-  }\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibUpdateConsoleVariable (\r
-  IN  CHAR16                    *ConVarName,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *CustomizedConDevicePath,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *ExclusiveDevicePath\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function update console variable based on ConVarName, it can \r
-  add or remove one specific console device path from the variable\r
-\r
-Arguments:\r
-\r
-  ConVarName   - Console related variable name, ConIn, ConOut, ErrOut.\r
-\r
-  CustomizedConDevicePath - The console device path which will be added to\r
-                            the console variable ConVarName, this parameter\r
-                            can not be multi-instance.\r
-\r
-  ExclusiveDevicePath     - The console device path which will be removed\r
-                            from the console variable ConVarName, this\r
-                            parameter can not be multi-instance.\r
-\r
-Returns:\r
-\r
-  EFI_UNSUPPORTED         - Add or remove the same device path.\r
-  \r
-  EFI_SUCCESS             - Success add or remove the device path from \r
-                            the console variable.\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_DEVICE_PATH_PROTOCOL  *VarConsole;\r
-  UINTN                     DevicePathSize;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *TempNewDevicePath;\r
-  UINT32                    Attributes;\r
-\r
-  VarConsole      = NULL;\r
-  DevicePathSize  = 0;\r
-  Status          = EFI_UNSUPPORTED;\r
-\r
-  //\r
-  // Notes: check the device path point, here should check\r
-  // with compare memory\r
-  //\r
-  if (CustomizedConDevicePath == ExclusiveDevicePath) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-  //\r
-  // Delete the ExclusiveDevicePath from current default console\r
-  //\r
-  VarConsole = BdsLibGetVariableAndSize (\r
-                ConVarName,\r
-                &gEfiGlobalVariableGuid,\r
-                &DevicePathSize\r
-                );\r
-                \r
-  //\r
-  // Initialize NewDevicePath\r
-  //\r
-  NewDevicePath  = VarConsole;\r
-  \r
-  //\r
-  // If ExclusiveDevicePath is even the part of the instance in VarConsole, delete it.\r
-  // In the end, NewDevicePath is the final device path.\r
-  //\r
-  if (ExclusiveDevicePath != NULL && VarConsole != NULL) {\r
-      NewDevicePath = BdsLibDelPartMatchInstance (VarConsole, ExclusiveDevicePath);\r
-  }\r
-  //\r
-  // Try to append customized device path to NewDevicePath.\r
-  //\r
-  if (CustomizedConDevicePath != NULL) {\r
-    if (!BdsLibMatchDevicePaths (NewDevicePath, CustomizedConDevicePath)) {\r
-      //\r
-      // Check if there is part of CustomizedConDevicePath in NewDevicePath, delete it.\r
-      //\r
-      NewDevicePath = BdsLibDelPartMatchInstance (NewDevicePath, CustomizedConDevicePath);\r
-      //\r
-      // In the first check, the default console variable will be null,\r
-      // just append current customized device path\r
-      //\r
-      TempNewDevicePath = NewDevicePath;\r
-      NewDevicePath = AppendDevicePathInstance (NewDevicePath, CustomizedConDevicePath);\r
-      BdsLibSafeFreePool(TempNewDevicePath);\r
-    }\r
-  }\r
-  \r
-  //\r
-  // The attribute for ConInDev, ConOutDev and ErrOutDev does not include NV.\r
-  //\r
-  if (IsNvNeed(ConVarName)) {\r
-    //\r
-    // ConVarName has NV attribute.\r
-    //\r
-    Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE;\r
-  } else {\r
-    //\r
-    // ConVarName does not have NV attribute.\r
-    //\r
-    Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS;\r
-  }\r
-  \r
-  //\r
-  // Finally, Update the variable of the default console by NewDevicePath\r
-  //\r
-  gRT->SetVariable (\r
-        ConVarName,\r
-        &gEfiGlobalVariableGuid,\r
-        Attributes,\r
-        GetDevicePathSize (NewDevicePath),\r
-        NewDevicePath\r
-        );\r
-\r
-  if (VarConsole == NewDevicePath) {\r
-    BdsLibSafeFreePool(VarConsole);\r
-  } else {\r
-    BdsLibSafeFreePool(VarConsole);\r
-    BdsLibSafeFreePool(NewDevicePath);\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibConnectConsoleVariable (\r
-  IN  CHAR16                 *ConVarName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Connect the console device base on the variable ConVarName, if\r
-  device path of the ConVarName is multi-instance device path, if\r
-  anyone of the instances is connected success, then this function\r
-  will return success.\r
-\r
-Arguments:\r
-\r
-  ConVarName   - Console related variable name, ConIn, ConOut, ErrOut.\r
-\r
-Returns:\r
-\r
-  EFI_NOT_FOUND           - There is not any console devices connected success\r
-  \r
-  EFI_SUCCESS             - Success connect any one instance of the console\r
-                            device path base on the variable ConVarName.\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_DEVICE_PATH_PROTOCOL  *StartDevicePath;\r
-  UINTN                     VariableSize;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Instance;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Next;\r
-  EFI_DEVICE_PATH_PROTOCOL  *CopyOfDevicePath;\r
-  UINTN                     Size;\r
-  BOOLEAN                   DeviceExist;\r
-\r
-  Status      = EFI_SUCCESS;\r
-  DeviceExist = FALSE;\r
-\r
-  //\r
-  // Check if the console variable exist\r
-  //\r
-  StartDevicePath = BdsLibGetVariableAndSize (\r
-                      ConVarName,\r
-                      &gEfiGlobalVariableGuid,\r
-                      &VariableSize\r
-                      );\r
-  if (StartDevicePath == NULL) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  CopyOfDevicePath = StartDevicePath;\r
-  do {\r
-    //\r
-    // Check every instance of the console variable\r
-    //\r
-    Instance  = GetNextDevicePathInstance (&CopyOfDevicePath, &Size);\r
-    Next      = Instance;\r
-    while (!IsDevicePathEndType (Next)) {\r
-      Next = NextDevicePathNode (Next);\r
-    }\r
-\r
-    SetDevicePathEndNode (Next);\r
-\r
-    //\r
-    // Connect the instance device path\r
-    //\r
-    Status = BdsLibConnectDevicePath (Instance);\r
-    if (EFI_ERROR (Status)) {\r
-      //\r
-      // Delete the instance from the console varialbe\r
-      //\r
-      BdsLibUpdateConsoleVariable (ConVarName, NULL, Instance);\r
-    } else {\r
-      DeviceExist = TRUE;\r
-    }\r
-    BdsLibSafeFreePool(Instance);\r
-  } while (CopyOfDevicePath != NULL);\r
-\r
-  gBS->FreePool (StartDevicePath);\r
-\r
-  if (DeviceExist == FALSE) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-BdsLibConnectAllConsoles (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function will search every simpletxt devive in current system,\r
-  and make every simpletxt device as pertantial console device.\r
-\r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  UINTN                     Index;\r
-  EFI_DEVICE_PATH_PROTOCOL  *ConDevicePath;\r
-  UINTN                     HandleCount;\r
-  EFI_HANDLE                *HandleBuffer;\r
-\r
-  Index         = 0;\r
-  HandleCount   = 0;\r
-  HandleBuffer  = NULL;\r
-  ConDevicePath = NULL;\r
-\r
-  //\r
-  // Update all the console varables\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiSimpleTextInProtocolGuid,\r
-                  NULL,\r
-                  &HandleCount,\r
-                  &HandleBuffer\r
-                  );\r
-  for (Index = 0; Index < HandleCount; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    HandleBuffer[Index],\r
-                    &gEfiDevicePathProtocolGuid,\r
-                    (VOID **) &ConDevicePath\r
-                    );\r
-    BdsLibUpdateConsoleVariable (L"ConIn", ConDevicePath, NULL);\r
-  }\r
-\r
-  BdsLibSafeFreePool(HandleBuffer);\r
-\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiSimpleTextOutProtocolGuid,\r
-                  NULL,\r
-                  &HandleCount,\r
-                  &HandleBuffer\r
-                  );\r
-  for (Index = 0; Index < HandleCount; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    HandleBuffer[Index],\r
-                    &gEfiDevicePathProtocolGuid,\r
-                    (VOID **) &ConDevicePath\r
-                    );\r
-    BdsLibUpdateConsoleVariable (L"ConOut", ConDevicePath, NULL);\r
-    BdsLibUpdateConsoleVariable (L"ErrOut", ConDevicePath, NULL);\r
-  }\r
-\r
-  BdsLibSafeFreePool(HandleBuffer);\r
-\r
-  //\r
-  // Connect all console variables\r
-  //\r
-  BdsLibConnectAllDefaultConsoles ();\r
-\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibConnectAllDefaultConsoles (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function will connect console device base on the console \r
-  device variable ConIn, ConOut and ErrOut.\r
-\r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS      - At least one of the ConIn and ConOut device have\r
-                     been connected success.\r
-                     \r
-  EFI_STATUS       - Return the status of BdsLibConnectConsoleVariable ().\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-\r
-  //\r
-  // Connect all default console variables\r
-  //\r
-\r
-  //\r
-  // Because possibly the platform is legacy free, in such case,\r
-  // ConIn devices (Serial Port and PS2 Keyboard ) does not exist, \r
-  // so we need not check the status.\r
-  //  \r
-  BdsLibConnectConsoleVariable (L"ConIn");\r
-\r
-  // \r
-  // It seems impossible not to have any ConOut device on platform,\r
-  // so we check the status here.\r
-  //\r
-  Status = BdsLibConnectConsoleVariable (L"ConOut");\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-  //\r
-  // Special treat the err out device, becaues the null\r
-  // err out var is legal.\r
-  //\r
-  BdsLibConnectConsoleVariable (L"ErrOut");\r
-\r
-  return EFI_SUCCESS;\r
-\r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c
deleted file mode 100644 (file)
index 2662ba7..0000000
+++ /dev/null
@@ -1,1120 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsMisc.c\r
-\r
-Abstract:\r
-\r
-  Misc BDS library function\r
-\r
---*/\r
-\r
-#define MAX_STRING_LEN        200\r
-static BOOLEAN   mFeaturerSwitch = TRUE;\r
-static BOOLEAN   mResetRequired  = FALSE;\r
-extern UINT16 gPlatformBootTimeOutDefault;\r
-\r
-UINT16\r
-BdsLibGetTimeout (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Return the default value for system Timeout variable.\r
-\r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-  \r
-  Timeout value.\r
-\r
---*/\r
-{\r
-  UINT16      Timeout;\r
-  UINTN       Size;\r
-  EFI_STATUS  Status;\r
-\r
-  //\r
-  // Return Timeout variable or 0xffff if no valid\r
-  // Timeout variable exists.\r
-  //\r
-  Size    = sizeof (UINT16);\r
-  Status  = gRT->GetVariable (L"Timeout", &gEfiGlobalVariableGuid, NULL, &Size, &Timeout);\r
-  if (!EFI_ERROR (Status)) {\r
-    return Timeout;\r
-  }\r
-  //\r
-  // To make the current EFI Automatic-Test activity possible, just add\r
-  // following code to make AutoBoot enabled when this variable is not\r
-  // present.\r
-  // This code should be removed later.\r
-  //\r
-  Timeout = gPlatformBootTimeOutDefault;\r
-\r
-  //\r
-  // Notes: Platform should set default variable if non exists on all error cases!!!\r
-  //\r
-  Status = gRT->SetVariable (\r
-                  L"Timeout",\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  sizeof (UINT16),\r
-                  &Timeout\r
-                  );\r
-  return Timeout;\r
-}\r
-\r
-VOID\r
-BdsLibLoadDrivers (\r
-  IN LIST_ENTRY               *BdsDriverLists\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  The function will go through the driver optoin link list, load and start\r
-  every driver the driver optoin device path point to.\r
-\r
-Arguments:\r
-\r
-  BdsDriverLists   - The header of the current driver option link list\r
-\r
-Returns:\r
-  \r
-  None\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  LIST_ENTRY                *Link;\r
-  BDS_COMMON_OPTION         *Option;\r
-  EFI_HANDLE                ImageHandle;\r
-  EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;\r
-  UINTN                     ExitDataSize;\r
-  CHAR16                    *ExitData;\r
-  BOOLEAN                   ReconnectAll;\r
-\r
-  ReconnectAll = FALSE;\r
-\r
-  //\r
-  // Process the driver option\r
-  //\r
-  for (Link = BdsDriverLists->ForwardLink; Link != BdsDriverLists; Link = Link->ForwardLink) {\r
-    Option = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);\r
-    //\r
-    // If a load option is not marked as LOAD_OPTION_ACTIVE,\r
-    // the boot manager will not automatically load the option.\r
-    //\r
-    if (!IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_ACTIVE)) {\r
-      continue;\r
-    }\r
-    //\r
-    // If a driver load option is marked as LOAD_OPTION_FORCE_RECONNECT,\r
-    // then all of the EFI drivers in the system will be disconnected and\r
-    // reconnected after the last driver load option is processed.\r
-    //\r
-    if (IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_FORCE_RECONNECT)) {\r
-      ReconnectAll = TRUE;\r
-    }\r
-    //\r
-    // Make sure the driver path is connected.\r
-    //\r
-    BdsLibConnectDevicePath (Option->DevicePath);\r
-\r
-    //\r
-    // Load and start the image that Driver#### describes\r
-    //\r
-    Status = gBS->LoadImage (\r
-                    FALSE,\r
-                    mBdsImageHandle,\r
-                    Option->DevicePath,\r
-                    NULL,\r
-                    0,\r
-                    &ImageHandle\r
-                    );\r
-\r
-    if (!EFI_ERROR (Status)) {\r
-      gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid,
-                          (VOID **)&ImageInfo);\r
-\r
-      //\r
-      // Verify whether this image is a driver, if not,\r
-      // exit it and continue to parse next load option\r
-      //\r
-      if (ImageInfo->ImageCodeType != EfiBootServicesCode && ImageInfo->ImageCodeType != EfiRuntimeServicesCode) {\r
-        gBS->Exit (ImageHandle, EFI_INVALID_PARAMETER, 0, NULL);\r
-        continue;\r
-      }\r
-\r
-      if (Option->LoadOptionsSize != 0) {\r
-        ImageInfo->LoadOptionsSize  = Option->LoadOptionsSize;\r
-        ImageInfo->LoadOptions      = Option->LoadOptions;\r
-      }\r
-      //\r
-      // Before calling the image, enable the Watchdog Timer for\r
-      // the 5 Minute period\r
-      //\r
-      gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);\r
-\r
-      Status = gBS->StartImage (ImageHandle, &ExitDataSize, &ExitData);\r
-      DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Driver Return Status = %r\n", Status));\r
-\r
-      //\r
-      // Clear the Watchdog Timer after the image returns\r
-      //\r
-      gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);\r
-    }\r
-  }\r
-  //\r
-  // Process the LOAD_OPTION_FORCE_RECONNECT driver option\r
-  //\r
-  if (ReconnectAll) {\r
-    BdsLibDisconnectAllEfi ();\r
-    BdsLibConnectAll ();\r
-  }\r
-\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibRegisterNewOption (\r
-  IN  LIST_ENTRY                     *BdsOptionList,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL       *DevicePath,\r
-  IN  CHAR16                         *String,\r
-  IN  CHAR16                         *VariableName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  This function will register the new boot#### or driver#### option base on\r
-  the VariableName. The new registered boot#### or driver#### will be linked\r
-  to BdsOptionList and also update to the VariableName. After the boot#### or\r
-  driver#### updated, the BootOrder or DriverOrder will also be updated.\r
-\r
-Arguments:\r
-\r
-  BdsOptionList    - The header of the boot#### or driver#### link list\r
-  \r
-  DevicePath       - The device path which the boot####\r
-                     or driver#### option present\r
-                     \r
-  String           - The description of the boot#### or driver####\r
-  \r
-  VariableName     - Indicate if the boot#### or driver#### option\r
-\r
-Returns:\r
-  \r
-  EFI_SUCCESS      - The boot#### or driver#### have been success registered\r
-  \r
-  EFI_STATUS       - Return the status of gRT->SetVariable ().\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  UINTN                     Index;\r
-  UINT16                    MaxOptionNumber;\r
-  UINT16                    RegisterOptionNumber;\r
-  UINT16                    *TempOptionPtr;\r
-  UINTN                     TempOptionSize;\r
-  UINT16                    *OptionOrderPtr;\r
-  VOID                      *OptionPtr;\r
-  UINTN                     OptionSize;\r
-  UINT8                     *TempPtr;\r
-  EFI_DEVICE_PATH_PROTOCOL  *OptionDevicePath;\r
-  CHAR16                    *Description;\r
-  CHAR16                    OptionName[10];\r
-  BOOLEAN                   UpdateBootDevicePath;\r
-\r
-  OptionPtr             = NULL;\r
-  OptionSize            = 0;\r
-  TempPtr               = NULL;\r
-  OptionDevicePath      = NULL;\r
-  Description           = NULL;\r
-  MaxOptionNumber       = 0;\r
-  OptionOrderPtr        = NULL;\r
-  UpdateBootDevicePath  = FALSE;\r
-  ZeroMem (OptionName, sizeof (OptionName));\r
-\r
-  TempOptionSize = 0;\r
-  TempOptionPtr = BdsLibGetVariableAndSize (\r
-                    VariableName,\r
-                    &gEfiGlobalVariableGuid,\r
-                    &TempOptionSize\r
-                    );\r
-  //\r
-  // Compare with current option variable\r
-  //\r
-  for (Index = 0; Index < TempOptionSize / sizeof (UINT16); Index++) {\r
-    //\r
-    // Got the max option#### number\r
-    //\r
-    if (MaxOptionNumber < TempOptionPtr[Index]) {\r
-      MaxOptionNumber = TempOptionPtr[Index];\r
-    }\r
-\r
-    if (*VariableName == 'B') {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", TempOptionPtr[Index]);\r
-    } else {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", TempOptionPtr[Index]);\r
-    }\r
-\r
-    OptionPtr = BdsLibGetVariableAndSize (\r
-                  OptionName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  &OptionSize\r
-                  );\r
-    TempPtr = OptionPtr;\r
-    TempPtr += sizeof (UINT32) + sizeof (UINT16);\r
-    Description = (CHAR16 *) TempPtr;\r
-    TempPtr += StrSize ((CHAR16 *) TempPtr);\r
-    OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;\r
-\r
-    //\r
-    // Notes: the description may will change base on the GetStringToken\r
-    //\r
-    if (CompareMem (Description, String, StrSize (Description)) == 0) {\r
-      if (CompareMem (OptionDevicePath, DevicePath, GetDevicePathSize (OptionDevicePath)) == 0) {\r
-        //\r
-        // Got the option, so just return\r
-        //\r
-        gBS->FreePool (OptionPtr);\r
-        gBS->FreePool (TempOptionPtr);\r
-        return EFI_SUCCESS;\r
-      } else {\r
-        //\r
-        // Boot device path changed, need update.\r
-        //\r
-        UpdateBootDevicePath = TRUE;\r
-        break;\r
-      }\r
-    }\r
-\r
-    gBS->FreePool (OptionPtr);\r
-  }\r
-\r
-  OptionSize          = sizeof (UINT32) + sizeof (UINT16) + StrSize (String) + GetDevicePathSize (DevicePath);\r
-  OptionPtr           = AllocateZeroPool (OptionSize);\r
-  TempPtr             = OptionPtr;\r
-  *(UINT32 *) TempPtr = LOAD_OPTION_ACTIVE;\r
-  TempPtr += sizeof (UINT32);\r
-  *(UINT16 *) TempPtr = (UINT16) GetDevicePathSize (DevicePath);\r
-  TempPtr += sizeof (UINT16);\r
-  CopyMem (TempPtr, String, StrSize (String));\r
-  TempPtr += StrSize (String);\r
-  CopyMem (TempPtr, DevicePath, GetDevicePathSize (DevicePath));\r
-\r
-  if (UpdateBootDevicePath) {\r
-    //\r
-    // The number in option#### to be updated\r
-    //\r
-    RegisterOptionNumber = TempOptionPtr[Index];\r
-  } else {\r
-    //\r
-    // The new option#### number\r
-    //\r
-    RegisterOptionNumber = MaxOptionNumber + 1;\r
-  }\r
-\r
-  if (*VariableName == 'B') {\r
-    UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", RegisterOptionNumber);\r
-  } else {\r
-    UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", RegisterOptionNumber);\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  OptionName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  OptionSize,\r
-                  OptionPtr\r
-                  );\r
-  if (EFI_ERROR (Status) || UpdateBootDevicePath) {\r
-    gBS->FreePool (OptionPtr);\r
-    gBS->FreePool (TempOptionPtr);\r
-    return Status;\r
-  }\r
-\r
-  gBS->FreePool (OptionPtr);\r
-\r
-  //\r
-  // Update the option order variable\r
-  //\r
-  OptionOrderPtr = AllocateZeroPool ((Index + 1) * sizeof (UINT16));\r
-  CopyMem (OptionOrderPtr, TempOptionPtr, Index * sizeof (UINT16));\r
-  OptionOrderPtr[Index] = RegisterOptionNumber;\r
-  Status = gRT->SetVariable (\r
-                  VariableName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  (Index + 1) * sizeof (UINT16),\r
-                  OptionOrderPtr\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (TempOptionPtr);\r
-    gBS->FreePool (OptionOrderPtr);\r
-    return Status;\r
-  }\r
-\r
-  gBS->FreePool (TempOptionPtr);\r
-  gBS->FreePool (OptionOrderPtr);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-BDS_COMMON_OPTION *\r
-BdsLibVariableToOption (\r
-  IN OUT LIST_ENTRY               *BdsCommonOptionList,\r
-  IN  CHAR16                      *VariableName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Build the boot#### or driver#### option from the VariableName, the \r
-  build boot#### or driver#### will also be linked to BdsCommonOptionList\r
-  \r
-Arguments:\r
-\r
-  BdsCommonOptionList - The header of the boot#### or driver#### option link list\r
-\r
-  VariableName - EFI Variable name indicate if it is boot#### or driver####\r
-\r
-Returns:\r
-\r
-  BDS_COMMON_OPTION    - Get the option just been created\r
-\r
-  NULL                 - Failed to get the new option\r
-\r
---*/\r
-{\r
-  UINT32                    Attribute;\r
-  UINT16                    FilePathSize;\r
-  UINT8                     *Variable;\r
-  UINT8                     *TempPtr;\r
-  UINTN                     VariableSize;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  BDS_COMMON_OPTION         *Option;\r
-  VOID                      *LoadOptions;\r
-  UINT32                    LoadOptionsSize;\r
-  CHAR16                    *Description;\r
-\r
-  //\r
-  // Read the variable. We will never free this data.\r
-  //\r
-  Variable = BdsLibGetVariableAndSize (\r
-              VariableName,\r
-              &gEfiGlobalVariableGuid,\r
-              &VariableSize\r
-              );\r
-  if (Variable == NULL) {\r
-    return NULL;\r
-  }\r
-  //\r
-  // Notes: careful defined the variable of Boot#### or\r
-  // Driver####, consider use some macro to abstract the code\r
-  //\r
-  //\r
-  // Get the option attribute\r
-  //\r
-  TempPtr   = Variable;\r
-  Attribute = *(UINT32 *) Variable;\r
-  TempPtr += sizeof (UINT32);\r
-\r
-  //\r
-  // Get the option's device path size\r
-  //\r
-  FilePathSize = *(UINT16 *) TempPtr;\r
-  TempPtr += sizeof (UINT16);\r
-\r
-  //\r
-  // Get the option's description string\r
-  //\r
-  Description = (CHAR16 *) TempPtr;\r
-\r
-  //\r
-  // Get the option's description string size\r
-  //\r
-  TempPtr += StrSize ((CHAR16 *) TempPtr);\r
-\r
-  //\r
-  // Get the option's device path\r
-  //\r
-  DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;\r
-  TempPtr += FilePathSize;\r
-\r
-  LoadOptions     = TempPtr;\r
-  LoadOptionsSize = (UINT32) (VariableSize - (UINTN) (TempPtr - Variable));\r
-\r
-  //\r
-  // The Console variables may have multiple device paths, so make\r
-  // an Entry for each one.\r
-  //\r
-  Option = AllocateZeroPool (sizeof (BDS_COMMON_OPTION));\r
-  if (Option == NULL) {\r
-    return NULL;\r
-  }\r
-\r
-  Option->Signature   = BDS_LOAD_OPTION_SIGNATURE;\r
-  Option->DevicePath  = AllocateZeroPool (GetDevicePathSize (DevicePath));\r
-  CopyMem (Option->DevicePath, DevicePath, GetDevicePathSize (DevicePath));\r
-  Option->Attribute   = Attribute;\r
-  Option->Description = AllocateZeroPool (StrSize (Description));\r
-  CopyMem (Option->Description, Description, StrSize (Description));\r
-  Option->LoadOptions = AllocateZeroPool (LoadOptionsSize);\r
-  CopyMem (Option->LoadOptions, LoadOptions, LoadOptionsSize);\r
-  Option->LoadOptionsSize = LoadOptionsSize;\r
-\r
-  //\r
-  // Insert active entry to BdsDeviceList\r
-  //\r
-  if ((Option->Attribute & LOAD_OPTION_ACTIVE) == LOAD_OPTION_ACTIVE) {\r
-    InsertTailList (BdsCommonOptionList, &Option->Link);\r
-    gBS->FreePool (Variable);\r
-    return Option;\r
-  }\r
-\r
-  gBS->FreePool (Variable);\r
-  gBS->FreePool (Option);\r
-  return NULL;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibBuildOptionFromVar (\r
-  IN  LIST_ENTRY                  *BdsCommonOptionList,\r
-  IN  CHAR16                      *VariableName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Process BootOrder, or DriverOrder variables, by calling\r
-  BdsLibVariableToOption () for each UINT16 in the variables.\r
-\r
-Arguments:\r
-\r
-  BdsCommonOptionList - The header of the option list base on variable\r
-                        VariableName\r
-\r
-  VariableName - EFI Variable name indicate the BootOrder or DriverOrder\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - Success create the boot option or driver option list\r
-\r
-  EFI_OUT_OF_RESOURCES - Failed to get the boot option or driver option list\r
-\r
---*/\r
-{\r
-  UINT16            *OptionOrder;\r
-  UINTN             OptionOrderSize;\r
-  UINTN             Index;\r
-  BDS_COMMON_OPTION *Option;\r
-  CHAR16            OptionName[20];\r
-\r
-  //\r
-  // Zero Buffer in order to get all BOOT#### variables\r
-  //\r
-  ZeroMem (OptionName, sizeof (OptionName));\r
-\r
-  //\r
-  // Read the BootOrder, or DriverOrder variable.\r
-  //\r
-  OptionOrder = BdsLibGetVariableAndSize (\r
-                  VariableName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  &OptionOrderSize\r
-                  );\r
-  if (OptionOrder == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  for (Index = 0; Index < OptionOrderSize / sizeof (UINT16); Index++) {\r
-    if (*VariableName == 'B') {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", OptionOrder[Index]);\r
-    } else {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", OptionOrder[Index]);\r
-    }\r
-    Option              = BdsLibVariableToOption (BdsCommonOptionList, OptionName);\r
-    Option->BootCurrent = OptionOrder[Index];\r
-\r
-  }\r
-\r
-  gBS->FreePool (OptionOrder);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibGetBootMode (\r
-  OUT EFI_BOOT_MODE       *BootMode\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Get boot mode by looking up configuration table and parsing HOB list\r
-\r
-Arguments:\r
-\r
-  BootMode - Boot mode from PEI handoff HOB.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - Successfully get boot mode\r
-  \r
-  EFI_NOT_FOUND - Can not find the current system boot mode\r
-\r
---*/\r
-{\r
-  EFI_HOB_HANDOFF_INFO_TABLE        *HobList;\r
-\r
-  HobList = GetHobList ();\r
-  ASSERT (HobList->Header.HobType == EFI_HOB_TYPE_HANDOFF);\r
-  *BootMode = HobList->BootMode;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID *\r
-BdsLibGetVariableAndSize (\r
-  IN  CHAR16              *Name,\r
-  IN  EFI_GUID            *VendorGuid,\r
-  OUT UINTN               *VariableSize\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Read the EFI variable (VendorGuid/Name) and return a dynamically allocated\r
-  buffer, and the size of the buffer. If failure return NULL.\r
-\r
-Arguments:\r
-\r
-  Name       - String part of EFI variable name\r
-\r
-  VendorGuid - GUID part of EFI variable name\r
-\r
-  VariableSize - Returns the size of the EFI variable that was read\r
-\r
-Returns:\r
-\r
-  Dynamically allocated memory that contains a copy of the EFI variable.\r
-  Caller is responsible freeing the buffer.\r
-\r
-  NULL - Variable was not read\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  UINTN       BufferSize;\r
-  VOID        *Buffer;\r
-\r
-  Buffer = NULL;\r
-\r
-  //\r
-  // Pass in a zero size buffer to find the required buffer size.\r
-  //\r
-  BufferSize  = 0;\r
-  Status      = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);\r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    //\r
-    // Allocate the buffer to return\r
-    //\r
-    Buffer = AllocateZeroPool (BufferSize);\r
-    if (Buffer == NULL) {\r
-      return NULL;\r
-    }\r
-    //\r
-    // Read variable into the allocated buffer.\r
-    //\r
-    Status = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);\r
-    if (EFI_ERROR (Status)) {\r
-      BufferSize = 0;\r
-    }\r
-  }\r
-\r
-  *VariableSize = BufferSize;\r
-  return Buffer;\r
-}\r
-\r
-VOID\r
-BdsLibSafeFreePool (\r
-  IN  VOID             *Buffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Free pool safely.\r
-\r
-Arguments:\r
-  \r
-  Buffer          - The allocated pool entry to free\r
-\r
-Returns:\r
-\r
-  Pointer of the buffer allocated.\r
-\r
---*/\r
-{\r
-  if (Buffer != NULL) {\r
-    gBS->FreePool (Buffer);\r
-    Buffer = NULL;\r
-  }\r
-}\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-BdsLibDelPartMatchInstance (\r
-  IN     EFI_DEVICE_PATH_PROTOCOL  *Multi,\r
-  IN     EFI_DEVICE_PATH_PROTOCOL  *Single\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Delete the instance in Multi which matches partly with Single instance\r
-\r
-Arguments:\r
-\r
-  Multi        - A pointer to a multi-instance device path data structure.\r
-\r
-  Single       - A pointer to a single-instance device path data structure.\r
-\r
-Returns:\r
-\r
-  This function will remove the device path instances in Multi which partly \r
-  match with the Single, and return the result device path. If there is no\r
-  remaining device path as a result, this function will return NULL.\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *Instance;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *TempNewDevicePath;\r
-  UINTN                     InstanceSize;\r
-  UINTN                     SingleDpSize;  \r
-  UINTN                     Size; \r
-  \r
-  NewDevicePath     = NULL;\r
-  TempNewDevicePath = NULL;\r
-\r
-  if (Multi == NULL || Single == NULL) {\r
-    return Multi;\r
-  }\r
-  \r
-  Instance        =  GetNextDevicePathInstance (&Multi, &InstanceSize);\r
-  SingleDpSize    =  GetDevicePathSize (Single) - END_DEVICE_PATH_LENGTH;\r
-  InstanceSize    -= END_DEVICE_PATH_LENGTH;\r
-\r
-  while (Instance != NULL) {\r
-\r
-    Size = (SingleDpSize < InstanceSize) ? SingleDpSize : InstanceSize;    \r
-        \r
-    if ((CompareMem (Instance, Single, Size) != 0)) {\r
-      //\r
-      // Append the device path instance which does not match with Single\r
-      //\r
-      TempNewDevicePath = NewDevicePath;\r
-      NewDevicePath = AppendDevicePathInstance (NewDevicePath, Instance);\r
-      BdsLibSafeFreePool(TempNewDevicePath);\r
-    }\r
-    BdsLibSafeFreePool(Instance);\r
-    Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);\r
-    InstanceSize  -= END_DEVICE_PATH_LENGTH;\r
-  }\r
-  \r
-  return NewDevicePath;\r
-}\r
-\r
-BOOLEAN\r
-BdsLibMatchDevicePaths (\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *Multi,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *Single\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function compares a device path data structure to that of all the nodes of a\r
-  second device path instance.\r
-\r
-Arguments:\r
-\r
-  Multi        - A pointer to a multi-instance device path data structure.\r
-\r
-  Single       - A pointer to a single-instance device path data structure.\r
-\r
-Returns:\r
-\r
-  TRUE   - If the Single is contained within Multi\r
-  \r
-  FALSE  - The Single is not match within Multi\r
-  \r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePathInst;\r
-  UINTN                     Size;\r
-\r
-  if (!Multi || !Single) {\r
-    return FALSE;\r
-  }\r
-\r
-  DevicePath      = Multi;\r
-  DevicePathInst  = GetNextDevicePathInstance (&DevicePath, &Size);\r
-\r
-  //\r
-  // Search for the match of 'Single' in 'Multi'\r
-  //\r
-  while (DevicePathInst != NULL) {\r
-    //\r
-    // If the single device path is found in multiple device paths,\r
-    // return success\r
-    //\r
-    if (CompareMem (Single, DevicePathInst, Size) == 0) {\r
-      gBS->FreePool (DevicePathInst);\r
-      return TRUE;\r
-    }\r
-\r
-    gBS->FreePool (DevicePathInst);\r
-    DevicePathInst = GetNextDevicePathInstance (&DevicePath, &Size);\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibOutputStrings (\r
-  IN EFI_SIMPLE_TEXT_OUT_PROTOCOL   *ConOut,\r
-  ...\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function prints a series of strings.\r
-\r
-Arguments:\r
-\r
-  ConOut               - Pointer to EFI_SIMPLE_TEXT_OUT_PROTOCOL\r
-\r
-  ...                  - A variable argument list containing series of strings,\r
-                         the last string must be NULL.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS          - Success print out the string using ConOut.\r
-  \r
-  EFI_STATUS           - Return the status of the ConOut->OutputString ().\r
-\r
---*/\r
-{\r
-  VA_LIST     args;\r
-  EFI_STATUS  Status;\r
-  CHAR16      *String;\r
-\r
-  Status = EFI_SUCCESS;\r
-  VA_START (args, ConOut);\r
-\r
-  while (!EFI_ERROR (Status)) {\r
-    //\r
-    // If String is NULL, then it's the end of the list\r
-    //\r
-    String = VA_ARG (args, CHAR16 *);\r
-    if (!String) {\r
-      break;\r
-    }\r
-\r
-    Status = ConOut->OutputString (ConOut, String);\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-//\r
-//  Following are BDS Lib functions which  contain all the code about setup browser reset reminder feature.\r
-//  Setup Browser reset reminder feature is that an reset reminder will be given before user leaves the setup browser  if \r
-//  user change any option setting which needs a reset to be effective, and  the reset will be applied according to  the user selection.\r
-//\r
-\r
-VOID\r
-EnableResetReminderFeature (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Enable the setup browser reset reminder feature.\r
-  This routine is used in platform tip. If the platform policy need the feature, use the routine to enable it.\r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mFeaturerSwitch = TRUE;\r
-} \r
-\r
-VOID\r
-DisableResetReminderFeature (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Disable the setup browser reset reminder feature.\r
-  This routine is used in platform tip. If the platform policy do not want the feature, use the routine to disable it.\r
-  \r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mFeaturerSwitch = FALSE;\r
-} \r
-\r
-VOID\r
-EnableResetRequired (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-   Record the info that  a reset is required.\r
-   A  module boolean variable is used to record whether a reset is required. \r
-  \r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mResetRequired = TRUE;\r
-} \r
-\r
-VOID\r
-DisableResetRequired (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-   Record the info that  no reset is required.\r
-   A  module boolean variable is used to record whether a reset is required. \r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mResetRequired = FALSE;\r
-} \r
-\r
-BOOLEAN\r
-IsResetReminderFeatureEnable (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Check whether platform policy enable the reset reminder feature. The default is enabled.\r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  return mFeaturerSwitch;\r
-}\r
-\r
-BOOLEAN\r
-IsResetRequired (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Check if  user changed any option setting which needs a system reset to be effective.\r
-  \r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  return mResetRequired;\r
-}\r
-\r
-VOID\r
-SetupResetReminder (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Check whether a reset is needed, and finish the reset reminder feature.\r
-  If a reset is needed, Popup a menu to notice user, and finish the feature \r
-  according to the user selection.\r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  EFI_STATUS                    Status;\r
-  EFI_FORM_BROWSER_PROTOCOL     *Browser;\r
-  EFI_INPUT_KEY                 Key;  \r
-  CHAR16                        *StringBuffer1;\r
-  CHAR16                        *StringBuffer2;    \r
-\r
-\r
-  //\r
-  //check any reset required change is applied? if yes, reset system\r
-  //\r
-  if (IsResetReminderFeatureEnable ()) {\r
-    if (IsResetRequired ()) {\r
-    \r
-      Status = gBS->LocateProtocol (\r
-                      &gEfiFormBrowserProtocolGuid,\r
-                      NULL,\r
-                      (VOID **)&Browser\r
-                      );      \r
-                      \r
-      StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
-      ASSERT (StringBuffer1 != NULL);\r
-      StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
-      ASSERT (StringBuffer2 != NULL);      \r
-      StrCpy (StringBuffer1, L"Configuration changed. Reset to apply it Now ? ");\r
-      StrCpy (StringBuffer2, L"Enter (YES)  /   Esc (NO)");      \r
-      //\r
-      // Popup a menu to notice user\r
-      // \r
-      do {\r
-        Browser->CreatePopUp (2, TRUE, 0, NULL, &Key, StringBuffer1, StringBuffer2);\r
-      } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN)); \r
-      \r
-      gBS->FreePool (StringBuffer1);      \r
-      gBS->FreePool (StringBuffer2);            \r
-      //\r
-      // If the user hits the YES Response key, reset\r
-      //\r
-      if ((Key.UnicodeChar == CHAR_CARRIAGE_RETURN)) {\r
-        gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
-      }\r
-      gST->ConOut->ClearScreen (gST->ConOut);\r
-    } \r
-  } \r
-} \r
-\r
-EFI_STATUS\r
-BdsLibGetHiiHandles (\r
-  IN     EFI_HII_PROTOCOL *Hii,\r
-  IN OUT UINT16           *HandleBufferLength,\r
-  OUT    EFI_HII_HANDLE   **HiiHandleBuffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Determines the handles that are currently active in the database.\r
-  It's the caller's responsibility to free handle buffer.\r
-\r
-Arguments:\r
-\r
-  This                  - A pointer to the EFI_HII_PROTOCOL instance.\r
-  HandleBufferLength    - On input, a pointer to the length of the handle buffer. On output, \r
-                          the length of the handle buffer that is required for the handles found.\r
-  HiiHandleBuffer       - Pointer to an array of EFI_HII_PROTOCOL instances returned.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS           - Get an array of EFI_HII_PROTOCOL instances successfully.\r
-  EFI_INVALID_PARAMETER - Hii is NULL.\r
-  EFI_NOT_FOUND         - Database not found.\r
-  \r
---*/\r
-{\r
-  UINT16      TempBufferLength;\r
-  EFI_STATUS  Status;\r
-  \r
-  TempBufferLength = 0;\r
-  \r
-  //\r
-  // Try to find the actual buffer size for HiiHandle Buffer.\r
-  //\r
-  Status = Hii->FindHandles (Hii, &TempBufferLength, *HiiHandleBuffer);\r
-  \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    *HiiHandleBuffer = AllocateZeroPool (TempBufferLength);\r
-    Status = Hii->FindHandles (Hii, &TempBufferLength, *HiiHandleBuffer);\r
-    //\r
-    // we should not fail here.\r
-    //\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-  \r
-  *HandleBufferLength = TempBufferLength;\r
-  \r
-  return Status;\r
-  \r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c.orig b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c.orig
deleted file mode 100644 (file)
index 8f5544a..0000000
+++ /dev/null
@@ -1,983 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  BdsMisc.c\r
-\r
-Abstract:\r
-\r
-  Misc BDS library function\r
-\r
---*/\r
-\r
-#define MAX_STRING_LEN        200\r
-static BOOLEAN   mFeaturerSwitch = TRUE;\r
-static BOOLEAN   mResetRequired  = FALSE;\r
-extern UINT16 gPlatformBootTimeOutDefault;\r
-\r
-UINT16\r
-BdsLibGetTimeout (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Return the default value for system Timeout variable.\r
-\r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-  \r
-  Timeout value.\r
-\r
---*/\r
-{\r
-  UINT16      Timeout;\r
-  UINTN       Size;\r
-  EFI_STATUS  Status;\r
-\r
-  //\r
-  // Return Timeout variable or 0xffff if no valid\r
-  // Timeout variable exists.\r
-  //\r
-  Size    = sizeof (UINT16);\r
-  Status  = gRT->GetVariable (L"Timeout", &gEfiGlobalVariableGuid, NULL, &Size, &Timeout);\r
-  if (!EFI_ERROR (Status)) {\r
-    return Timeout;\r
-  }\r
-  //\r
-  // To make the current EFI Automatic-Test activity possible, just add\r
-  // following code to make AutoBoot enabled when this variable is not\r
-  // present.\r
-  // This code should be removed later.\r
-  //\r
-  Timeout = gPlatformBootTimeOutDefault;\r
-\r
-  //\r
-  // Notes: Platform should set default variable if non exists on all error cases!!!\r
-  //\r
-  Status = gRT->SetVariable (\r
-                  L"Timeout",\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  sizeof (UINT16),\r
-                  &Timeout\r
-                  );\r
-  return Timeout;\r
-}\r
-\r
-VOID\r
-BdsLibLoadDrivers (\r
-  IN LIST_ENTRY               *BdsDriverLists\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  The function will go through the driver optoin link list, load and start\r
-  every driver the driver optoin device path point to.\r
-\r
-Arguments:\r
-\r
-  BdsDriverLists   - The header of the current driver option link list\r
-\r
-Returns:\r
-  \r
-  None\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  LIST_ENTRY                *Link;\r
-  BDS_COMMON_OPTION         *Option;\r
-  EFI_HANDLE                ImageHandle;\r
-  EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;\r
-  UINTN                     ExitDataSize;\r
-  CHAR16                    *ExitData;\r
-  BOOLEAN                   ReconnectAll;\r
-\r
-  ReconnectAll = FALSE;\r
-\r
-  //\r
-  // Process the driver option\r
-  //\r
-  for (Link = BdsDriverLists->ForwardLink; Link != BdsDriverLists; Link = Link->ForwardLink) {\r
-    Option = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);\r
-    //\r
-    // If a load option is not marked as LOAD_OPTION_ACTIVE,\r
-    // the boot manager will not automatically load the option.\r
-    //\r
-    if (!IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_ACTIVE)) {\r
-      continue;\r
-    }\r
-    //\r
-    // If a driver load option is marked as LOAD_OPTION_FORCE_RECONNECT,\r
-    // then all of the EFI drivers in the system will be disconnected and\r
-    // reconnected after the last driver load option is processed.\r
-    //\r
-    if (IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_FORCE_RECONNECT)) {\r
-      ReconnectAll = TRUE;\r
-    }\r
-    //\r
-    // Make sure the driver path is connected.\r
-    //\r
-    BdsLibConnectDevicePath (Option->DevicePath);\r
-\r
-    //\r
-    // Load and start the image that Driver#### describes\r
-    //\r
-    Status = gBS->LoadImage (\r
-                    FALSE,\r
-                    mBdsImageHandle,\r
-                    Option->DevicePath,\r
-                    NULL,\r
-                    0,\r
-                    &ImageHandle\r
-                    );\r
-\r
-    if (!EFI_ERROR (Status)) {\r
-      gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid,
-                          (VOID **)&ImageInfo);\r
-\r
-      //\r
-      // Verify whether this image is a driver, if not,\r
-      // exit it and continue to parse next load option\r
-      //\r
-      if (ImageInfo->ImageCodeType != EfiBootServicesCode && ImageInfo->ImageCodeType != EfiRuntimeServicesCode) {\r
-        gBS->Exit (ImageHandle, EFI_INVALID_PARAMETER, 0, NULL);\r
-        continue;\r
-      }\r
-\r
-      if (Option->LoadOptionsSize != 0) {\r
-        ImageInfo->LoadOptionsSize  = Option->LoadOptionsSize;\r
-        ImageInfo->LoadOptions      = Option->LoadOptions;\r
-      }\r
-      //\r
-      // Before calling the image, enable the Watchdog Timer for\r
-      // the 5 Minute period\r
-      //\r
-      gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);\r
-\r
-      Status = gBS->StartImage (ImageHandle, &ExitDataSize, &ExitData);\r
-      DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Driver Return Status = %r\n", Status));\r
-\r
-      //\r
-      // Clear the Watchdog Timer after the image returns\r
-      //\r
-      gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);\r
-    }\r
-  }\r
-  //\r
-  // Process the LOAD_OPTION_FORCE_RECONNECT driver option\r
-  //\r
-  if (ReconnectAll) {\r
-    BdsLibDisconnectAllEfi ();\r
-    BdsLibConnectAll ();\r
-  }\r
-\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibRegisterNewOption (\r
-  IN  LIST_ENTRY                     *BdsOptionList,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL       *DevicePath,\r
-  IN  CHAR16                         *String,\r
-  IN  CHAR16                         *VariableName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  This function will register the new boot#### or driver#### option base on\r
-  the VariableName. The new registered boot#### or driver#### will be linked\r
-  to BdsOptionList and also update to the VariableName. After the boot#### or\r
-  driver#### updated, the BootOrder or DriverOrder will also be updated.\r
-\r
-Arguments:\r
-\r
-  BdsOptionList    - The header of the boot#### or driver#### link list\r
-  \r
-  DevicePath       - The device path which the boot####\r
-                     or driver#### option present\r
-                     \r
-  String           - The description of the boot#### or driver####\r
-  \r
-  VariableName     - Indicate if the boot#### or driver#### option\r
-\r
-Returns:\r
-  \r
-  EFI_SUCCESS      - The boot#### or driver#### have been success registered\r
-  \r
-  EFI_STATUS       - Return the status of gRT->SetVariable ().\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  UINTN                     Index;\r
-  UINT16                    MaxOptionNumber;\r
-  UINT16                    RegisterOptionNumber;\r
-  UINT16                    *TempOptionPtr;\r
-  UINTN                     TempOptionSize;\r
-  UINT16                    *OptionOrderPtr;\r
-  VOID                      *OptionPtr;\r
-  UINTN                     OptionSize;\r
-  UINT8                     *TempPtr;\r
-  EFI_DEVICE_PATH_PROTOCOL  *OptionDevicePath;\r
-  CHAR16                    *Description;\r
-  CHAR16                    OptionName[10];\r
-  BOOLEAN                   UpdateBootDevicePath;\r
-\r
-  OptionPtr             = NULL;\r
-  OptionSize            = 0;\r
-  TempPtr               = NULL;\r
-  OptionDevicePath      = NULL;\r
-  Description           = NULL;\r
-  MaxOptionNumber       = 0;\r
-  OptionOrderPtr        = NULL;\r
-  UpdateBootDevicePath  = FALSE;\r
-  ZeroMem (OptionName, sizeof (OptionName));\r
-\r
-  TempOptionSize = 0;\r
-  TempOptionPtr = BdsLibGetVariableAndSize (\r
-                    VariableName,\r
-                    &gEfiGlobalVariableGuid,\r
-                    &TempOptionSize\r
-                    );\r
-  //\r
-  // Compare with current option variable\r
-  //\r
-  for (Index = 0; Index < TempOptionSize / sizeof (UINT16); Index++) {\r
-    //\r
-    // Got the max option#### number\r
-    //\r
-    if (MaxOptionNumber < TempOptionPtr[Index]) {\r
-      MaxOptionNumber = TempOptionPtr[Index];\r
-    }\r
-\r
-    if (*VariableName == 'B') {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", TempOptionPtr[Index]);\r
-    } else {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", TempOptionPtr[Index]);\r
-    }\r
-\r
-    OptionPtr = BdsLibGetVariableAndSize (\r
-                  OptionName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  &OptionSize\r
-                  );\r
-    TempPtr = OptionPtr;\r
-    TempPtr += sizeof (UINT32) + sizeof (UINT16);\r
-    Description = (CHAR16 *) TempPtr;\r
-    TempPtr += StrSize ((CHAR16 *) TempPtr);\r
-    OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;\r
-\r
-    //\r
-    // Notes: the description may will change base on the GetStringToken\r
-    //\r
-    if (CompareMem (Description, String, StrSize (Description)) == 0) {\r
-      if (CompareMem (OptionDevicePath, DevicePath, GetDevicePathSize (OptionDevicePath)) == 0) {\r
-        //\r
-        // Got the option, so just return\r
-        //\r
-        gBS->FreePool (OptionPtr);\r
-        gBS->FreePool (TempOptionPtr);\r
-        return EFI_SUCCESS;\r
-      } else {\r
-        //\r
-        // Boot device path changed, need update.\r
-        //\r
-        UpdateBootDevicePath = TRUE;\r
-        break;\r
-      }\r
-    }\r
-\r
-    gBS->FreePool (OptionPtr);\r
-  }\r
-\r
-  OptionSize          = sizeof (UINT32) + sizeof (UINT16) + StrSize (String) + GetDevicePathSize (DevicePath);\r
-  OptionPtr           = AllocateZeroPool (OptionSize);\r
-  TempPtr             = OptionPtr;\r
-  *(UINT32 *) TempPtr = LOAD_OPTION_ACTIVE;\r
-  TempPtr += sizeof (UINT32);\r
-  *(UINT16 *) TempPtr = (UINT16) GetDevicePathSize (DevicePath);\r
-  TempPtr += sizeof (UINT16);\r
-  CopyMem (TempPtr, String, StrSize (String));\r
-  TempPtr += StrSize (String);\r
-  CopyMem (TempPtr, DevicePath, GetDevicePathSize (DevicePath));\r
-\r
-  if (UpdateBootDevicePath) {\r
-    //\r
-    // The number in option#### to be updated\r
-    //\r
-    RegisterOptionNumber = TempOptionPtr[Index];\r
-  } else {\r
-    //\r
-    // The new option#### number\r
-    //\r
-    RegisterOptionNumber = MaxOptionNumber + 1;\r
-  }\r
-\r
-  if (*VariableName == 'B') {\r
-    UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", RegisterOptionNumber);\r
-  } else {\r
-    UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", RegisterOptionNumber);\r
-  }\r
-\r
-  Status = gRT->SetVariable (\r
-                  OptionName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  OptionSize,\r
-                  OptionPtr\r
-                  );\r
-  if (EFI_ERROR (Status) || UpdateBootDevicePath) {\r
-    gBS->FreePool (OptionPtr);\r
-    gBS->FreePool (TempOptionPtr);\r
-    return Status;\r
-  }\r
-\r
-  gBS->FreePool (OptionPtr);\r
-\r
-  //\r
-  // Update the option order variable\r
-  //\r
-  OptionOrderPtr = AllocateZeroPool ((Index + 1) * sizeof (UINT16));\r
-  CopyMem (OptionOrderPtr, TempOptionPtr, Index * sizeof (UINT16));\r
-  OptionOrderPtr[Index] = RegisterOptionNumber;\r
-  Status = gRT->SetVariable (\r
-                  VariableName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                  (Index + 1) * sizeof (UINT16),\r
-                  OptionOrderPtr\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (TempOptionPtr);\r
-    gBS->FreePool (OptionOrderPtr);\r
-    return Status;\r
-  }\r
-\r
-  gBS->FreePool (TempOptionPtr);\r
-  gBS->FreePool (OptionOrderPtr);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-BDS_COMMON_OPTION *\r
-BdsLibVariableToOption (\r
-  IN OUT LIST_ENTRY               *BdsCommonOptionList,\r
-  IN  CHAR16                      *VariableName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Build the boot#### or driver#### option from the VariableName, the \r
-  build boot#### or driver#### will also be linked to BdsCommonOptionList\r
-  \r
-Arguments:\r
-\r
-  BdsCommonOptionList - The header of the boot#### or driver#### option link list\r
-\r
-  VariableName - EFI Variable name indicate if it is boot#### or driver####\r
-\r
-Returns:\r
-\r
-  BDS_COMMON_OPTION    - Get the option just been created\r
-\r
-  NULL                 - Failed to get the new option\r
-\r
---*/\r
-{\r
-  UINT32                    Attribute;\r
-  UINT16                    FilePathSize;\r
-  UINT8                     *Variable;\r
-  UINT8                     *TempPtr;\r
-  UINTN                     VariableSize;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  BDS_COMMON_OPTION         *Option;\r
-  VOID                      *LoadOptions;\r
-  UINT32                    LoadOptionsSize;\r
-  CHAR16                    *Description;\r
-\r
-  //\r
-  // Read the variable. We will never free this data.\r
-  //\r
-  Variable = BdsLibGetVariableAndSize (\r
-              VariableName,\r
-              &gEfiGlobalVariableGuid,\r
-              &VariableSize\r
-              );\r
-  if (Variable == NULL) {\r
-    return NULL;\r
-  }\r
-  //\r
-  // Notes: careful defined the variable of Boot#### or\r
-  // Driver####, consider use some macro to abstract the code\r
-  //\r
-  //\r
-  // Get the option attribute\r
-  //\r
-  TempPtr   = Variable;\r
-  Attribute = *(UINT32 *) Variable;\r
-  TempPtr += sizeof (UINT32);\r
-\r
-  //\r
-  // Get the option's device path size\r
-  //\r
-  FilePathSize = *(UINT16 *) TempPtr;\r
-  TempPtr += sizeof (UINT16);\r
-\r
-  //\r
-  // Get the option's description string\r
-  //\r
-  Description = (CHAR16 *) TempPtr;\r
-\r
-  //\r
-  // Get the option's description string size\r
-  //\r
-  TempPtr += StrSize ((CHAR16 *) TempPtr);\r
-\r
-  //\r
-  // Get the option's device path\r
-  //\r
-  DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;\r
-  TempPtr += FilePathSize;\r
-\r
-  LoadOptions     = TempPtr;\r
-  LoadOptionsSize = (UINT32) (VariableSize - (UINTN) (TempPtr - Variable));\r
-\r
-  //\r
-  // The Console variables may have multiple device paths, so make\r
-  // an Entry for each one.\r
-  //\r
-  Option = AllocateZeroPool (sizeof (BDS_COMMON_OPTION));\r
-  if (Option == NULL) {\r
-    return NULL;\r
-  }\r
-\r
-  Option->Signature   = BDS_LOAD_OPTION_SIGNATURE;\r
-  Option->DevicePath  = AllocateZeroPool (GetDevicePathSize (DevicePath));\r
-  CopyMem (Option->DevicePath, DevicePath, GetDevicePathSize (DevicePath));\r
-  Option->Attribute   = Attribute;\r
-  Option->Description = AllocateZeroPool (StrSize (Description));\r
-  CopyMem (Option->Description, Description, StrSize (Description));\r
-  Option->LoadOptions = AllocateZeroPool (LoadOptionsSize);\r
-  CopyMem (Option->LoadOptions, LoadOptions, LoadOptionsSize);\r
-  Option->LoadOptionsSize = LoadOptionsSize;\r
-\r
-  //\r
-  // Insert active entry to BdsDeviceList\r
-  //\r
-  if ((Option->Attribute & LOAD_OPTION_ACTIVE) == LOAD_OPTION_ACTIVE) {\r
-    InsertTailList (BdsCommonOptionList, &Option->Link);\r
-    gBS->FreePool (Variable);\r
-    return Option;\r
-  }\r
-\r
-  gBS->FreePool (Variable);\r
-  gBS->FreePool (Option);\r
-  return NULL;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibBuildOptionFromVar (\r
-  IN  LIST_ENTRY                  *BdsCommonOptionList,\r
-  IN  CHAR16                      *VariableName\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Process BootOrder, or DriverOrder variables, by calling\r
-  BdsLibVariableToOption () for each UINT16 in the variables.\r
-\r
-Arguments:\r
-\r
-  BdsCommonOptionList - The header of the option list base on variable\r
-                        VariableName\r
-\r
-  VariableName - EFI Variable name indicate the BootOrder or DriverOrder\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - Success create the boot option or driver option list\r
-\r
-  EFI_OUT_OF_RESOURCES - Failed to get the boot option or driver option list\r
-\r
---*/\r
-{\r
-  UINT16            *OptionOrder;\r
-  UINTN             OptionOrderSize;\r
-  UINTN             Index;\r
-  BDS_COMMON_OPTION *Option;\r
-  CHAR16            OptionName[20];\r
-\r
-  //\r
-  // Zero Buffer in order to get all BOOT#### variables\r
-  //\r
-  ZeroMem (OptionName, sizeof (OptionName));\r
-\r
-  //\r
-  // Read the BootOrder, or DriverOrder variable.\r
-  //\r
-  OptionOrder = BdsLibGetVariableAndSize (\r
-                  VariableName,\r
-                  &gEfiGlobalVariableGuid,\r
-                  &OptionOrderSize\r
-                  );\r
-  if (OptionOrder == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  for (Index = 0; Index < OptionOrderSize / sizeof (UINT16); Index++) {\r
-    if (*VariableName == 'B') {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", OptionOrder[Index]);\r
-    } else {\r
-      UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", OptionOrder[Index]);\r
-    }\r
-    Option              = BdsLibVariableToOption (BdsCommonOptionList, OptionName);\r
-    Option->BootCurrent = OptionOrder[Index];\r
-\r
-  }\r
-\r
-  gBS->FreePool (OptionOrder);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibGetBootMode (\r
-  OUT EFI_BOOT_MODE       *BootMode\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Get boot mode by looking up configuration table and parsing HOB list\r
-\r
-Arguments:\r
-\r
-  BootMode - Boot mode from PEI handoff HOB.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - Successfully get boot mode\r
-  \r
-  EFI_NOT_FOUND - Can not find the current system boot mode\r
-\r
---*/\r
-{\r
-  EFI_HOB_HANDOFF_INFO_TABLE        *HobList;\r
-\r
-  HobList = GetHobList ();\r
-  ASSERT (HobList->Header.HobType == EFI_HOB_TYPE_HANDOFF);\r
-  *BootMode = HobList->BootMode;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-VOID *\r
-BdsLibGetVariableAndSize (\r
-  IN  CHAR16              *Name,\r
-  IN  EFI_GUID            *VendorGuid,\r
-  OUT UINTN               *VariableSize\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Read the EFI variable (VendorGuid/Name) and return a dynamically allocated\r
-  buffer, and the size of the buffer. If failure return NULL.\r
-\r
-Arguments:\r
-\r
-  Name       - String part of EFI variable name\r
-\r
-  VendorGuid - GUID part of EFI variable name\r
-\r
-  VariableSize - Returns the size of the EFI variable that was read\r
-\r
-Returns:\r
-\r
-  Dynamically allocated memory that contains a copy of the EFI variable.\r
-  Caller is responsible freeing the buffer.\r
-\r
-  NULL - Variable was not read\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-  UINTN       BufferSize;\r
-  VOID        *Buffer;\r
-\r
-  Buffer = NULL;\r
-\r
-  //\r
-  // Pass in a zero size buffer to find the required buffer size.\r
-  //\r
-  BufferSize  = 0;\r
-  Status      = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);\r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    //\r
-    // Allocate the buffer to return\r
-    //\r
-    Buffer = AllocateZeroPool (BufferSize);\r
-    if (Buffer == NULL) {\r
-      return NULL;\r
-    }\r
-    //\r
-    // Read variable into the allocated buffer.\r
-    //\r
-    Status = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);\r
-    if (EFI_ERROR (Status)) {\r
-      BufferSize = 0;\r
-    }\r
-  }\r
-\r
-  *VariableSize = BufferSize;\r
-  return Buffer;\r
-}\r
-\r
-BOOLEAN\r
-BdsLibMatchDevicePaths (\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *Multi,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL  *Single\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function compares a device path data structure to that of all the nodes of a\r
-  second device path instance.\r
-\r
-Arguments:\r
-\r
-  Multi        - A pointer to a multi-instance device path data structure.\r
-\r
-  Single       - A pointer to a single-instance device path data structure.\r
-\r
-Returns:\r
-\r
-  TRUE   - If the Single is contained within Multi\r
-  \r
-  FALSE  - The Single is not match within Multi\r
-  \r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePathInst;\r
-  UINTN                     Size;\r
-\r
-  if (!Multi || !Single) {\r
-    return FALSE;\r
-  }\r
-\r
-  DevicePath      = Multi;\r
-  DevicePathInst  = GetNextDevicePathInstance (&DevicePath, &Size);\r
-  Size -= sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
-\r
-  //\r
-  // Search for the match of 'Single' in 'Multi'\r
-  //\r
-  while (DevicePathInst != NULL) {\r
-    //\r
-    // If the single device path is found in multiple device paths,\r
-    // return success\r
-    //\r
-    if (Size == 0) {\r
-      return FALSE;\r
-    }\r
-\r
-    if (CompareMem (Single, DevicePathInst, Size) == 0) {\r
-      return TRUE;\r
-    }\r
-\r
-    gBS->FreePool (DevicePathInst);\r
-    DevicePathInst = GetNextDevicePathInstance (&DevicePath, &Size);\r
-    Size -= sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-EFI_STATUS\r
-BdsLibOutputStrings (\r
-  IN EFI_SIMPLE_TEXT_OUT_PROTOCOL   *ConOut,\r
-  ...\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function prints a series of strings.\r
-\r
-Arguments:\r
-\r
-  ConOut               - Pointer to EFI_SIMPLE_TEXT_OUT_PROTOCOL\r
-\r
-  ...                  - A variable argument list containing series of strings,\r
-                         the last string must be NULL.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS          - Success print out the string using ConOut.\r
-  \r
-  EFI_STATUS           - Return the status of the ConOut->OutputString ().\r
-\r
---*/\r
-{\r
-  VA_LIST     args;\r
-  EFI_STATUS  Status;\r
-  CHAR16      *String;\r
-\r
-  Status = EFI_SUCCESS;\r
-  VA_START (args, ConOut);\r
-\r
-  while (!EFI_ERROR (Status)) {\r
-    //\r
-    // If String is NULL, then it's the end of the list\r
-    //\r
-    String = VA_ARG (args, CHAR16 *);\r
-    if (!String) {\r
-      break;\r
-    }\r
-\r
-    Status = ConOut->OutputString (ConOut, String);\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-//\r
-//  Following are BDS Lib functions which  contain all the code about setup browser reset reminder feature.\r
-//  Setup Browser reset reminder feature is that an reset reminder will be given before user leaves the setup browser  if \r
-//  user change any option setting which needs a reset to be effective, and  the reset will be applied according to  the user selection.\r
-//\r
-\r
-VOID\r
-EnableResetReminderFeature (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Enable the setup browser reset reminder feature.\r
-  This routine is used in platform tip. If the platform policy need the feature, use the routine to enable it.\r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mFeaturerSwitch = TRUE;\r
-} \r
-\r
-VOID\r
-DisableResetReminderFeature (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Disable the setup browser reset reminder feature.\r
-  This routine is used in platform tip. If the platform policy do not want the feature, use the routine to disable it.\r
-  \r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mFeaturerSwitch = FALSE;\r
-} \r
-\r
-VOID\r
-EnableResetRequired (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-   Record the info that  a reset is required.\r
-   A  module boolean variable is used to record whether a reset is required. \r
-  \r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mResetRequired = TRUE;\r
-} \r
-\r
-VOID\r
-DisableResetRequired (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-   Record the info that  no reset is required.\r
-   A  module boolean variable is used to record whether a reset is required. \r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  mResetRequired = FALSE;\r
-} \r
-\r
-BOOLEAN\r
-IsResetReminderFeatureEnable (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Check whether platform policy enable the reset reminder feature. The default is enabled.\r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  return mFeaturerSwitch;\r
-}\r
-\r
-BOOLEAN\r
-IsResetRequired (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Check if  user changed any option setting which needs a system reset to be effective.\r
-  \r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  return mResetRequired;\r
-}\r
-\r
-VOID\r
-SetupResetReminder (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
\r
-  Check whether a reset is needed, and finish the reset reminder feature.\r
-  If a reset is needed, Popup a menu to notice user, and finish the feature \r
-  according to the user selection.\r
-\r
-Arguments:\r
-\r
-  VOID\r
-\r
-Returns:\r
-\r
-  VOID\r
-\r
---*/\r
-{\r
-  EFI_STATUS                    Status;\r
-  EFI_FORM_BROWSER_PROTOCOL     *Browser;\r
-  EFI_INPUT_KEY                 Key;  \r
-  CHAR16                        *StringBuffer1;\r
-  CHAR16                        *StringBuffer2;    \r
-\r
-\r
-  //\r
-  //check any reset required change is applied? if yes, reset system\r
-  //\r
-  if (IsResetReminderFeatureEnable ()) {\r
-    if (IsResetRequired ()) {\r
-    \r
-      Status = gBS->LocateProtocol (\r
-                      &gEfiFormBrowserProtocolGuid,\r
-                      NULL,\r
-                      (VOID **)&Browser\r
-                      );      \r
-                      \r
-      StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
-      ASSERT (StringBuffer1 != NULL);\r
-      StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
-      ASSERT (StringBuffer2 != NULL);      \r
-      StrCpy (StringBuffer1, L"Configuration changed. Reset to apply it Now ? ");\r
-      StrCpy (StringBuffer2, L"Enter (YES)  /   Esc (NO)");      \r
-      //\r
-      // Popup a menu to notice user\r
-      // \r
-      do {\r
-        Browser->CreatePopUp (2, TRUE, 0, NULL, &Key, StringBuffer1, StringBuffer2);\r
-      } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN)); \r
-      \r
-      gBS->FreePool (StringBuffer1);      \r
-      gBS->FreePool (StringBuffer2);            \r
-      //\r
-      // If the user hits the YES Response key, reset\r
-      //\r
-      if ((Key.UnicodeChar == CHAR_CARRIAGE_RETURN)) {\r
-        gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
-      }\r
-      gST->ConOut->ClearScreen (gST->ConOut);\r
-    } \r
-  } \r
-} \r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/DevicePath.c b/EdkUnixPkg/Library/EdkGenericBdsLib/DevicePath.c
deleted file mode 100644 (file)
index 1bb7d70..0000000
+++ /dev/null
@@ -1,1040 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  DevicePath.c\r
-\r
-Abstract:\r
-\r
-  BDS internal function define the default device path string, it can be\r
-  replaced by platform device path.\r
-\r
---*/\r
-\r
-\r
-#ifdef TIANO_EXTENSION_FLAG\r
-EFI_GUID  UnknownDeviceGuid           = UNKNOWN_DEVICE_GUID;\r
-#endif \r
-\r
-EFI_GUID  mEfiUnixThunkProtocolGuid  = EFI_UNIX_THUNK_PROTOCOL_GUID;\r
-EFI_GUID  mEfiUnixUgaGuid            = EFI_UNIX_UGA_GUID;\r
-EFI_GUID  mEfiMsgPcAnsiGuid           = DEVICE_PATH_MESSAGING_PC_ANSI;\r
-EFI_GUID  mEfiMsgVt100Guid            = DEVICE_PATH_MESSAGING_VT_100;\r
-EFI_GUID  mEfiMsgVt100PlusGuid        = DEVICE_PATH_MESSAGING_VT_100_PLUS;\r
-EFI_GUID  mEfiMsgVt100Utf8Guid        = DEVICE_PATH_MESSAGING_VT_UTF8;\r
-\r
-VOID *\r
-ReallocatePool (\r
-  IN VOID                 *OldPool,\r
-  IN UINTN                OldSize,\r
-  IN UINTN                NewSize\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Adjusts the size of a previously allocated buffer.\r
-\r
-Arguments:\r
-\r
-  OldPool               - A pointer to the buffer whose size is being adjusted.\r
-\r
-  OldSize               - The size of the current buffer.\r
-\r
-  NewSize               - The size of the new buffer.\r
-\r
-Returns:\r
-\r
-  EFI_SUCEESS           - The requested number of bytes were allocated.\r
-\r
-  EFI_OUT_OF_RESOURCES  - The pool requested could not be allocated.\r
-\r
-  EFI_INVALID_PARAMETER - The buffer was invalid.\r
-\r
---*/\r
-{\r
-  VOID  *NewPool;\r
-\r
-  NewPool = NULL;\r
-  if (NewSize) {\r
-    NewPool = AllocateZeroPool (NewSize);\r
-  }\r
-\r
-  if (OldPool) {\r
-    if (NewPool) {\r
-      CopyMem (NewPool, OldPool, OldSize < NewSize ? OldSize : NewSize);\r
-    }\r
-\r
-    gBS->FreePool (OldPool);\r
-  }\r
-\r
-  return NewPool;\r
-}\r
-\r
-CHAR16 *\r
-CatPrint (\r
-  IN OUT POOL_PRINT   *Str,\r
-  IN CHAR16           *fmt,\r
-  ...\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-    Concatenates a formatted unicode string to allocated pool.  \r
-    The caller must free the resulting buffer.\r
-\r
-Arguments:\r
-\r
-    Str         - Tracks the allocated pool, size in use, and \r
-                  amount of pool allocated.\r
-\r
-    fmt         - The format string\r
-\r
-Returns:\r
-\r
-    Allocated buffer with the formatted string printed in it.  \r
-    The caller must free the allocated buffer.   The buffer\r
-    allocation is not packed.\r
-\r
---*/\r
-{\r
-  UINT16  *AppendStr;\r
-  VA_LIST args;\r
-  UINTN   strsize;\r
-\r
-  AppendStr = AllocateZeroPool (0x1000);\r
-  if (AppendStr == NULL) {\r
-    return Str->str;\r
-  }\r
-\r
-  VA_START (args, fmt);\r
-  UnicodeVSPrint (AppendStr, 0x1000, fmt, args);\r
-  VA_END (args);\r
-  if (NULL == Str->str) {\r
-    strsize   = StrSize (AppendStr);\r
-    Str->str  = AllocateZeroPool (strsize);\r
-    ASSERT (Str->str != NULL);\r
-  } else {\r
-    strsize = StrSize (AppendStr) + StrSize (Str->str) - sizeof (UINT16);\r
-    Str->str = ReallocatePool (\r
-                Str->str,\r
-                StrSize (Str->str),\r
-                strsize\r
-                );\r
-    ASSERT (Str->str != NULL);\r
-  }\r
-\r
-  Str->maxlen = MAX_CHAR * sizeof (UINT16);\r
-  if (strsize < Str->maxlen) {\r
-    StrCat (Str->str, AppendStr);\r
-    Str->len = strsize - sizeof (UINT16);\r
-  }\r
-\r
-  gBS->FreePool (AppendStr);\r
-  return Str->str;\r
-}\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-BdsLibUnpackDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function unpacks a device path data structure so that all the nodes\r
-  of a device path are naturally aligned.\r
-\r
-Arguments:\r
-\r
-  DevPath        - A pointer to a device path data structure\r
-\r
-Returns:\r
-\r
-  If the memory for the device path is successfully allocated, then a \r
-  pointer to the new device path is returned.  Otherwise, NULL is returned.\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *Src;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Dest;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewPath;\r
-  UINTN                     Size;\r
-\r
-  //\r
-  // Walk device path and round sizes to valid boundries\r
-  //\r
-  Src   = DevPath;\r
-  Size  = 0;\r
-  for (;;) {\r
-    Size += DevicePathNodeLength (Src);\r
-    Size += ALIGN_SIZE (Size);\r
-\r
-    if (IsDevicePathEnd (Src)) {\r
-      break;\r
-    }\r
-\r
-    Src = NextDevicePathNode (Src);\r
-  }\r
-  //\r
-  // Allocate space for the unpacked path\r
-  //\r
-  NewPath = AllocateZeroPool (Size);\r
-  if (NewPath) {\r
-\r
-    ASSERT (((UINTN) NewPath) % MIN_ALIGNMENT_SIZE == 0);\r
-\r
-    //\r
-    // Copy each node\r
-    //\r
-    Src   = DevPath;\r
-    Dest  = NewPath;\r
-    for (;;) {\r
-      Size = DevicePathNodeLength (Src);\r
-      CopyMem (Dest, Src, Size);\r
-      Size += ALIGN_SIZE (Size);\r
-      SetDevicePathNodeLength (Dest, Size);\r
-      Dest->Type |= EFI_DP_TYPE_UNPACKED;\r
-      Dest = (EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) Dest) + Size);\r
-\r
-      if (IsDevicePathEnd (Src)) {\r
-        break;\r
-      }\r
-\r
-      Src = NextDevicePathNode (Src);\r
-    }\r
-  }\r
-\r
-  return NewPath;\r
-}\r
-\r
-VOID\r
-DevPathPci (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  PCI_DEVICE_PATH *Pci;\r
-\r
-  Pci = DevPath;\r
-  CatPrint (Str, L"Pci(%x|%x)", Pci->Device, Pci->Function);\r
-}\r
-\r
-VOID\r
-DevPathPccard (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  PCCARD_DEVICE_PATH  *Pccard;\r
-\r
-  Pccard = DevPath;\r
-  CatPrint (Str, L"Pcmcia(Function%x)", Pccard->FunctionNumber);\r
-}\r
-\r
-VOID\r
-DevPathMemMap (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  MEMMAP_DEVICE_PATH  *MemMap;\r
-\r
-  MemMap = DevPath;\r
-  CatPrint (\r
-    Str,\r
-    L"MemMap(%d:%.lx-%.lx)",\r
-    MemMap->MemoryType,\r
-    MemMap->StartingAddress,\r
-    MemMap->EndingAddress\r
-    );\r
-}\r
-\r
-VOID\r
-DevPathController (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  CONTROLLER_DEVICE_PATH  *Controller;\r
-\r
-  Controller = DevPath;\r
-  CatPrint (Str, L"Ctrl(%d)", Controller->ControllerNumber);\r
-}\r
-\r
-VOID\r
-DevPathVendor (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Convert Vendor device path to device name\r
-\r
-Arguments:\r
-\r
-  Str     - The buffer store device name\r
-  DevPath - Pointer to vendor device path\r
-\r
-Returns:\r
-\r
-  When it return, the device name have been stored in *Str.\r
-\r
---*/\r
-{\r
-  VENDOR_DEVICE_PATH  *Vendor;\r
-  CHAR16              *Type;\r
-  INT32               *Temp;\r
-\r
-  Vendor  = DevPath;\r
-  Temp    = (INT32 *) (&Vendor->Guid);\r
-\r
-  switch (DevicePathType (&Vendor->Header)) {\r
-  case HARDWARE_DEVICE_PATH:\r
-    //\r
-    // If the device is an Unix device, we will give it a readable device name.\r
-    //\r
-    if (CompareGuid (&Vendor->Guid, &mEfiUnixThunkProtocolGuid)) {\r
-      CatPrint (Str, L"%s", L"UnixBus");\r
-      return ;\r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiUnixUgaGuid)) {\r
-      CatPrint (Str, L"%s", L"UGA");\r
-      return ;\r
-    } else {\r
-      Type = L"Hw";\r
-      break;\r
-    }\r
-\r
-  case MESSAGING_DEVICE_PATH:\r
-    //\r
-    // If the device is an Unix device, we will give it a readable device name.\r
-    //\r
-    if (CompareGuid (&Vendor->Guid, &mEfiMsgPcAnsiGuid)) {\r
-      CatPrint (Str, L"%s", L"PC-ANSI");\r
-      return ;\r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiMsgVt100Guid)) {\r
-      CatPrint (Str, L"%s", L"VT100");\r
-      return ;\r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiMsgVt100PlusGuid)) {\r
-      CatPrint (Str, L"%s", L"VT100+");\r
-      return ;\r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiMsgVt100Utf8Guid)) {\r
-      CatPrint (Str, L"%s", L"VT100-UTF8");\r
-      return ;\r
-    } else {\r
-      Type = L"Msg";\r
-      break;\r
-    }\r
-\r
-  case MEDIA_DEVICE_PATH:\r
-    Type = L"Media";\r
-    break;\r
-\r
-  default:\r
-    Type = L"?";\r
-    break;\r
-  }\r
-\r
-  CatPrint (Str, L"Ven%s(%g)", Type, &Vendor->Guid);\r
-}\r
-\r
-VOID\r
-DevPathAcpi (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  ACPI_HID_DEVICE_PATH  *Acpi;\r
-\r
-  Acpi = DevPath;\r
-  if ((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {\r
-    CatPrint (Str, L"Acpi(PNP%04x,%x)", EISA_ID_TO_NUM (Acpi->HID), Acpi->UID);\r
-  } else {\r
-    CatPrint (Str, L"Acpi(%08x,%x)", Acpi->HID, Acpi->UID);\r
-  }\r
-}\r
-\r
-VOID\r
-DevPathAtapi (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  ATAPI_DEVICE_PATH *Atapi;\r
-\r
-  Atapi = DevPath;\r
-  CatPrint (\r
-    Str,\r
-    L"Ata(%s,%s)",\r
-    Atapi->PrimarySecondary ? L"Secondary" : L"Primary",\r
-    Atapi->SlaveMaster ? L"Slave" : L"Master"\r
-    );\r
-}\r
-\r
-VOID\r
-DevPathScsi (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  SCSI_DEVICE_PATH  *Scsi;\r
-\r
-  Scsi = DevPath;\r
-  CatPrint (Str, L"Scsi(Pun%x,Lun%x)", Scsi->Pun, Scsi->Lun);\r
-}\r
-\r
-VOID\r
-DevPathFibre (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  FIBRECHANNEL_DEVICE_PATH  *Fibre;\r
-\r
-  Fibre = DevPath;\r
-  CatPrint (Str, L"Fibre(Wwn%lx,Lun%x)", Fibre->WWN, Fibre->Lun);\r
-}\r
-\r
-VOID\r
-DevPath1394 (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  F1394_DEVICE_PATH *F1394;\r
-\r
-  F1394 = DevPath;\r
-  CatPrint (Str, L"1394(%g)", &F1394->Guid);\r
-}\r
-\r
-VOID\r
-DevPathUsb (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  USB_DEVICE_PATH *Usb;\r
-\r
-  Usb = DevPath;\r
-  CatPrint (Str, L"Usb(%x, %x)", Usb->ParentPortNumber, Usb->InterfaceNumber);\r
-}\r
-\r
-VOID\r
-DevPathUsbClass (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  USB_CLASS_DEVICE_PATH *UsbClass;\r
-\r
-  UsbClass = DevPath;\r
-  CatPrint (\r
-    Str,\r
-    L"Usb Class(%x, %x, %x, %x, %x)",\r
-    UsbClass->VendorId,\r
-    UsbClass->ProductId,\r
-    UsbClass->DeviceClass,\r
-    UsbClass->DeviceSubClass,\r
-    UsbClass->DeviceProtocol\r
-    );\r
-}\r
-\r
-VOID\r
-DevPathI2O (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  I2O_DEVICE_PATH *I2O;\r
-\r
-  I2O = DevPath;\r
-  CatPrint (Str, L"I2O(%x)", I2O->Tid);\r
-}\r
-\r
-VOID\r
-DevPathMacAddr (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  MAC_ADDR_DEVICE_PATH  *MAC;\r
-  UINTN                 HwAddressSize;\r
-  UINTN                 Index;\r
-\r
-  MAC           = DevPath;\r
-\r
-  HwAddressSize = sizeof (EFI_MAC_ADDRESS);\r
-  if (MAC->IfType == 0x01 || MAC->IfType == 0x00) {\r
-    HwAddressSize = 6;\r
-  }\r
-\r
-  CatPrint (Str, L"Mac(");\r
-\r
-  for (Index = 0; Index < HwAddressSize; Index++) {\r
-    CatPrint (Str, L"%02x", MAC->MacAddress.Addr[Index]);\r
-  }\r
-\r
-  CatPrint (Str, L")");\r
-}\r
-\r
-VOID\r
-DevPathIPv4 (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  IPv4_DEVICE_PATH  *IP;\r
-\r
-  IP = DevPath;\r
-  CatPrint (\r
-    Str,\r
-    L"IPv4(%d.%d.%d.%d:%d)",\r
-    IP->RemoteIpAddress.Addr[0],\r
-    IP->RemoteIpAddress.Addr[1],\r
-    IP->RemoteIpAddress.Addr[2],\r
-    IP->RemoteIpAddress.Addr[3],\r
-    IP->RemotePort\r
-    );\r
-}\r
-\r
-VOID\r
-DevPathIPv6 (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  IPv6_DEVICE_PATH  *IP;\r
-\r
-  IP = DevPath;\r
-  CatPrint (Str, L"IP-v6(not-done)");\r
-}\r
-\r
-VOID\r
-DevPathInfiniBand (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  INFINIBAND_DEVICE_PATH  *InfiniBand;\r
-\r
-  InfiniBand = DevPath;\r
-  CatPrint (Str, L"InfiniBand(not-done)");\r
-}\r
-\r
-VOID\r
-DevPathUart (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  UART_DEVICE_PATH  *Uart;\r
-  CHAR8             Parity;\r
-\r
-  Uart = DevPath;\r
-  switch (Uart->Parity) {\r
-  case 0:\r
-    Parity = 'D';\r
-    break;\r
-\r
-  case 1:\r
-    Parity = 'N';\r
-    break;\r
-\r
-  case 2:\r
-    Parity = 'E';\r
-    break;\r
-\r
-  case 3:\r
-    Parity = 'O';\r
-    break;\r
-\r
-  case 4:\r
-    Parity = 'M';\r
-    break;\r
-\r
-  case 5:\r
-    Parity = 'S';\r
-    break;\r
-\r
-  default:\r
-    Parity = 'x';\r
-    break;\r
-  }\r
-\r
-  if (Uart->BaudRate == 0) {\r
-    CatPrint (Str, L"Uart(DEFAULT %c", Parity);\r
-  } else {\r
-    CatPrint (Str, L"Uart(%d %c", Uart->BaudRate, Parity);\r
-  }\r
-\r
-  if (Uart->DataBits == 0) {\r
-    CatPrint (Str, L"D");\r
-  } else {\r
-    CatPrint (Str, L"%d", Uart->DataBits);\r
-  }\r
-\r
-  switch (Uart->StopBits) {\r
-  case 0:\r
-    CatPrint (Str, L"D)");\r
-    break;\r
-\r
-  case 1:\r
-    CatPrint (Str, L"1)");\r
-    break;\r
-\r
-  case 2:\r
-    CatPrint (Str, L"1.5)");\r
-    break;\r
-\r
-  case 3:\r
-    CatPrint (Str, L"2)");\r
-    break;\r
-\r
-  default:\r
-    CatPrint (Str, L"x)");\r
-    break;\r
-  }\r
-}\r
-\r
-VOID\r
-DevPathHardDrive (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  HARDDRIVE_DEVICE_PATH *Hd;\r
-\r
-  Hd = DevPath;\r
-  switch (Hd->SignatureType) {\r
-  case SIGNATURE_TYPE_MBR:\r
-    CatPrint (\r
-      Str,\r
-      L"HD(Part%d,Sig%08x)",\r
-      Hd->PartitionNumber,\r
-      *((UINT32 *) (&(Hd->Signature[0])))\r
-      );\r
-    break;\r
-\r
-  case SIGNATURE_TYPE_GUID:\r
-    CatPrint (\r
-      Str,\r
-      L"HD(Part%d,Sig%g)",\r
-      Hd->PartitionNumber,\r
-      (EFI_GUID *) &(Hd->Signature[0])\r
-      );\r
-    break;\r
-\r
-  default:\r
-    CatPrint (\r
-      Str,\r
-      L"HD(Part%d,MBRType=%02x,SigType=%02x)",\r
-      Hd->PartitionNumber,\r
-      Hd->MBRType,\r
-      Hd->SignatureType\r
-      );\r
-    break;\r
-  }\r
-}\r
-\r
-VOID\r
-DevPathCDROM (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  CDROM_DEVICE_PATH *Cd;\r
-\r
-  Cd = DevPath;\r
-  CatPrint (Str, L"CDROM(Entry%x)", Cd->BootEntry);\r
-}\r
-\r
-VOID\r
-DevPathFilePath (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  FILEPATH_DEVICE_PATH  *Fp;\r
-\r
-  Fp = DevPath;\r
-  CatPrint (Str, L"%s", Fp->PathName);\r
-}\r
-\r
-VOID\r
-DevPathMediaProtocol (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  MEDIA_PROTOCOL_DEVICE_PATH  *MediaProt;\r
-\r
-  MediaProt = DevPath;\r
-  CatPrint (Str, L"%g", &MediaProt->Protocol);\r
-}\r
-\r
-VOID\r
-DevPathFvFilePath (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFilePath;\r
-\r
-  FvFilePath = DevPath;\r
-  CatPrint (Str, L"%g", &FvFilePath->NameGuid);\r
-}\r
-\r
-VOID\r
-DevPathBssBss (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  BBS_BBS_DEVICE_PATH *Bbs;\r
-  CHAR16              *Type;\r
-\r
-  Bbs = DevPath;\r
-  switch (Bbs->DeviceType) {\r
-  case BBS_TYPE_FLOPPY:\r
-    Type = L"Floppy";\r
-    break;\r
-\r
-  case BBS_TYPE_HARDDRIVE:\r
-    Type = L"Harddrive";\r
-    break;\r
-\r
-  case BBS_TYPE_CDROM:\r
-    Type = L"CDROM";\r
-    break;\r
-\r
-  case BBS_TYPE_PCMCIA:\r
-    Type = L"PCMCIA";\r
-    break;\r
-\r
-  case BBS_TYPE_USB:\r
-    Type = L"Usb";\r
-    break;\r
-\r
-  case BBS_TYPE_EMBEDDED_NETWORK:\r
-    Type = L"Net";\r
-    break;\r
-\r
-  default:\r
-    Type = L"?";\r
-    break;\r
-  }\r
-  //\r
-  // Since current Print function hasn't implemented %a (for ansi string)\r
-  // we will only print Unicode strings.\r
-  //\r
-  CatPrint (Str, L"Legacy-%s", Type);\r
-}\r
-\r
-VOID\r
-DevPathEndInstance (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  CatPrint (Str, L",");\r
-}\r
-\r
-VOID\r
-DevPathNodeUnknown (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN VOID                 *DevPath\r
-  )\r
-{\r
-  CatPrint (Str, L"?");\r
-}\r
-\r
-DEVICE_PATH_STRING_TABLE  DevPathTable[] = {\r
-  {
-    HARDWARE_DEVICE_PATH,\r
-    HW_PCI_DP,\r
-    DevPathPci\r
-  },
-  {
-    HARDWARE_DEVICE_PATH,\r
-    HW_PCCARD_DP,\r
-    DevPathPccard\r
-  },
-  {
-    HARDWARE_DEVICE_PATH,\r
-    HW_MEMMAP_DP,\r
-    DevPathMemMap\r
-  },
-  {
-    HARDWARE_DEVICE_PATH,\r
-    HW_VENDOR_DP,\r
-    DevPathVendor\r
-  },
-  {
-    HARDWARE_DEVICE_PATH,\r
-    HW_CONTROLLER_DP,\r
-    DevPathController\r
-  },
-  {
-    ACPI_DEVICE_PATH,\r
-    ACPI_DP,\r
-    DevPathAcpi\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_ATAPI_DP,\r
-    DevPathAtapi\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_SCSI_DP,\r
-    DevPathScsi\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_FIBRECHANNEL_DP,\r
-    DevPathFibre\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_1394_DP,\r
-    DevPath1394\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_USB_DP,\r
-    DevPathUsb\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_USB_CLASS_DP,\r
-    DevPathUsbClass\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_I2O_DP,\r
-    DevPathI2O\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_MAC_ADDR_DP,\r
-    DevPathMacAddr\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_IPv4_DP,\r
-    DevPathIPv4\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_IPv6_DP,\r
-    DevPathIPv6\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_INFINIBAND_DP,\r
-    DevPathInfiniBand\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_UART_DP,\r
-    DevPathUart\r
-  },
-  {
-    MESSAGING_DEVICE_PATH,\r
-    MSG_VENDOR_DP,\r
-    DevPathVendor\r
-  },
-  {
-    MEDIA_DEVICE_PATH,\r
-    MEDIA_HARDDRIVE_DP,\r
-    DevPathHardDrive\r
-  },
-  {
-    MEDIA_DEVICE_PATH,\r
-    MEDIA_CDROM_DP,\r
-    DevPathCDROM\r
-  },
-  {
-    MEDIA_DEVICE_PATH,\r
-    MEDIA_VENDOR_DP,\r
-    DevPathVendor\r
-  },
-  {
-    MEDIA_DEVICE_PATH,\r
-    MEDIA_FILEPATH_DP,\r
-    DevPathFilePath\r
-  },
-  {
-    MEDIA_DEVICE_PATH,\r
-    MEDIA_PROTOCOL_DP,\r
-    DevPathMediaProtocol\r
-  },
-\r
-#if (EFI_SPECIFICATION_VERSION < 0x00020000)\r
-  {
-    MEDIA_DEVICE_PATH,\r
-    MEDIA_FV_FILEPATH_DP,\r
-    DevPathFvFilePath\r
-  },
-#endif\r
-\r
-  {
-    BBS_DEVICE_PATH,\r
-    BBS_BBS_DP,\r
-    DevPathBssBss\r
-  },
-  {
-    END_DEVICE_PATH_TYPE,\r
-    END_INSTANCE_DEVICE_PATH_SUBTYPE,\r
-    DevPathEndInstance\r
-  },
-  {
-    0,\r
-    0,\r
-    NULL\r
-  }
-};\r
-\r
-CHAR16 *\r
-DevicePathToStr (\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *DevPath\r
-  )\r
-/*++\r
-\r
-  Turns the Device Path into a printable string.  Allcoates\r
-  the string from pool.  The caller must SafeFreePool the returned\r
-  string.\r
-\r
---*/\r
-{\r
-  POOL_PRINT                Str;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevPathNode;\r
-  VOID (*DumpNode) (POOL_PRINT *, VOID *);\r
-\r
-  UINTN Index;\r
-  UINTN NewSize;\r
-\r
-  ZeroMem (&Str, sizeof (Str));\r
-\r
-  if (DevPath == NULL) {\r
-    goto Done;\r
-  }\r
-  //\r
-  // Unpacked the device path\r
-  //\r
-  DevPath = BdsLibUnpackDevicePath (DevPath);\r
-  ASSERT (DevPath);\r
-\r
-  //\r
-  // Process each device path node\r
-  //\r
-  DevPathNode = DevPath;\r
-  while (!IsDevicePathEnd (DevPathNode)) {\r
-    //\r
-    // Find the handler to dump this device path node\r
-    //\r
-    DumpNode = NULL;\r
-    for (Index = 0; DevPathTable[Index].Function; Index += 1) {\r
-\r
-      if (DevicePathType (DevPathNode) == DevPathTable[Index].Type &&\r
-          DevicePathSubType (DevPathNode) == DevPathTable[Index].SubType\r
-          ) {\r
-        DumpNode = DevPathTable[Index].Function;\r
-        break;\r
-      }\r
-    }\r
-    //\r
-    // If not found, use a generic function\r
-    //\r
-    if (!DumpNode) {\r
-      DumpNode = DevPathNodeUnknown;\r
-    }\r
-    //\r
-    //  Put a path seperator in if needed\r
-    //\r
-    if (Str.len && DumpNode != DevPathEndInstance) {\r
-      CatPrint (&Str, L"/");\r
-    }\r
-    //\r
-    // Print this node of the device path\r
-    //\r
-    DumpNode (&Str, DevPathNode);\r
-\r
-    //\r
-    // Next device path node\r
-    //\r
-    DevPathNode = NextDevicePathNode (DevPathNode);\r
-  }\r
-  //\r
-  // Shrink pool used for string allocation\r
-  //\r
-  gBS->FreePool (DevPath);\r
-\r
-Done:\r
-  NewSize = (Str.len + 1) * sizeof (CHAR16);\r
-  Str.str = ReallocatePool (Str.str, NewSize, NewSize);\r
-  ASSERT (Str.str != NULL);\r
-  Str.str[Str.len] = 0;\r
-  return Str.str;\r
-}\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-LibDuplicateDevicePathInstance (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Function creates a device path data structure that identically matches the \r
-  device path passed in.\r
-\r
-Arguments:\r
-\r
-  DevPath      - A pointer to a device path data structure.\r
-\r
-Returns:\r
-\r
-  The new copy of DevPath is created to identically match the input.  \r
-  Otherwise, NULL is returned.\r
-\r
---*/\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevPath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePathInst;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Temp;\r
-  UINTN                     Size;\r
-\r
-  //\r
-  // get the size of an instance from the input\r
-  //\r
-  Temp            = DevPath;\r
-  DevicePathInst  = GetNextDevicePathInstance (&Temp, &Size);\r
-\r
-  //\r
-  // Make a copy\r
-  //\r
-  NewDevPath = NULL;\r
-  if (Size) {\r
-    NewDevPath = AllocateZeroPool (Size);\r
-    ASSERT (NewDevPath != NULL);\r
-  }\r
-\r
-  if (NewDevPath) {\r
-    CopyMem (NewDevPath, DevicePathInst, Size);\r
-  }\r
-\r
-  return NewDevPath;\r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/EdkGenericBdsLib.msa b/EdkUnixPkg/Library/EdkGenericBdsLib/EdkGenericBdsLib.msa
deleted file mode 100644 (file)
index 2944bb2..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">\r
-  <MsaHeader>\r
-    <ModuleName>EdkGenericBdsLib</ModuleName>\r
-    <ModuleType>DXE_DRIVER</ModuleType>\r
-    <GuidValue>f3aaea62-8985-11db-baff-0040d02b1835</GuidValue>\r
-    <Version>1.0</Version>\r
-    <Abstract>EDK Generic BDS Common APIs Library Instance.</Abstract>\r
-    <Description>The library instance provides common library routines help in \r
-    performance measurement, device path debug print, boot device selections,\r
-    boot device connection, console supports in BDS phase and boot from boot\r
-    device.\r
-    </Description>\r
-    <Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>\r
-    <License>All rights reserved. This program and the accompanying materials\r
-      are licensed and made available under the terms and conditions of the BSD License\r
-      which accompanies this distribution.  The full text of the license may be found at\r
-      http://opensource.org/licenses/bsd-license.php\r
-      THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-      WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>\r
-    <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052</Specification>\r
-  </MsaHeader>\r
-  <ModuleDefinitions>\r
-    <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>\r
-    <BinaryModule>false</BinaryModule>\r
-    <OutputFileBasename>EdkGenericBdsLib</OutputFileBasename>\r
-  </ModuleDefinitions>\r
-  <LibraryClassDefinitions>\r
-    <LibraryClass Usage="ALWAYS_PRODUCED">\r
-      <Keyword>EdkGenericBdsLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>BaseLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>UefiLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>DxeServicesTableLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>DebugLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>PrintLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>HobLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>BaseMemoryLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>MemoryAllocationLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>UefiBootServicesTableLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>UefiRuntimeServicesTableLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>DevicePathLib</Keyword>\r
-    </LibraryClass>\r
-    <LibraryClass Usage="ALWAYS_CONSUMED">\r
-      <Keyword>PerformanceLib</Keyword>\r
-    </LibraryClass>\r
-  </LibraryClassDefinitions>\r
-  <SourceFiles>\r
-    <Filename>BdsBoot.c</Filename>\r
-    <Filename>BdsConsole.c</Filename>\r
-    <Filename>BdsConnect.c</Filename>\r
-    <Filename>DevicePath.c</Filename>\r
-    <Filename>Performance.h</Filename>\r
-    <Filename>Performance.c</Filename>\r
-    <Filename>BdsMisc.c</Filename>\r
-    <Filename SupArchList="IPF">Ipf/ShadowRom.c</Filename>\r
-  </SourceFiles>\r
-  <PackageDependencies>\r
-    <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>\r
-    <Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>\r
-    <Package PackageGuid="f2805c44-8985-11db-9e98-0040d02b1835"/>\r
-  </PackageDependencies>\r
-  <Protocols>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiLoadedImageProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiFirmwareVolumeProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiAcpiS3SaveProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiSimpleTextOutProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiSimpleTextInProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-    <Protocol Usage="ALWAYS_CONSUMED">\r
-      <ProtocolCName>gEfiSimpleNetworkProtocolGuid</ProtocolCName>\r
-    </Protocol>\r
-  </Protocols>\r
-  <Guids>\r
-    <GuidCNames Usage="ALWAYS_CONSUMED">\r
-      <GuidCName>gEfiShellFileGuid</GuidCName>\r
-    </GuidCNames>\r
-  </Guids>\r
-  <Externs>\r
-    <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>\r
-    <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>\r
-  </Externs>\r
-</ModuleSurfaceArea>
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/Ipf/ShadowRom.c b/EdkUnixPkg/Library/EdkGenericBdsLib/Ipf/ShadowRom.c
deleted file mode 100644 (file)
index 44a643d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-  \r
-  ShadowRom.c\r
-\r
-Abstract:\r
-\r
-  Shadow all option rom\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#include "Tiano.h"\r
-#include "EfiDriverLib.h"\r
-\r
-#include EFI_PROTOCOL_DEFINITION (LegacyBios)\r
-\r
-UINT8 mShadowRomFlag = 0;\r
-\r
-VOID\r
-ShadowAllOptionRom()\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;\r
-  //\r
-  // Rom shadow only do once.\r
-  //\r
-  if (mShadowRomFlag == 0) {\r
-    Status = gBS->LocateProtocol (\r
-                    &gEfiLegacyBiosProtocolGuid,\r
-                    NULL,\r
-                    &LegacyBios\r
-                    );\r
-    if (!EFI_ERROR (Status)) {\r
-      LegacyBios->PrepareToBootEfi (LegacyBios, NULL, NULL);\r
-    }\r
-\r
-    mShadowRomFlag = 1;\r
-  }\r
-\r
-  return ;\r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/Performance.c b/EdkUnixPkg/Library/EdkGenericBdsLib/Performance.c
deleted file mode 100644 (file)
index 1d92a4d..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Performance.c\r
-\r
-Abstract:\r
-\r
-  This file include the file which can help to get the system\r
-  performance, all the function will only include if the performance\r
-  switch is set.\r
-\r
---*/\r
-\r
-#include "Performance.h"\r
-\r
-VOID\r
-ClearDebugRegisters (\r
-  VOID\r
-  )\r
-{\r
-  //\r
-  // BugBug: We should not need to do this. We need to root cause this bug!!!!\r
-  //\r
-  AsmWriteDr0 (0);\r
-  AsmWriteDr1 (0);\r
-}\r
-\r
-STATIC\r
-VOID\r
-GetShortPdbFileName (\r
-  CHAR8  *PdbFileName,\r
-  CHAR8  *GaugeString\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  UINTN Index;\r
-  UINTN Index1;\r
-  UINTN StartIndex;\r
-  UINTN EndIndex;\r
-\r
-  if (PdbFileName == NULL) {\r
-    AsciiStrCpy (GaugeString, " ");\r
-  } else {\r
-    StartIndex = 0;\r
-    for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++)\r
-      ;\r
-\r
-    for (Index = 0; PdbFileName[Index] != 0; Index++) {\r
-      if (PdbFileName[Index] == '\\') {\r
-        StartIndex = Index + 1;\r
-      }\r
-\r
-      if (PdbFileName[Index] == '.') {\r
-        EndIndex = Index;\r
-      }\r
-    }\r
-\r
-    Index1 = 0;\r
-    for (Index = StartIndex; Index < EndIndex; Index++) {\r
-      GaugeString[Index1] = PdbFileName[Index];\r
-      Index1++;\r
-      if (Index1 == PERF_TOKEN_LENGTH - 1) {\r
-        break;\r
-      }\r
-    }\r
-\r
-    GaugeString[Index1] = 0;\r
-  }\r
-\r
-  return ;\r
-}\r
-\r
-\r
-\r
-STATIC\r
-CHAR8 *\r
-GetPdbPath (\r
-  VOID *ImageBase\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Located PDB path name in PE image\r
-\r
-Arguments:\r
-\r
-  ImageBase - base of PE to search\r
-\r
-Returns:\r
-\r
-  Pointer into image at offset of PDB file name if PDB file name is found,\r
-  Otherwise a pointer to an empty string.\r
-\r
---*/\r
-{\r
-  PE_COFF_LOADER_IMAGE_CONTEXT          ImageContext;\r
-\r
-  ZeroMem (&ImageContext, sizeof (ImageContext));\r
-  ImageContext.Handle    = ImageBase;\r
-  ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory;\r
-\r
-  PeCoffLoaderGetImageInfo (&ImageContext);\r
-\r
-  return ImageContext.PdbPointer;\r
-}\r
-\r
-\r
-STATIC\r
-VOID\r
-GetNameFromHandle (\r
-  IN  EFI_HANDLE     Handle,\r
-  OUT CHAR8          *GaugeString\r
-  )\r
-{\r
-  EFI_STATUS                  Status;\r
-  EFI_LOADED_IMAGE_PROTOCOL   *Image;\r
-  CHAR8                       *PdbFileName;\r
-  EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;\r
-\r
-  AsciiStrCpy (GaugeString, " ");\r
-\r
-  //\r
-  // Get handle name from image protocol\r
-  //\r
-  Status = gBS->HandleProtocol (\r
-                  Handle,\r
-                  &gEfiLoadedImageProtocolGuid,\r
-                  (VOID **)&Image\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    Status = gBS->OpenProtocol (\r
-                    Handle,\r
-                    &gEfiDriverBindingProtocolGuid,\r
-                    (VOID **) &DriverBinding,\r
-                    NULL,\r
-                    NULL,\r
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      return ;\r
-    }\r
-    //\r
-    // Get handle name from image protocol\r
-    //\r
-    Status = gBS->HandleProtocol (\r
-                    DriverBinding->ImageHandle,\r
-                    &gEfiLoadedImageProtocolGuid,\r
-                    (VOID **)&Image\r
-                    );\r
-  }\r
-\r
-  PdbFileName = GetPdbPath (Image->ImageBase);\r
-\r
-  if (PdbFileName != NULL) {\r
-    GetShortPdbFileName (PdbFileName, GaugeString);\r
-  }\r
-\r
-  return ;\r
-}\r
-\r
-\r
-\r
-VOID\r
-WriteBootToOsPerformanceData (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  \r
-  Allocates a block of memory and writes performance data of booting to OS into it.\r
-\r
-Arguments:\r
-  \r
-  None\r
-  \r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-{\r
-  EFI_STATUS                Status;\r
-  EFI_CPU_ARCH_PROTOCOL     *Cpu;\r
-  EFI_PHYSICAL_ADDRESS      mAcpiLowMemoryBase;\r
-  UINT32                    mAcpiLowMemoryLength;\r
-  UINT32                    LimitCount;\r
-  PERF_HEADER               mPerfHeader;\r
-  PERF_DATA                 mPerfData;\r
-  EFI_HANDLE                *Handles;\r
-  UINTN                     NoHandles;\r
-  CHAR8                     GaugeString[PERF_TOKEN_LENGTH];\r
-  UINT8                     *Ptr;\r
-  UINT32                    mIndex;\r
-  UINT64                    Ticker;\r
-  UINT64                    Freq;\r
-  UINT32                    Duration;\r
-  UINT64                    CurrentTicker;\r
-  UINT64                    TimerPeriod;\r
-  UINTN                     LogEntryKey;\r
-  CONST VOID                *Handle;\r
-  CONST CHAR8               *Token;\r
-  CONST CHAR8               *Module;\r
-  UINT64                    StartTicker;\r
-  UINT64                    EndTicker;\r
-\r
-  //\r
-  // Retrive time stamp count as early as possilbe\r
-  //\r
-  Ticker = AsmReadTsc ();\r
-\r
-  //\r
-  // Allocate a block of memory that contain performance data to OS\r
-  //\r
-  mAcpiLowMemoryBase = 0xFFFFFFFF;\r
-  Status = gBS->AllocatePages (\r
-                  AllocateMaxAddress,\r
-                  EfiReservedMemoryType,\r
-                  4,\r
-                  &mAcpiLowMemoryBase\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return ;\r
-  }\r
-\r
-  mAcpiLowMemoryLength  = EFI_PAGES_TO_SIZE(4);\r
-\r
-  Ptr                   = (UINT8 *) ((UINT32) mAcpiLowMemoryBase + sizeof (PERF_HEADER));\r
-  LimitCount            = (mAcpiLowMemoryLength - sizeof (PERF_HEADER)) / sizeof (PERF_DATA);\r
-\r
-  //\r
-  // Initialize performance data structure\r
-  //\r
-  ZeroMem (&mPerfHeader, sizeof (PERF_HEADER));\r
-\r
-  //\r
-  // Get CPU frequency\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiCpuArchProtocolGuid,\r
-                  NULL,\r
-                  (VOID **)&Cpu\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->FreePages (mAcpiLowMemoryBase, 4);\r
-    return ;\r
-  }\r
-  //\r
-  // Get Cpu Frequency\r
-  //\r
-  Status = Cpu->GetTimerValue (Cpu, 0, &(CurrentTicker), &TimerPeriod);\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->FreePages (mAcpiLowMemoryBase, 4);\r
-    return ;\r
-  }\r
-\r
-  Freq                = DivU64x32 (1000000000000ULL, (UINTN) TimerPeriod);\r
-\r
-  mPerfHeader.CpuFreq = Freq;\r
-\r
-  //\r
-  // Record BDS raw performance data\r
-  //\r
-  mPerfHeader.BDSRaw = Ticker;\r
-\r
-  //\r
-  // Put Detailed performance data into memory\r
-  //\r
-  Handles = NULL;\r
-  Status = gBS->LocateHandleBuffer (\r
-                  AllHandles,\r
-                  NULL,\r
-                  NULL,\r
-                  &NoHandles,\r
-                  &Handles\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->FreePages (mAcpiLowMemoryBase, 4);\r
-    return ;\r
-  }\r
-  //\r
-  // Get DXE drivers performance\r
-  //\r
-  for (mIndex = 0; mIndex < NoHandles; mIndex++) {\r
-    Ticker = 0;\r
-    LogEntryKey = 0;\r
-    while ((LogEntryKey = GetPerformanceMeasurement (\r
-                            LogEntryKey,\r
-                            &Handle,\r
-                            &Token,\r
-                            &Module,\r
-                            &StartTicker,\r
-                            &EndTicker)) != 0) {\r
-      if ((Handle == Handles[mIndex]) && (StartTicker < EndTicker)) {\r
-        Ticker += (EndTicker - StartTicker);\r
-      }\r
-    }\r
-\r
-    Duration = (UINT32) DivU64x32 (\r
-                          Ticker,\r
-                          (UINT32) Freq\r
-                          );\r
-\r
-    if (Duration > 0) {\r
-      ZeroMem (&mPerfData, sizeof (PERF_DATA));\r
-\r
-      GetNameFromHandle (Handles[mIndex], GaugeString);\r
-\r
-      AsciiStrCpy (mPerfData.Token, GaugeString);\r
-      mPerfData.Duration = Duration;\r
-\r
-      CopyMem (Ptr, &mPerfData, sizeof (PERF_DATA));\r
-      Ptr += sizeof (PERF_DATA);\r
-\r
-      mPerfHeader.Count++;\r
-      if (mPerfHeader.Count == LimitCount) {\r
-        goto Done;\r
-      }\r
-    }\r
-  }\r
-\r
-  gBS->FreePool (Handles);\r
-\r
-  //\r
-  // Get inserted performance data\r
-  //\r
-  LogEntryKey = 0;\r
-  while ((LogEntryKey = GetPerformanceMeasurement (\r
-                          LogEntryKey,\r
-                          &Handle,\r
-                          &Token,\r
-                          &Module,\r
-                          &StartTicker,\r
-                          &EndTicker)) != 0) {\r
-    if ((Handle == NULL) && (StartTicker <= EndTicker)) {\r
-\r
-      ZeroMem (&mPerfData, sizeof (PERF_DATA));\r
-\r
-      AsciiStrnCpy (mPerfData.Token, Token, DXE_PERFORMANCE_STRING_SIZE);\r
-      mPerfData.Duration = (UINT32) DivU64x32 (\r
-                                      EndTicker - StartTicker,\r
-                                      (UINT32) Freq\r
-                                      );\r
-\r
-      CopyMem (Ptr, &mPerfData, sizeof (PERF_DATA));\r
-      Ptr += sizeof (PERF_DATA);\r
-\r
-      mPerfHeader.Count++;\r
-      if (mPerfHeader.Count == LimitCount) {\r
-        goto Done;\r
-      }\r
-    }\r
-  }\r
-\r
-Done:\r
-\r
-  ClearDebugRegisters ();\r
-\r
-  mPerfHeader.Signiture = 0x66726550;\r
-\r
-  //\r
-  // Put performance data to memory\r
-  //\r
-  CopyMem (\r
-    (UINT32 *) (UINT32) mAcpiLowMemoryBase,\r
-    &mPerfHeader,\r
-    sizeof (PERF_HEADER)\r
-    );\r
-\r
-  gRT->SetVariable (\r
-        L"PerfDataMemAddr",\r
-        &gEfiGlobalVariableGuid,\r
-        EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-        sizeof (UINT32),\r
-        (VOID *) &mAcpiLowMemoryBase\r
-        );\r
-\r
-  return ;\r
-}\r
diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/Performance.h b/EdkUnixPkg/Library/EdkGenericBdsLib/Performance.h
deleted file mode 100644 (file)
index e7f80ab..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Performance.h\r
-\r
-Abstract:\r
-\r
-  This file included the performance relete function header and \r
-  definition.\r
-\r
---*/\r
-\r
-#ifndef _PERF_H_\r
-#define _PERF_H_\r
-\r
-#define PERF_TOKEN_LENGTH       28\r
-#define PERF_PEI_ENTRY_MAX_NUM  50\r
-\r
-typedef struct {\r
-  CHAR8   Token[PERF_TOKEN_LENGTH];\r
-  UINT32  Duration;\r
-} PERF_DATA;\r
-\r
-typedef struct {\r
-  UINT64        BootToOs;\r
-  UINT64        S3Resume;\r
-  UINT32        S3EntryNum;\r
-  PERF_DATA     S3Entry[PERF_PEI_ENTRY_MAX_NUM];\r
-  UINT64        CpuFreq;\r
-  UINT64        BDSRaw;\r
-  UINT32        Count;\r
-  UINT32        Signiture;\r
-} PERF_HEADER;\r
-\r
-VOID\r
-WriteBootToOsPerformanceData (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-ClearDebugRegisters (\r
-  VOID\r
-  );\r
-\r
-#endif\r
diff --git a/EdkUnixPkg/Logo/Logo.bmp b/EdkUnixPkg/Logo/Logo.bmp
deleted file mode 100644 (file)
index 3e85229..0000000
Binary files a/EdkUnixPkg/Logo/Logo.bmp and /dev/null differ
diff --git a/EdkUnixPkg/Logo/Logo.msa b/EdkUnixPkg/Logo/Logo.msa
deleted file mode 100644 (file)
index d64bb07..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ModuleSurfaceArea  xmlns="http://www.TianoCore.org/2006/Edk2.0">\r
-  <MsaHeader>\r
-    <ModuleName>Logo</ModuleName>\r
-    <ModuleType>BASE</ModuleType>\r
-    <GuidValue>7BB28B99-61BB-11D5-9A5D-0090273FC14D</GuidValue>\r
-    <Version>1.0</Version>\r
-    <Abstract>Component description file for creating a Logo file.</Abstract>\r
-    <Description>This module provides the logo bitmap picture shown on setup screen.</Description>\r
-    <Copyright>Copyright (c) 2006, Intel Corporation</Copyright>\r
-    <License>All rights reserved. This program and the accompanying materials\r
-      are licensed and made available under the terms and conditions of the BSD License\r
-      which accompanies this distribution.  The full text of the license may be found at\r
-      http://opensource.org/licenses/bsd-license.php\r
-      THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-      WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>\r
-    <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052</Specification>\r
-  </MsaHeader>\r
-  <ModuleDefinitions>\r
-    <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>\r
-    <BinaryModule>true</BinaryModule>\r
-    <OutputFileBasename>Logo</OutputFileBasename>\r
-  </ModuleDefinitions>\r
-  <SourceFiles>\r
-    <Filename>Logo.bmp</Filename>\r
-  </SourceFiles>\r
-  <PackageDependencies>\r
-    <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>\r
-  </PackageDependencies>\r
-  <Externs>\r
-    <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>\r
-    <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>\r
-  </Externs>\r
-</ModuleSurfaceArea>