]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Application/PlatOverMngr/PlatOverMngr.c
HII Library Class interface refine.
[mirror_edk2.git] / MdeModulePkg / Application / PlatOverMngr / PlatOverMngr.c
index 543f896a743858cc448b7c57913521370655fe0b..018917fd0aec687acc3cb45f8a39f3cba627946b 100644 (file)
@@ -38,6 +38,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Protocol/DriverBinding.h>\r
 #include <Protocol/DevicePathToText.h>\r
 #include <Protocol/DevicePath.h>\r
+#include <Guid/MdeModuleHii.h>\r
 \r
 #include <Library/DevicePathLib.h>\r
 #include <Library/BaseLib.h>\r
@@ -46,12 +47,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/UefiApplicationEntryPoint.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/PlatformDriverOverrideLib.h>\r
-#include <Library/HiiLib.h>\r
-#include <Library/IfrSupportLib.h>\r
-#include <Library/ExtendedIfrSupportLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/DevicePathLib.h>\r
+#include <Library/HiiLib.h>\r
+\r
 #include "PlatOverMngr.h"\r
 \r
 #define EFI_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('C', 'l', 'b', 'k')\r
@@ -88,6 +88,7 @@ extern UINT8  PlatOverMngrStrings[];
 // module global data\r
 //\r
 EFI_GUID                     mPlatformOverridesManagerGuid = PLAT_OVER_MNGR_GUID;\r
+CHAR16                       mVariableName[] = L"Data";\r
 LIST_ENTRY                   mMappingDataBase = INITIALIZE_LIST_HEAD_VARIABLE (mMappingDataBase);\r
 \r
 EFI_HANDLE                   *mDevicePathHandleBuffer;\r
@@ -103,6 +104,7 @@ EFI_DEVICE_PATH_PROTOCOL     *mControllerDevicePathProtocol[MAX_CHOICE_NUM];
 UINTN                        mSelectedDriverImageNum;\r
 UINTN                        mLastSavedDriverImageNum;\r
 UINT16                       mCurrentPage;\r
+EFI_CALLBACK_INFO           *mCallbackInfo;\r
 \r
 HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath = {\r
   {\r
@@ -114,10 +116,7 @@ HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath = {
         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
       }\r
     },\r
-    //\r
-    // {99936717-BF3D-4b04-9787-76CEE324D76F}\r
-    //\r
-    { 0x99936717, 0xbf3d, 0x4b04, { 0x97, 0x87, 0x76, 0xce, 0xe3, 0x24, 0xd7, 0x6f } }\r
+    EFI_CALLER_ID_GUID\r
   },\r
   {\r
     END_DEVICE_PATH_TYPE,\r
@@ -345,7 +344,6 @@ UpdateDeviceSelectPage (
   IN PLAT_OVER_MNGR_DATA              *FakeNvData\r
   )\r
 {\r
-  EFI_HII_UPDATE_DATA                       UpdateData;\r
   EFI_STATUS                                Status;\r
   UINTN                                     Index;\r
   UINTN                                     DevicePathHandleCount;\r
@@ -356,9 +354,13 @@ UpdateDeviceSelectPage (
   EFI_PCI_IO_PROTOCOL                       *PciIo;\r
   EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;\r
   UINTN                                     Len;\r
-  \r
+  VOID                                      *StartOpCodeHandle;\r
+  VOID                                      *EndOpCodeHandle;\r
+  EFI_IFR_GUID_LABEL                        *StartLabel;\r
+  EFI_IFR_GUID_LABEL                        *EndLabel;  \r
+\r
   //\r
-  // set current page form ID.\r
+  // Set current page form ID.\r
   //\r
   mCurrentPage = FORM_ID_DEVICE;  \r
   \r
@@ -366,25 +368,40 @@ UpdateDeviceSelectPage (
   // Initial the mapping database in memory\r
   //\r
   FreeMappingDatabase (&mMappingDataBase);\r
-  Status = InitOverridesMapping (&mMappingDataBase);\r
+  InitOverridesMapping (&mMappingDataBase);\r
+\r
+  //\r
+  // Init OpCode Handle\r
+  //\r
+  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (StartOpCodeHandle != NULL);\r
+\r
+  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (EndOpCodeHandle != NULL);\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the start opcode\r
+  //\r
+  StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  StartLabel->Number = FORM_ID_DEVICE;\r
 \r
   //\r
-  // Clear all the content in the first page\r
+  // Create Hii Extend Label OpCode as the end opcode\r
   //\r
-  UpdateData.BufferSize = UPDATE_DATA_SIZE;\r
-  UpdateData.Offset = 0;\r
-  UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
-  ASSERT (UpdateData.Data != NULL);\r
+  EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  EndLabel->Number       = LABEL_END;\r
+\r
   //\r
   // Clear first page form\r
   //\r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     Private->RegisteredHandle,\r
     &mPlatformOverridesManagerGuid,\r
     FORM_ID_DEVICE,\r
-    FORM_ID_DEVICE,\r
-    FALSE,\r
-    &UpdateData\r
+    StartOpCodeHandle, // Label FORM_ID_DEVICE\r
+    EndOpCodeHandle    // LABEL_END\r
     );\r
 \r
   //\r
@@ -392,17 +409,19 @@ UpdateDeviceSelectPage (
   // then the 'first refresh' string will be replaced by the 'refresh' string, and the two strings content are same after the replacement\r
   //\r
   NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH);\r
-  HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), &NewString);\r
+  NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), NULL);\r
   ASSERT (NewString != NULL);\r
