]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Application/PlatOverMngr/PlatOverMngr.c
Update UefiHiiLib to support new defined IFR related HII APIs.
[mirror_edk2.git] / MdeModulePkg / Application / PlatOverMngr / PlatOverMngr.c
index d9a530296e8a80b4143b5328c5d8cd148d6b509c..64a26c66657529c73c69011a5cb8f7e9094b7499 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
-  // Clear all the content in the first 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_DEVICE;\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 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
@@ -499,30 +516,31 @@ UpdateDeviceSelectPage (
     // 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 +631,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 +643,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 +662,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
-  // Clear all the content in dynamic page\r
+  // Init OpCode Handle\r
   //\r
-  UpdateData.BufferSize = UPDATE_DATA_SIZE;\r
-  UpdateData.Offset = 0;\r
-  UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
-  ASSERT (UpdateData.Data != NULL);\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_DRIVER;\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 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
@@ -816,7 +853,8 @@ UpdateBindingDriverSelectPage (
     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 +862,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 +900,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 +920,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 +968,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 +1016,7 @@ UpdatePrioritySelectPage (
         mLastSavedDriverImageNum++;\r
       }\r
       TempNO[SelectedDriverImageNum] = DriverImageNO;\r
+      OrderNO[SelectedDriverImageNum] = Index + 1;\r
       SelectedDriverImageNum ++;\r
     }\r
   }\r
@@ -978,11 +1044,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 +1062,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 +1172,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 +1218,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 +1243,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 +1286,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
@@ -1285,8 +1351,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
@@ -1312,7 +1385,6 @@ PlatOverMngrInit (
   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
@@ -1339,25 +1411,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
@@ -1378,8 +1450,8 @@ PlatOverMngrInit (
   Status = HiiDatabase->NewPackageList (\r
                            HiiDatabase,\r
                            PackageList,\r
-                           CallbackInfo->DriverHandle,\r
-                           &CallbackInfo->RegisteredHandle\r
+                           mCallbackInfo->DriverHandle,\r
+                           &mCallbackInfo->RegisteredHandle\r
                            );\r
   FreePool (PackageList);\r
 \r
@@ -1393,7 +1465,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 +1486,34 @@ 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
+  HiiDatabase->RemovePackageList (HiiDatabase, mCallbackInfo->RegisteredHandle);\r
+\r
   if (EFI_ERROR (Status)) {\r
     goto Finish;\r
   }\r
-  \r
-  return 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