]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/BootMaint.c
Fix that the variable can't be stored. Next, I will update GetBrowserData API.
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / BootMaint / BootMaint.c
index efc862e64b8b73f8f797c5ff42383e04ce84aa05..1e8e59305910524b19242d853dd441b84e761175 100644 (file)
@@ -82,7 +82,7 @@ EFI_GUID EfiLegacyDevOrderGuid  = EFI_LEGACY_DEV_ORDER_VARIABLE_GUID;
 EFI_GUID mBootMaintGuid         = BOOT_MAINT_FORMSET_GUID;\r
 EFI_GUID mFileExplorerGuid      = FILE_EXPLORE_FORMSET_GUID;\r
 \r
-CHAR16  mBootMaintStorageName[]     = L"BmData";\r
+CHAR16  mBootMaintStorageName[]     = L"BmmData";\r
 CHAR16  mFileExplorerStorageName[]  = L"FeData";\r
 \r
 /**\r
@@ -128,20 +128,22 @@ CreateMenuStringToken (
   for (Index = 0; Index < MenuOption->MenuNumber; Index++) {\r
     NewMenuEntry = BOpt_GetMenuEntry (MenuOption, Index);\r
 \r
-    HiiLibNewString (\r
-      HiiHandle,\r
-      &NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->DisplayString\r
-      );\r
+    NewMenuEntry->DisplayStringToken = HiiSetString (\r
+                                         HiiHandle,\r
+                                         0,\r
+                                         NewMenuEntry->DisplayString,\r
+                                         NULL\r
+                                         );\r
 \r
     if (NULL == NewMenuEntry->HelpString) {\r
       NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;\r
     } else {\r
-      HiiLibNewString (\r
-        HiiHandle,\r
-        &NewMenuEntry->HelpStringToken,\r
-        NewMenuEntry->HelpString\r
-        );\r
+      NewMenuEntry->HelpStringToken = HiiSetString (\r
+                                        HiiHandle,\r
+                                        0,\r
+                                        NewMenuEntry->HelpString,\r
+                                        NULL\r
+                                        );\r
     }\r
   }\r
 \r
@@ -249,8 +251,7 @@ BootMaintCallback (
   UINT8             *NewLegacyDev;\r
   UINT8             *DisMap;\r
   EFI_FORM_ID       FormId;\r
-  UINTN             BufferSize;\r
-\r
+  \r
   if ((Value == NULL) || (ActionRequest == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -270,11 +271,17 @@ BootMaintCallback (
   //\r
   // Retrive uncommitted data from Form Browser\r
   //\r
-  CurrentFakeNVMap = &Private->BmmFakeNvData;\r
-  BufferSize = sizeof (BMM_FAKE_NV_DATA);\r
-  Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) CurrentFakeNVMap);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  CurrentFakeNVMap = (BMM_FAKE_NV_DATA *) HiiGetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA));\r
+  DisMap = (UINT8 *) CurrentFakeNVMap;\r
+  for (Index = 0; Index < sizeof (BMM_FAKE_NV_DATA); Index ++) {\r
+    if (DisMap [Index] != 0) {\r
+      break;\r
+    }\r
+  }\r
+  \r
+  if (Index == sizeof (BMM_FAKE_NV_DATA)) {\r
+    FreePool (CurrentFakeNVMap);\r
+    CurrentFakeNVMap = &Private->BmmFakeNvData;\r
   }\r
 \r
   //\r
@@ -586,8 +593,15 @@ BootMaintCallback (
   //\r
   // Pass changed uncommitted data back to Form Browser\r
   //\r
-  BufferSize = sizeof (BMM_FAKE_NV_DATA);\r
-  Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) CurrentFakeNVMap, NULL);\r
+  Status = HiiSetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap, NULL);\r
+\r
+  //\r
+  // Update local settting.\r
+  //\r
+  if (CurrentFakeNVMap != &Private->BmmFakeNvData) {\r
+    CopyMem (&Private->BmmFakeNvData, CurrentFakeNVMap, sizeof (BMM_FAKE_NV_DATA));\r
+    FreePool (CurrentFakeNVMap);\r
+  }\r
 \r
   return Status;\r
 }\r
@@ -848,7 +862,6 @@ InitializeBM (
   )\r
 {\r
   EFI_LEGACY_BIOS_PROTOCOL    *LegacyBios;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
   BMM_CALLBACK_DATA           *BmmCallbackInfo;\r
   EFI_STATUS                  Status;\r
   UINT8                       *Ptr;\r
@@ -910,7 +923,7 @@ InitializeBM (
                   NULL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Exit;\r
   }\r
 \r
   //\r
@@ -925,48 +938,61 @@ InitializeBM (
                   NULL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Exit;\r
   }\r
 \r
   //\r
   // Post our Boot Maint VFR binnary to the HII database.\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mBootMaintGuid, BmBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           BmmCallbackInfo->BmmDriverHandle,\r
-                           &BmmCallbackInfo->BmmHiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
+  BmmCallbackInfo->BmmHiiHandle = HiiAddPackages (\r
+                                    &mBootMaintGuid,\r
+                                    BmmCallbackInfo->BmmDriverHandle,\r
+                                    BmBin,\r
+                                    BdsDxeStrings,\r
+                                    NULL\r
+                                    );\r
+  ASSERT (BmmCallbackInfo->BmmHiiHandle != NULL);\r
 \r
   //\r
   // Post our File Explorer VFR binary to the HII database.\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mFileExplorerGuid, FEBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           BmmCallbackInfo->FeDriverHandle,\r
-                           &BmmCallbackInfo->FeHiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
+  BmmCallbackInfo->FeHiiHandle = HiiAddPackages (\r
+                                   &mFileExplorerGuid,\r
+                                   BmmCallbackInfo->FeDriverHandle,\r
+                                   FEBin,\r
+                                   BdsDxeStrings,\r
+                                   NULL\r
+                                   );\r
+  ASSERT (BmmCallbackInfo->FeHiiHandle != NULL);\r
 \r
   //\r
-  // Allocate space for creation of Buffer\r
+  // Init OpCode Handle and Allocate space for creation of Buffer\r
   //\r
-  gUpdateData.BufferSize = UPDATE_DATA_SIZE;\r
-  gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
-  if (gUpdateData.Data == NULL) {\r
-    FreePool (BmmCallbackInfo->LoadContext);\r
-    FreePool (BmmCallbackInfo);\r
-    return EFI_OUT_OF_RESOURCES;\r
+  mStartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  if (mStartOpCodeHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Exit;\r
   }\r
 \r
+  mEndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  if (mEndOpCodeHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Exit;\r
+  }\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the start opcode\r
+  //\r
+  mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the end opcode\r
+  //\r
+  mEndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mEndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  mEndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  mEndLabel->Number       = LABEL_END;\r
+\r
   InitializeStringDepository ();\r
 \r
   InitAllMenu (BmmCallbackInfo);\r
@@ -990,63 +1016,63 @@ InitializeBM (
   Status = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID **) &LegacyBios);\r
   if (!EFI_ERROR (Status)) {\r
     RefreshUpdateData ();\r
+    mStartLabel->Number = FORM_BOOT_LEGACY_DEVICE_ID;\r
 \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
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\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_CALLBACK,\r
-      FORM_SET_FD_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_FD_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\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_CALLBACK,\r
-      FORM_SET_HD_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_HD_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\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_CALLBACK,\r
-      FORM_SET_CD_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_CD_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\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_CALLBACK,\r
-      FORM_SET_NET_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_NET_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\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_CALLBACK,\r
-      FORM_SET_BEV_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_BEV_ORDER_ID\r
       );\r
-\r
-    IfrLibUpdateForm (\r
+    \r
+    HiiUpdateForm (\r
       BmmCallbackInfo->BmmHiiHandle,\r
       &mBootMaintGuid,\r
-      FORM_MAIN_ID,\r
-      FORM_BOOT_LEGACY_DEVICE_ID,\r
-      FALSE,\r
-      &gUpdateData\r
+      FORM_BOOT_SETUP_ID,\r
+      mStartOpCodeHandle, // Label FORM_BOOT_LEGACY_DEVICE_ID\r
+      mEndOpCodeHandle    // LABEL_END\r
       );\r
   }\r
 \r
@@ -1058,17 +1084,46 @@ InitializeBM (
   //\r
   // Remove our IFR data from HII database\r
   //\r
-  gHiiDatabase->RemovePackageList (gHiiDatabase, BmmCallbackInfo->BmmHiiHandle);\r
-  gHiiDatabase->RemovePackageList (gHiiDatabase, BmmCallbackInfo->FeHiiHandle);\r
+  HiiRemovePackages (BmmCallbackInfo->BmmHiiHandle);\r
+  HiiRemovePackages (BmmCallbackInfo->FeHiiHandle);\r
 \r
   CleanUpStringDepository ();\r
 \r
   FreeAllMenu ();\r
 \r
+Exit:\r
+  if (mStartOpCodeHandle != NULL) {\r
+    HiiFreeOpCodeHandle (mStartOpCodeHandle);\r
+  }\r
+\r
+  if (mEndOpCodeHandle != NULL) {\r
+    HiiFreeOpCodeHandle (mEndOpCodeHandle);\r
+  }\r
+\r
+  if (BmmCallbackInfo->FeDriverHandle != NULL) {\r
+    gBS->UninstallMultipleProtocolInterfaces (\r
+           BmmCallbackInfo->FeDriverHandle,\r
+           &gEfiDevicePathProtocolGuid,\r
+           &mFeHiiVendorDevicePath,\r
+           &gEfiHiiConfigAccessProtocolGuid,\r
+           &BmmCallbackInfo->FeConfigAccess,\r
+           NULL\r
+           );\r
+  }\r
+\r
+  if (BmmCallbackInfo->BmmDriverHandle != NULL) {\r
+    gBS->UninstallMultipleProtocolInterfaces (\r
+           BmmCallbackInfo->BmmDriverHandle,\r
+           &gEfiDevicePathProtocolGuid,\r
+           &mBmmHiiVendorDevicePath,\r
+           &gEfiHiiConfigAccessProtocolGuid,\r
+           &BmmCallbackInfo->BmmConfigAccess,\r
+           NULL\r
+           );\r
+  }\r
+\r
   FreePool (BmmCallbackInfo->LoadContext);\r
   FreePool (BmmCallbackInfo);\r
-  FreePool (gUpdateData.Data);\r
-  gUpdateData.Data = NULL;\r
 \r
   return Status;\r
 }\r
@@ -1169,7 +1224,7 @@ GetStringTokenFromDepository (
     //\r
     NextListNode = AllocateZeroPool (sizeof (STRING_LIST_NODE));\r
     ASSERT (NextListNode != NULL);\r
-    HiiLibNewString (CallbackData->BmmHiiHandle, &(NextListNode->StringToken), L" ");\r
+    NextListNode->StringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, L" ", NULL);\r
     ASSERT (NextListNode->StringToken != 0);\r
 \r
     StringDepository->TotalNodeNumber++;\r
@@ -1304,7 +1359,7 @@ FormSetDispatcher (
                              gFormBrowser2,\r
                              &CallbackData->BmmHiiHandle,\r
                              1,\r
-                             NULL,\r
+                             &mBootMaintGuid,\r
                              0,\r
                              NULL,\r
                              &ActionRequest\r
@@ -1326,7 +1381,7 @@ FormSetDispatcher (
                                gFormBrowser2,\r
                                &CallbackData->FeHiiHandle,\r
                                1,\r
-                               NULL,\r
+                               &mFileExplorerGuid,\r
                                0,\r
                                NULL,\r
                                &ActionRequest\r
@@ -1360,6 +1415,7 @@ FormSetDispatcher (
 \r
 **/\r
 EFI_STATUS\r
+EFIAPI\r
 BdsDeleteBootOption (\r
   IN UINTN                       OptionNumber,\r
   IN OUT UINT16                  *BootOrder,\r