-  Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+    ASSERT (FALSE);\r
+  }\r
   FreePool (NewString);\r
 \r
   NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH_HELP);\r
-  HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), &NewString);\r
+  NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), NULL);\r
   ASSERT (NewString != NULL);\r
-  Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+    ASSERT (FALSE);\r
+  }\r
   FreePool (NewString);\r
 \r
   //\r
@@ -487,42 +506,38 @@ UpdateDeviceSelectPage (
     }\r
     StrCat (NewString, ControllerName);\r
 \r
-    NewStringToken = mControllerToken[Index];\r
-    if (NewStringToken == 0) {\r
-      Status = HiiLibNewString (Private->RegisteredHandle, &NewStringToken, NewString);\r
-    } else {\r
-      Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-    }\r
-    ASSERT_EFI_ERROR (Status);\r
+    NewStringToken = HiiSetString (Private->RegisteredHandle, mControllerToken[Index], NewString, NULL);\r
+    ASSERT (NewStringToken != 0);\r
     FreePool (NewString);\r
     //\r
     // Save the device path string toke for next access use\r
     //\r
     mControllerToken[Index] = NewStringToken;\r
-\r
-    CreateGotoOpCode (\r
+      \r
+    HiiCreateGotoOpCode (\r
+      StartOpCodeHandle,\r
       FORM_ID_DRIVER,\r
       NewStringToken,\r
       STRING_TOKEN (STR_GOTO_HELP_DRIVER),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      (UINT16) (Index + KEY_VALUE_DEVICE_OFFSET),\r
-      &UpdateData\r
+      (UINT16) (Index + KEY_VALUE_DEVICE_OFFSET)\r
       );\r
   }\r
 \r
   //\r
   // Update first page form\r
   //\r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     Private->RegisteredHandle,\r
     &mPlatformOverridesManagerGuid,\r
     FORM_ID_DEVICE,\r
-    FORM_ID_DEVICE,\r
-    FALSE,\r
-    &UpdateData\r
+    StartOpCodeHandle, // Label FORM_ID_DEVICE\r
+    EndOpCodeHandle    // LABEL_END\r
     );\r
 \r
