]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/BdsDxe/BootMaint/BootMaint.c
Clean up BootMaint module in BdsDxe.
[mirror_edk2.git] / MdeModulePkg / Universal / BdsDxe / BootMaint / BootMaint.c
index 6eae9c18dd1714603e85e2d4f7005e601a89e549..432be94c9f480723120cde7c52503887dc006327 100644 (file)
@@ -17,6 +17,14 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "Bds.h"\r
 #include "FrontPage.h"\r
 \r
+EFI_DEVICE_PATH_PROTOCOL  EndDevicePath[] = {\r
+  END_DEVICE_PATH_TYPE,\r
+  END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
+  END_DEVICE_PATH_LENGTH,\r
+  0\r
+};\r
+\r
+\r
 EFI_GUID EfiLegacyDevOrderGuid = EFI_LEGACY_DEV_ORDER_VARIABLE_GUID;\r
 EFI_GUID mBootMaintGuid = BOOT_MAINT_FORMSET_GUID;\r
 EFI_GUID mFileExplorerGuid = FILE_EXPLORE_FORMSET_GUID;\r
@@ -54,9 +62,9 @@ FreeAllMenu (
   Create string tokens for a menu from its help strings and display strings\r
 \r
 \r
-  @param CallbackData    EDES_TODO: Add parameter description\r
-  @param HiiHandle       Hii Handle of the package to be updated.\r
-  @param MenuOption      The Menu whose string tokens need to be created\r
+  @param CallbackData    The BMM context data.\r
+  @param HiiHandle       Hii Handle of the package to be updated.\r
+  @param MenuOption      The Menu whose string tokens need to be created\r
 \r
   @retval  EFI_SUCCESS      string tokens created successfully\r
   @retval  others           contain some errors\r
@@ -723,12 +731,13 @@ Error:
 }\r
 \r
 /**\r
-  EDES_TODO: Add function description.\r
+  Discard all changes done to the BMM pages such as Boot Order change,\r
+  Driver order change.\r
 \r
-  @param Private         EDES_TODO: Add parameter description\r
-  @param CurrentFakeNVMap EDES_TODO: Add parameter description\r
+  @param Private         The BMM context data.\r
+  @param CurrentFakeNVMap The current Fack NV Map.\r
 \r
-  @return EDES_TODO: Add description for return value\r
+  @return VOID\r
 \r
 **/\r
 VOID\r