-  FreePool (UpdateData.Data);\r
+  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -613,7 +628,6 @@ UpdateBindingDriverSelectPage (
   IN PLAT_OVER_MNGR_DATA              *FakeNvData\r
   )\r
 {\r
-  EFI_HII_UPDATE_DATA                       UpdateData;\r
   EFI_STATUS                                Status;\r
   UINTN                                     Index;\r
   CHAR16                                    *NewString;\r
@@ -626,6 +640,10 @@ UpdateBindingDriverSelectPage (
   EFI_DEVICE_PATH_PROTOCOL                  *LoadedImageDevicePath;\r
   EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;\r
   EFI_HANDLE                                DriverBindingHandle;\r
+  VOID                                      *StartOpCodeHandle;\r
+  VOID                                      *EndOpCodeHandle;\r
+  EFI_IFR_GUID_LABEL                        *StartLabel;\r
+  EFI_IFR_GUID_LABEL                        *EndLabel;\r
 \r
   //\r
   // If user select a controller item in the first page  the following code will be run.\r
@@ -641,26 +659,42 @@ UpdateBindingDriverSelectPage (
   // Switch the item callback key value to its NO. in mDevicePathHandleBuffer\r
   //\r
   mSelectedCtrIndex = KeyValue - KEY_VALUE_DEVICE_OFFSET;\r
-  ASSERT (mSelectedCtrIndex > 0 && mSelectedCtrIndex < MAX_CHOICE_NUM);\r
+  ASSERT (mSelectedCtrIndex < MAX_CHOICE_NUM);\r
 \r
   mLastSavedDriverImageNum = 0;\r
+\r
+  //\r
+  // Init OpCode Handle\r
+  //\r
+  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (StartOpCodeHandle != NULL);\r
+\r
+  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (EndOpCodeHandle != NULL);\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the start opcode\r
   //\r
-  // Clear all the content in dynamic page\r
+  StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  StartLabel->Number       = FORM_ID_DRIVER;\r
+\r
   //\r
-  UpdateData.BufferSize = UPDATE_DATA_SIZE;\r
-  UpdateData.Offset = 0;\r
-  UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
-  ASSERT (UpdateData.Data != NULL);\r
+  // Create Hii Extend Label OpCode as the end opcode\r
+  //\r
+  EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  EndLabel->Number       = LABEL_END;\r
+\r
   //\r
   // Clear second page form\r
   //\r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     Private->RegisteredHandle,\r
     &mPlatformOverridesManagerGuid,\r
     FORM_ID_DRIVER,\r
-    FORM_ID_DRIVER,\r
-    FALSE,\r
-    &UpdateData\r
+    StartOpCodeHandle,\r
+    EndOpCodeHandle\r
     );\r
 \r
   //\r
@@ -762,7 +796,7 @@ UpdateBindingDriverSelectPage (
       //\r
       // give a default name\r
       //\r
-      HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_DRIVER_DEFAULT_NAME), &DriverName);\r
+      DriverName = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_DRIVER_DEFAULT_NAME), NULL);\r
       ASSERT (DriverName != NULL);\r
       FreeDriverName = TRUE;  // the DriverName string need to free pool\r
     }\r
@@ -784,14 +818,9 @@ UpdateBindingDriverSelectPage (
       mLastSavedDriverImageNum++;\r
     }\r
     StrCat (NewString, DriverName);\r
-    NewStringToken = mDriverImageToken[Index];\r
-    if (NewStringToken == 0) {\r
-      Status = HiiLibNewString (Private->RegisteredHandle, &NewStringToken, NewString);\r
-    } else {\r
-      Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-    }\r
+    NewStringToken = HiiSetString (Private->RegisteredHandle, mDriverImageToken[Index], NewString, NULL);\r
+    ASSERT (NewStringToken != 0);\r
     mDriverImageToken[Index] = NewStringToken;\r
-    ASSERT_EFI_ERROR (Status);\r
     FreePool (NewString);\r
     if (FreeDriverName) {\r
       FreePool (DriverName);\r
@@ -805,18 +834,14 @@ UpdateBindingDriverSelectPage (
     NewString = AllocateZeroPool (StrSize (DriverName));\r
     ASSERT (NewString != NULL); \r
     StrCat (NewString, DriverName);\r
-    NewStringHelpToken = mDriverImageFilePathToken[Index];\r
-    if (NewStringHelpToken == 0) {\r
-      Status = HiiLibNewString (Private->RegisteredHandle, &NewStringHelpToken, NewString);\r
-    } else {\r
-      Status = HiiLibSetString (Private->RegisteredHandle, NewStringHelpToken, NewString);\r
-    }\r
+    NewStringHelpToken = HiiSetString (Private->RegisteredHandle, mDriverImageFilePathToken[Index], NewString, NULL);\r
+    ASSERT (NewStringHelpToken != 0);\r
     mDriverImageFilePathToken[Index] = NewStringHelpToken;\r
-    ASSERT_EFI_ERROR (Status);\r
     FreePool (NewString);\r
     FreePool (DriverName);\r
 \r
-    CreateCheckBoxOpCode (\r
+    HiiCreateCheckBoxOpCode (\r
+      StartOpCodeHandle,\r
       (UINT16) (DRIVER_SELECTION_QUESTION_ID + Index),\r
       VARSTORE_ID_PLAT_OVER_MNGR,\r
       (UINT16) (DRIVER_SELECTION_VAR_OFFSET + Index),\r
@@ -824,23 +849,23 @@ UpdateBindingDriverSelectPage (
       NewStringHelpToken,\r
       0,\r
       0,\r
-      &UpdateData\r
+      NULL\r
       );\r
   }\r
 \r
   //\r
   // Update second page form\r
   //\r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     Private->RegisteredHandle,\r
     &mPlatformOverridesManagerGuid,\r
     FORM_ID_DRIVER,\r
-    FORM_ID_DRIVER,\r
-    FALSE,\r
-    &UpdateData\r
+    StartOpCodeHandle, // Label FORM_ID_DRIVER\r
+    EndOpCodeHandle    // LABEL_END\r
     );\r
 \r
-  FreePool (UpdateData.Data);\r
+  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -862,15 +887,19 @@ UpdatePrioritySelectPage (
   IN PLAT_OVER_MNGR_DATA              *FakeNvData\r
   )\r
 {\r
-  EFI_HII_UPDATE_DATA                       UpdateData;\r
   UINTN                                     Index;\r
   EFI_DEVICE_PATH_PROTOCOL                  *LoadedImageDevicePath;\r
-  IFR_OPTION                                *IfrOptionList;\r
   UINTN                                     SelectedDriverImageNum;\r
   UINT32                                    DriverImageNO;\r
   UINTN                                     MinNO;\r
   UINTN                                     Index1;\r
   UINTN                                     TempNO[100];\r
+  UINTN                                     OrderNO[100];\r
+  VOID                                      *StartOpCodeHandle;\r
+  VOID                                      *EndOpCodeHandle;\r
+  VOID                                      *OptionsOpCodeHandle;\r
+  EFI_IFR_GUID_LABEL                        *StartLabel;\r
+  EFI_IFR_GUID_LABEL                        *EndLabel;\r
 \r
   //\r
   // Following code will be run if user select 'order ... priority' item in second page\r
@@ -878,20 +907,38 @@ UpdatePrioritySelectPage (
   //\r
   mCurrentPage = FORM_ID_ORDER;\r
 \r
-  UpdateData.BufferSize = UPDATE_DATA_SIZE;\r
-  UpdateData.Offset = 0;\r
-  UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
-  ASSERT (UpdateData.Data != NULL);\r
+  //\r
+  // Init OpCode Handle\r
+  //\r
+  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (StartOpCodeHandle != NULL);\r
+\r
+  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (EndOpCodeHandle != NULL);\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the start opcode\r
+  //\r
+  StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  StartLabel->Number       = FORM_ID_ORDER;\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the end opcode\r
+  //\r
+  EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  EndLabel->Number       = LABEL_END;\r
+\r
   //\r
   // Clear third page form\r
   //\r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     Private->RegisteredHandle,\r
     &mPlatformOverridesManagerGuid,\r
     FORM_ID_ORDER,\r
-    FORM_ID_ORDER,\r
-    FALSE,\r
-    &UpdateData\r
+    StartOpCodeHandle,\r
+    EndOpCodeHandle\r
     );\r
 \r
   //\r
@@ -908,21 +955,26 @@ UpdatePrioritySelectPage (
   if (SelectedDriverImageNum == 0) {\r
     return EFI_SUCCESS;\r
   }\r
-  \r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * mSelectedDriverImageNum);\r
-  ASSERT (IfrOptionList != NULL);\r
+\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
   //\r
   // Create order list for those selected drivers\r
   //\r
   SelectedDriverImageNum = 0;\r
   for (Index = 0; Index < mDriverImageHandleCount; Index++) {\r
     if (FakeNvData->DriSelection[Index] != 0) {\r
-      IfrOptionList[SelectedDriverImageNum].StringToken = mDriverImageToken[Index];\r
       //\r
       // Use the NO. in driver binding buffer as value, will use it later\r
       //\r
-      IfrOptionList[SelectedDriverImageNum].Value.u8 = (UINT8) (Index + 1);\r
-      IfrOptionList[SelectedDriverImageNum].Flags = 0;\r
+      HiiCreateOneOfOptionOpCode (\r
+        OptionsOpCodeHandle,\r
+        mDriverImageToken[Index],\r
+        0,\r
+        EFI_IFR_NUMERIC_SIZE_1,\r
+        Index + 1\r
+        );\r
 \r
       //\r
       // Get the EFI Loaded Image Device Path Protocol\r
@@ -951,6 +1003,7 @@ UpdatePrioritySelectPage (
         mLastSavedDriverImageNum++;\r
       }\r
       TempNO[SelectedDriverImageNum] = DriverImageNO;\r
+      OrderNO[SelectedDriverImageNum] = Index + 1;\r
       SelectedDriverImageNum ++;\r
     }\r
   }\r
@@ -978,11 +1031,15 @@ UpdatePrioritySelectPage (
     //\r
     // the IfrOptionList[MinNO].Value = the driver NO. in driver binding buffer\r
     //\r
-    FakeNvData->DriOrder[Index] =IfrOptionList[MinNO].Value.u8;\r
+    FakeNvData->DriOrder[Index] = (UINT8) OrderNO[MinNO];\r
     TempNO[MinNO] = MAX_CHOICE_NUM + 1;\r
   }\r
-\r
-  CreateOrderedListOpCode (\r
+  \r
+  //\r
+  // Create Order List OpCode\r
+  //\r
+  HiiCreateOrderedListOpCode (\r
+    StartOpCodeHandle,\r
     (UINT16) DRIVER_ORDER_QUESTION_ID,\r
     VARSTORE_ID_PLAT_OVER_MNGR,\r
     (UINT16) DRIVER_ORDER_VAR_OFFSET,\r
@@ -992,25 +1049,25 @@ UpdatePrioritySelectPage (
     0,\r
     EFI_IFR_NUMERIC_SIZE_1,\r
     (UINT8) MAX_CHOICE_NUM,\r
-    IfrOptionList,\r
-    SelectedDriverImageNum,\r
-    &UpdateData\r
+    OptionsOpCodeHandle,\r
+    NULL\r
     );\r
 \r
   //\r
   // Update third page form\r
   //\r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     Private->RegisteredHandle,\r
     &mPlatformOverridesManagerGuid,\r
     FORM_ID_ORDER,\r
-    FORM_ID_ORDER,\r
-    FALSE,\r
-    &UpdateData\r
+    StartOpCodeHandle, // Label FORM_ID_ORDER\r
+    EndOpCodeHandle    // LABEL_END\r
     );\r
 \r
-  FreePool (IfrOptionList);\r
-  FreePool (UpdateData.Data);\r
+  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -1102,7 +1159,7 @@ PlatOverMngrExtractConfig (
   EFI_STATUS                       Status;\r
   EFI_CALLBACK_INFO                *Private;\r
   EFI_HII_CONFIG_ROUTING_PROTOCOL  *HiiConfigRouting;\r
-\r
+  \r
   if (Request == NULL) {\r
     return EFI_NOT_FOUND;\r
   }\r
@@ -1148,18 +1205,13 @@ PlatOverMngrRouteConfig (
   )\r
 {\r
   EFI_CALLBACK_INFO                         *Private;\r
-  EFI_STATUS                                Status;\r
   UINT16                                    KeyValue;\r
-  UINTN                                     BufferSize;\r
   PLAT_OVER_MNGR_DATA                       *FakeNvData;\r
 \r
-  Private     = EFI_CALLBACK_INFO_FROM_THIS (This);\r
-\r
-  FakeNvData = &Private->FakeNvData;\r
-  BufferSize = sizeof (PLAT_OVER_MNGR_DATA);\r
-  Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) FakeNvData);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  Private    = EFI_CALLBACK_INFO_FROM_THIS (This);\r
+  FakeNvData = (PLAT_OVER_MNGR_DATA *) HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA));\r
+  if (FakeNvData == NULL) {\r
+    return EFI_NOT_FOUND;\r
   }\r
 \r
   if (mCurrentPage == FORM_ID_DRIVER) {\r
@@ -1178,6 +1230,11 @@ PlatOverMngrRouteConfig (
     KeyValue = KEY_VALUE_ORDER_SAVE_AND_EXIT;\r
     CommintChanges (Private, KeyValue, FakeNvData);\r
   }\r
+\r
+  if (FakeNvData != NULL) {\r
+    FreePool (FakeNvData);\r
+  }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -1216,17 +1273,13 @@ PlatOverMngrCallback (
   EFI_CALLBACK_INFO                         *Private;\r
   EFI_STATUS                                Status;\r
   EFI_STRING_ID                             NewStringToken;\r
-  UINTN                                     BufferSize;\r
-  PLAT_OVER_MNGR_DATA                       *FakeNvData;\r
   EFI_INPUT_KEY                             Key;\r
-\r
+  PLAT_OVER_MNGR_DATA                       *FakeNvData;\r
+  \r
   Private = EFI_CALLBACK_INFO_FROM_THIS (This);\r
-\r
-  FakeNvData = &Private->FakeNvData;\r
-  BufferSize = sizeof (PLAT_OVER_MNGR_DATA);\r
-  Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) FakeNvData);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  FakeNvData = (PLAT_OVER_MNGR_DATA *) HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA));\r
+  if (FakeNvData == NULL) {\r
+    return EFI_NOT_FOUND;\r
   }\r
 \r
   if (KeyValue == KEY_VALUE_DEVICE_REFRESH ||\r
@@ -1238,8 +1291,9 @@ PlatOverMngrCallback (
     // Update page title string\r
     //\r
     NewStringToken = STRING_TOKEN (STR_TITLE);\r
-    Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path");\r
-    ASSERT_EFI_ERROR (Status);\r
+    if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path", NULL) == 0) {\r
+      ASSERT (FALSE);\r
+    }\r
   }\r
 \r
   if (((KeyValue >= KEY_VALUE_DEVICE_OFFSET) && (KeyValue < KEY_VALUE_DEVICE_MAX)) || (KeyValue == KEY_VALUE_ORDER_GOTO_PREVIOUS)) {\r
@@ -1251,8 +1305,9 @@ PlatOverMngrCallback (
     // Update page title string\r
     //\r
     NewStringToken = STRING_TOKEN (STR_TITLE);\r
-    Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller");\r
-    ASSERT_EFI_ERROR (Status);\r
+    if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller", NULL) == 0) {\r
+      ASSERT (FALSE);\r
+    }\r
   }\r
 \r
   if (KeyValue == KEY_VALUE_DRIVER_GOTO_ORDER) {\r
@@ -1261,15 +1316,16 @@ PlatOverMngrCallback (
     // Update page title string\r
     //\r
     NewStringToken = STRING_TOKEN (STR_TITLE);\r
-    Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them");\r
-    ASSERT_EFI_ERROR (Status);\r
+    if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them", NULL) == 0) {\r
+      ASSERT (FALSE);\r
+    }\r
   }\r
 \r
   if (KeyValue == KEY_VALUE_ORDER_SAVE_AND_EXIT) {\r
     Status = CommintChanges (Private, KeyValue, FakeNvData);\r
     *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
     if (EFI_ERROR (Status)) {\r
-      IfrLibCreatePopUp (1, &Key, L"Single Override Info too large, Saving Error!");\r
+      CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Single Override Info too large, Saving Error!", NULL);\r
       return EFI_DEVICE_ERROR;\r
     }\r
   }\r