@@ -803,7 +812,7 @@ InitializeBM (
   //\r
   // Create CallbackData structures for Driver Callback\r
   //\r
-  BmmCallbackInfo = EfiAllocateZeroPool (sizeof (BMM_CALLBACK_DATA));\r
+  BmmCallbackInfo = AllocateZeroPool (sizeof (BMM_CALLBACK_DATA));\r
   if (BmmCallbackInfo == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
@@ -811,7 +820,7 @@ InitializeBM (
   //\r
   // Create LoadOption in BmmCallbackInfo for Driver Callback\r
   //\r
-  Ptr = EfiAllocateZeroPool (sizeof (BM_LOAD_CONTEXT) + sizeof (BM_FILE_CONTEXT) + sizeof (BM_HANDLE_CONTEXT) + sizeof (BM_MENU_ENTRY));\r
+  Ptr = AllocateZeroPool (sizeof (BM_LOAD_CONTEXT) + sizeof (BM_FILE_CONTEXT) + sizeof (BM_HANDLE_CONTEXT) + sizeof (BM_MENU_ENTRY));\r
   if (Ptr == NULL) {\r
     SafeFreePool (BmmCallbackInfo);\r
     return EFI_OUT_OF_RESOURCES;\r
@@ -917,7 +926,7 @@ InitializeBM (
   // Allocate space for creation of Buffer\r
   //\r
   gUpdateData.BufferSize = UPDATE_DATA_SIZE;\r
-  gUpdateData.Data = EfiAllocateZeroPool (UPDATE_DATA_SIZE);\r
+  gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
   if (gUpdateData.Data == NULL) {\r
     SafeFreePool (BmmCallbackInfo->LoadContext);\r
     SafeFreePool (BmmCallbackInfo);\r
@@ -1031,11 +1040,11 @@ InitializeBM (
 }\r
 \r
 /**\r
-  EDES_TODO: Add function description.\r
+  Initialized all Menu Option List.\r
 \r
-  @param CallbackData    EDES_TODO: Add parameter description\r
+  @param CallbackData    The BMM context data.\r
 \r
-  @return EDES_TODO: Add description for return value\r
+  @return VOID\r
 \r
 **/\r
 VOID\r
@@ -1060,11 +1069,11 @@ InitAllMenu (
 }\r
 \r
 /**\r
-  EDES_TODO: Add function description.\r
+  Free up all Menu Option list.\r
 \r
-  @param VOID            EDES_TODO: Add parameter description\r
+  @param VOID\r
 \r
-  @return EDES_TODO: Add description for return value\r
+  @return VOID\r
 \r
 **/\r
 VOID\r
@@ -1085,9 +1094,9 @@ FreeAllMenu (
   Intialize all the string depositories.\r
 \r
 \r
-  @param VOID            EDES_TODO: Add parameter description\r
+  @param VOID\r
 \r
-           EDES_TODO: Description incomplete  None.\r
+  @return VOID\r
 \r
 **/\r
 VOID\r
@@ -1096,7 +1105,7 @@ InitializeStringDepository (
   )\r
 {\r
   STRING_DEPOSITORY *StringDepository;\r
-  StringDepository              = EfiAllocateZeroPool (sizeof (STRING_DEPOSITORY) * STRING_DEPOSITORY_NUMBER);\r
+  StringDepository              = AllocateZeroPool (sizeof (STRING_DEPOSITORY) * STRING_DEPOSITORY_NUMBER);\r
   FileOptionStrDepository       = StringDepository++;\r
   ConsoleOptionStrDepository    = StringDepository++;\r
   BootOptionStrDepository       = StringDepository++;\r
@@ -1136,7 +1145,7 @@ GetStringTokenFromDepository (
     //\r
     // If there is no usable node in the list, update the list.\r
     //\r
-    NextListNode = EfiAllocateZeroPool (sizeof (STRING_LIST_NODE));\r
+    NextListNode = AllocateZeroPool (sizeof (STRING_LIST_NODE));\r
 \r
     HiiLibNewString (CallbackData->BmmHiiHandle, &(NextListNode->StringToken), L" ");\r
     ASSERT (NextListNode->StringToken != 0);\r
@@ -1159,9 +1168,9 @@ GetStringTokenFromDepository (
   Reclaim string depositories by moving the current node pointer to list head..\r
 \r
 \r
-  @param VOID            EDES_TODO: Add parameter description\r
+  @param VOID \r
 \r
-           EDES_TODO: Description incomplete  None.\r
+  @return VOID\r
 \r
 **/\r
 VOID\r
@@ -1183,9 +1192,9 @@ ReclaimStringDepository (
   Release resource for all the string depositories.\r
 \r
 \r
-  @param VOID            EDES_TODO: Add parameter description\r
+  @param VOID\r
 \r
-           EDES_TODO: Description incomplete  None.\r
+  @return VOID\r
 \r
 **/\r
 VOID\r
@@ -1223,9 +1232,10 @@ CleanUpStringDepository (
   Start boot maintenance manager\r
 \r
 \r
-  @param VOID            EDES_TODO: Add parameter description\r
+  @param VOID\r
 \r
-  @return EDES_TODO: Add description for return value\r
+  @retval EFI_SUCCESS If BMM is invoked successfully.\r
+  @return Other value if BMM return unsuccessfully.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1272,9 +1282,11 @@ BdsStartBootMaint (
   Dispatch BMM formset and FileExplorer formset.\r
 \r
 \r
-  @param CallbackData    EDES_TODO: Add parameter description\r
+  @param CallbackData    The BMM context data.\r
 \r
-  @return EDES_TODO: Add description for return value\r
+  @retval EFI_SUCCESS If function complete successfully.\r
+  @retturn Other value if the Setup Browser process BMM's pages and\r
+           return unsuccessfully.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1335,3 +1347,58 @@ FormSetDispatcher (
   return Status;\r
 }\r
 \r
+\r
+/**\r
+  Deletete the Boot Option from EFI Variable. The Boot Order Arrray\r
+  is also updated.\r
+\r
+  @param OptionNumber    EDES_TODO: Add parameter description\r
+  @param BootOrder       The Boot Order array.\r
+  @param BootOrderSize   The size of the Boot Order Array.\r
+\r
+  @return Other value if the Boot Option specified by OptionNumber is not deleteed succesfully.\r
+  @retval EFI_SUCCESS    If function return successfully.\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
+\r