@@ -1285,8 +1341,15 @@ PlatOverMngrCallback (
   //\r
   // Pass changed uncommitted data back to Form Browser\r
   //\r
-  BufferSize = sizeof (PLAT_OVER_MNGR_DATA);\r
-  Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) FakeNvData, NULL);\r
+  HiiSetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData, NULL);\r
+  \r
+  //\r
+  // Update local configuration buffer.\r
+  //\r
+  CopyMem (&Private->FakeNvData, FakeNvData, sizeof (PLAT_OVER_MNGR_DATA));\r
+  if (FakeNvData != NULL) {\r
+    FreePool (FakeNvData);\r
+  }\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -1310,23 +1373,8 @@ PlatOverMngrInit (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
-  EFI_CALLBACK_INFO           *CallbackInfo;\r
   EFI_FORM_BROWSER2_PROTOCOL  *FormBrowser2;\r
   \r
-  //\r
-  // There should only be one HII protocol\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiHiiDatabaseProtocolGuid,\r
-                  NULL,\r
-                  (VOID **) &HiiDatabase\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
   //\r
   // There should only be one Form Configuration protocol\r
   //\r
@@ -1339,25 +1387,25 @@ PlatOverMngrInit (
     return Status;\r
   }\r
 \r
-  CallbackInfo = AllocateZeroPool (sizeof (EFI_CALLBACK_INFO));\r
-  if (CallbackInfo == NULL) {\r
+  mCallbackInfo = AllocateZeroPool (sizeof (EFI_CALLBACK_INFO));\r
+  if (mCallbackInfo == NULL) {\r
     return EFI_BAD_BUFFER_SIZE;\r
   }\r
 \r
-  CallbackInfo->Signature = EFI_CALLBACK_INFO_SIGNATURE;\r
-  CallbackInfo->ConfigAccess.ExtractConfig = PlatOverMngrExtractConfig;\r
-  CallbackInfo->ConfigAccess.RouteConfig   = PlatOverMngrRouteConfig;\r
-  CallbackInfo->ConfigAccess.Callback      = PlatOverMngrCallback;\r
+  mCallbackInfo->Signature = EFI_CALLBACK_INFO_SIGNATURE;\r
+  mCallbackInfo->ConfigAccess.ExtractConfig = PlatOverMngrExtractConfig;\r
+  mCallbackInfo->ConfigAccess.RouteConfig   = PlatOverMngrRouteConfig;\r
+  mCallbackInfo->ConfigAccess.Callback      = PlatOverMngrCallback;\r
 \r
   //\r
   // Install Device Path Protocol and Config Access protocol to driver handle\r
   //\r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
-                  &CallbackInfo->DriverHandle,\r
+                  &mCallbackInfo->DriverHandle,\r
                   &gEfiDevicePathProtocolGuid,\r
                   &mHiiVendorDevicePath,\r
                   &gEfiHiiConfigAccessProtocolGuid,\r
-                  &CallbackInfo->ConfigAccess,\r
+                  &mCallbackInfo->ConfigAccess,\r
                   NULL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
@@ -1367,23 +1415,15 @@ PlatOverMngrInit (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (\r
-                  2,\r
-                  &mPlatformOverridesManagerGuid,\r
-                  VfrBin,\r
-                  PlatOverMngrStrings\r
-                  );\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = HiiDatabase->NewPackageList (\r
-                           HiiDatabase,\r
-                           PackageList,\r
-                           CallbackInfo->DriverHandle,\r
-                           &CallbackInfo->RegisteredHandle\r
-                           );\r
-  FreePool (PackageList);\r
-\r
-  if (EFI_ERROR (Status)) {\r
+  mCallbackInfo->RegisteredHandle = HiiAddPackages (\r
+                                     &mPlatformOverridesManagerGuid,\r
+                                     mCallbackInfo->DriverHandle,\r
+                                     VfrBin,\r
+                                     PlatOverMngrStrings,\r
+                                     NULL\r
+                                     );\r
+  if (mCallbackInfo->RegisteredHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
     goto Finish;\r
   }\r
 \r
@@ -1393,7 +1433,7 @@ PlatOverMngrInit (
   Status = gBS->LocateProtocol (\r
                   &gEfiHiiConfigRoutingProtocolGuid,\r
                   NULL,\r
-                  (VOID **) &CallbackInfo->HiiConfigRouting\r
+                  (VOID **) &mCallbackInfo->HiiConfigRouting\r
                   );\r
   if (EFI_ERROR (Status)) {\r
     goto Finish;\r
@@ -1414,37 +1454,31 @@ PlatOverMngrInit (
   //\r
   Status = FormBrowser2->SendForm (\r
                            FormBrowser2,\r
-                           &CallbackInfo->RegisteredHandle,\r
+                           &mCallbackInfo->RegisteredHandle,\r
                            1,\r
                            NULL,\r
                            0,\r
                            NULL,\r
                            NULL\r
                            );\r
-  if (EFI_ERROR (Status)) {\r
-    goto Finish;\r
-  }\r
 \r
-  Status = HiiDatabase->RemovePackageList (HiiDatabase, CallbackInfo->RegisteredHandle);\r
-  if (EFI_ERROR (Status)) {\r
-    goto Finish;\r
-  }\r
-  \r
-  return EFI_SUCCESS;\r
+  HiiRemovePackages (mCallbackInfo->RegisteredHandle);\r
+  Status = EFI_SUCCESS;\r
 \r
 Finish:\r
-  if (CallbackInfo->DriverHandle != NULL) {\r
+  if (mCallbackInfo->DriverHandle != NULL) {\r
     gBS->UninstallMultipleProtocolInterfaces (\r
-           CallbackInfo->DriverHandle,\r
+           mCallbackInfo->DriverHandle,\r
            &gEfiDevicePathProtocolGuid,\r
            &mHiiVendorDevicePath,\r
            &gEfiHiiConfigAccessProtocolGuid,\r
-           &CallbackInfo->ConfigAccess,\r
+           &mCallbackInfo->ConfigAccess,\r
            NULL\r
            );\r
   }\r
-  if (CallbackInfo != NULL) {\r
-    FreePool (CallbackInfo);\r
+\r
+  if (mCallbackInfo != NULL) {\r
+    FreePool (mCallbackInfo);\r
   }\r
 \r
   return Status;\r