]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/BootMaint.c
Update for IntelFrameworkModulePkg.
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / BootMaint / BootMaint.c
index 6e15e096a68fd33d2635f30f69f68f7c6eda9750..d3215a3c866a5a892127bcb292b3614db27e3e4b 100644 (file)
@@ -38,10 +38,7 @@ HII_VENDOR_DEVICE_PATH  mBmmHiiVendorDevicePath = {
         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
       }\r
     },\r
-    //\r
-    // {165A028F-0BB2-4b5f-8747-77592E3F6499}\r
-    //\r
-    { 0x165a028f, 0xbb2, 0x4b5f, { 0x87, 0x47, 0x77, 0x59, 0x2e, 0x3f, 0x64, 0x99 } }\r
+    BOOT_MAINT_FORMSET_GUID\r
   },\r
   {\r
     END_DEVICE_PATH_TYPE,\r
@@ -63,10 +60,7 @@ HII_VENDOR_DEVICE_PATH  mFeHiiVendorDevicePath = {
         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
       }\r
     },\r
-    //\r
-    // {91DB4238-B0C8-472e-BBCF-F3A6541010F4}\r
-    //\r
-    { 0x91db4238, 0xb0c8, 0x472e, { 0xbb, 0xcf, 0xf3, 0xa6, 0x54, 0x10, 0x10, 0xf4 } }\r
+    FILE_EXPLORE_FORMSET_GUID\r
   },\r
   {\r
     END_DEVICE_PATH_TYPE,\r
@@ -78,10 +72,6 @@ HII_VENDOR_DEVICE_PATH  mFeHiiVendorDevicePath = {
   }\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
-\r
 CHAR16  mBootMaintStorageName[]     = L"BmmData";\r
 CHAR16  mFileExplorerStorageName[]  = L"FeData";\r
 \r
@@ -194,7 +184,7 @@ BootMaintExtractConfig (
   }\r
 \r
   *Progress = Request;\r
-  if ((Request != NULL) && !HiiIsConfigHdrMatch (Request, &mBootMaintGuid, mBootMaintStorageName)) {\r
+  if ((Request != NULL) && !HiiIsConfigHdrMatch (Request, &gBootMaintFormSetGuid, mBootMaintStorageName)) {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
@@ -215,7 +205,7 @@ BootMaintExtractConfig (
     // Allocate and fill a buffer large enough to hold the <ConfigHdr> template\r
     // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator\r
     //\r
-    ConfigRequestHdr = HiiConstructConfigHdr (&mBootMaintGuid, mBootMaintStorageName, Private->BmmDriverHandle);\r
+    ConfigRequestHdr = HiiConstructConfigHdr (&gBootMaintFormSetGuid, mBootMaintStorageName, Private->BmmDriverHandle);\r
     Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
     ConfigRequest = AllocateZeroPool (Size);\r
     ASSERT (ConfigRequest != NULL);\r
@@ -296,348 +286,341 @@ BootMaintCallback (
   UINT8             *NewLegacyDev;\r
   UINT8             *DisMap;\r
   EFI_FORM_ID       FormId;\r
-  \r
-  if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)) {\r
+\r
+  if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {    \r
     //\r
-    // Do nothing for UEFI OPEN/CLOSE Action\r
+    // All other action return unsupported.\r
     //\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  if ((Value == NULL) || (ActionRequest == NULL)) {\r
-    return EFI_INVALID_PARAMETER;\r
+    return EFI_UNSUPPORTED;\r
   }\r
-\r
-  OldValue       = 0;\r
-  NewValue       = 0;\r
-  Number         = 0;\r
-  OldLegacyDev   = NULL;\r
-  NewLegacyDev   = NULL;\r
-  NewValuePos    = 0;\r
-  DisMap         = NULL;\r
-  *ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
-\r
-  Private        = BMM_CALLBACK_DATA_FROM_THIS (This);\r
-  UpdatePageId (Private, QuestionId);\r
-\r
+  \r
+  Status       = EFI_SUCCESS;\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
   //\r
   // Retrive uncommitted data from Form Browser\r
   //\r
   CurrentFakeNVMap = &Private->BmmFakeNvData;\r
-  HiiGetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap);\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
-      (QuestionId >= LEGACY_FD_QUESTION_ID) &&\r
-       (QuestionId < (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
+  HiiGetBrowserData (&gBootMaintFormSetGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap);\r
+  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+    if (Value == NULL) {\r
+      return EFI_INVALID_PARAMETER;\r
     }\r
+    \r
+    UpdatePageId (Private, QuestionId);\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
+    // 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
+        (QuestionId >= LEGACY_FD_QUESTION_ID) &&\r
+         (QuestionId < (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
-    case FORM_SET_HD_ORDER_ID:\r
-      Number        = (UINT16) LegacyHDMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyHD;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyHD;\r
-      break;\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_CD_ORDER_ID:\r
-      Number        = (UINT16) LegacyCDMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyCD;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyCD;\r
-      break;\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_NET_ORDER_ID:\r
-      Number        = (UINT16) LegacyNETMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyNET;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyNET;\r
-      break;\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_BEV_ORDER_ID:\r
-      Number        = (UINT16) LegacyBEVMenu.MenuNumber;\r
-      OldLegacyDev  = Private->BmmOldFakeNVData.LegacyBEV;\r
-      NewLegacyDev  = CurrentFakeNVMap->LegacyBEV;\r
-      break;\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
-    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
+      case FORM_SET_BEV_ORDER_ID:\r
+        Number        = (UINT16) LegacyBEVMenu.MenuNumber;\r
+        OldLegacyDev  = Private->BmmOldFakeNVData.LegacyBEV;\r
+        NewLegacyDev  = CurrentFakeNVMap->LegacyBEV;\r
         break;\r
-      }\r
-    }\r
 \r
-    if (Index != Number) {\r
+      default:\r
+        break;\r
+      }\r
       //\r
-      // there is change, now process\r
+      //  First, find the different position\r
+      //  if there is change, it should be only one\r
       //\r
-      if (0xFF == NewValue) {\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
-        // This item will be disable\r
-        // Just move the items behind this forward to overlap it\r
+        // there is change, now process\r
         //\r
-        Pos = OldValue / 8;\r
-        Bit = 7 - (OldValue % 8);\r
-        DisMap[Pos] = (UINT8) (DisMap[Pos] | (UINT8) (1 << Bit));\r
-        for (Index2 = Index; Index2 < Number - 1; Index2++) {\r
-          NewLegacyDev[Index2] = NewLegacyDev[Index2 + 1];\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) (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
+          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 (OldLegacyDev[Index2] == NewValue) {\r
+          if (Index2 != Number) {\r
             //\r
-            // If NewValue is in OldLegacyDev array\r
-            // remember its old position\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
-            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
+            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
-          }\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) (DisMap[Pos] & (~ (UINT8) (1 << Bit)));\r
-          if (0xFF != OldValue) {\r
+          } else {\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
+            // 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 = OldValue / 8;\r
-            Bit = 7 - (OldValue % 8);\r
-            DisMap[Pos] = (UINT8) (DisMap[Pos] | (UINT8) (1 << Bit));\r
+            Pos = NewValue / 8;\r
+            Bit = 7 - (NewValue % 8);\r
+            DisMap[Pos] = (UINT8) (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) (DisMap[Pos] | (UINT8) (1 << Bit));\r
+            }\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
+        // 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
-        }\r
+          while (Index2 < Number) {\r
+            if (0xFF != NewLegacyDev[Index2]) {\r
+              break;\r
+            }\r
 \r
-        if (Index2 < Number) {\r
-          NewLegacyDev[Index]   = NewLegacyDev[Index2];\r
-          NewLegacyDev[Index2]  = 0xFF;\r
+            Index2++;\r
+          }\r
+\r
+          if (Index2 < Number) {\r
+            NewLegacyDev[Index]   = NewLegacyDev[Index2];\r
+            NewLegacyDev[Index2]  = 0xFF;\r
+          }\r
+\r
+          Index++;\r
         }\r
 \r
-        Index++;\r
+        CopyMem (\r
+          OldLegacyDev,\r
+          NewLegacyDev,\r
+          Number\r
+          );\r
       }\r
-\r
-      CopyMem (\r
-        OldLegacyDev,\r
-        NewLegacyDev,\r
-        Number\r
-        );\r
     }\r
-  }\r
-\r
-  if (QuestionId < FILE_OPTION_OFFSET) {\r
-    if (QuestionId < CONFIG_OPTION_OFFSET) {\r
-      switch (QuestionId) {\r
-      case KEY_VALUE_BOOT_FROM_FILE:\r
-        Private->FeCurrentState = FileExplorerStateBootFromFile;\r
-\r
-        //\r
-        // Exit Bmm main formset to send File Explorer formset.\r
-        //\r
-        *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-        break;\r
-\r
-      case FORM_BOOT_ADD_ID:\r
-        Private->FeCurrentState = FileExplorerStateAddBootOption;\r
-\r
-        //\r
-        // Exit Bmm main formset to send File Explorer formset.\r
-        //\r
-        *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-        break;\r
-\r
-      case FORM_DRV_ADD_FILE_ID:\r
-        Private->FeCurrentState = FileExplorerStateAddDriverOptionState;\r
-\r
-        //\r
-        // Exit Bmm main formset to send File Explorer formset.\r
-        //\r
-        *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\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 (QuestionId, 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
+    if (QuestionId < FILE_OPTION_OFFSET) {\r
+      if (QuestionId < CONFIG_OPTION_OFFSET) {\r
+        switch (QuestionId) {\r
+        case KEY_VALUE_BOOT_FROM_FILE:\r
+          Private->FeCurrentState = FileExplorerStateBootFromFile;\r
+          break;\r
+\r
+        case FORM_BOOT_ADD_ID:\r
+          Private->FeCurrentState = FileExplorerStateAddBootOption;\r
+          break;\r
+\r
+        case FORM_DRV_ADD_FILE_ID:\r
+          Private->FeCurrentState = FileExplorerStateAddDriverOptionState;\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 (QuestionId, 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_CON_IN_ID:\r
+        case FORM_CON_OUT_ID:\r
+        case FORM_CON_ERR_ID:\r
+          UpdatePageBody (QuestionId, Private);\r
+          break;\r
+\r
+        case FORM_CON_MODE_ID:\r
+          CleanUpPage (FORM_CON_MODE_ID, Private);\r
+          UpdateConModePage (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 (QuestionId, Private);\r
+          UpdateSetLegacyDeviceOrderPage (QuestionId, Private);\r
+          break;\r
+\r
+        default:\r
+          break;\r
+        }\r
+      } else if ((QuestionId >= TERMINAL_OPTION_OFFSET) && (QuestionId < CONSOLE_OPTION_OFFSET)) {\r
+        Index2                    = (UINT16) (QuestionId - TERMINAL_OPTION_OFFSET);\r
+        Private->CurrentTerminal  = Index2;\r
 \r
-      case FORM_TIME_OUT_ID:\r
-        CleanUpPage (FORM_TIME_OUT_ID, Private);\r
-        UpdateTimeOutPage (Private);\r
-        break;\r
+        CleanUpPage (FORM_CON_COM_SETUP_ID, Private);\r
+        UpdateTerminalPage (Private);\r
 \r
-      case FORM_RESET:\r
-        gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
-        return EFI_UNSUPPORTED;\r
+      } else if (QuestionId >= HANDLE_OPTION_OFFSET) {\r
+        Index2                  = (UINT16) (QuestionId - HANDLE_OPTION_OFFSET);\r
 \r
-      case FORM_CON_IN_ID:\r
-      case FORM_CON_OUT_ID:\r
-      case FORM_CON_ERR_ID:\r
-        UpdatePageBody (QuestionId, Private);\r
-        break;\r
+        NewMenuEntry            = BOpt_GetMenuEntry (&DriverMenu, Index2);\r
+        ASSERT (NewMenuEntry != NULL);\r
+        Private->HandleContext  = (BM_HANDLE_CONTEXT *) NewMenuEntry->VariableContext;\r
 \r
-      case FORM_CON_MODE_ID:\r
-        CleanUpPage (FORM_CON_MODE_ID, Private);\r
-        UpdateConModePage (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 (QuestionId, Private);\r
-        UpdateSetLegacyDeviceOrderPage (QuestionId, Private);\r
-        break;\r
+        CleanUpPage (FORM_DRV_ADD_HANDLE_DESC_ID, Private);\r
 \r
-      case KEY_VALUE_SAVE_AND_EXIT:\r
-      case KEY_VALUE_NO_SAVE_AND_EXIT:\r
+        Private->MenuEntry                  = NewMenuEntry;\r
+        Private->LoadContext->FilePathList  = Private->HandleContext->DevicePath;\r
 \r
-        if (QuestionId == KEY_VALUE_SAVE_AND_EXIT) {\r
-          Status = ApplyChangeHandler (Private, CurrentFakeNVMap, Private->BmmPreviousPageId);\r
-          if (EFI_ERROR (Status)) {\r
-            return Status;\r
-          }\r
-        } else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT) {\r
-          DiscardChangeHandler (Private, CurrentFakeNVMap);\r
+        UpdateDriverAddHandleDescPage (Private);\r
+      }\r
+    }\r
+  } else if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
+    if ((Value == NULL) || (ActionRequest == NULL)) {\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+    \r
+    switch (QuestionId) {\r
+    case KEY_VALUE_SAVE_AND_EXIT:\r
+    case KEY_VALUE_NO_SAVE_AND_EXIT:\r
+      if (QuestionId == KEY_VALUE_SAVE_AND_EXIT) {\r
+        Status = ApplyChangeHandler (Private, CurrentFakeNVMap, Private->BmmPreviousPageId);\r
+        if (EFI_ERROR (Status)) {\r
+          return Status;\r
         }\r
-\r
-        //\r
-        // Tell browser not to ask for confirmation of changes,\r
-        // since we have already applied or discarded.\r
-        //\r
-        *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
-        break;\r
-\r
-      default:\r
-        break;\r
+      } else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT) {\r
+        DiscardChangeHandler (Private, CurrentFakeNVMap);\r
       }\r
-    } else if ((QuestionId >= TERMINAL_OPTION_OFFSET) && (QuestionId < CONSOLE_OPTION_OFFSET)) {\r
-      Index2                    = (UINT16) (QuestionId - TERMINAL_OPTION_OFFSET);\r
-      Private->CurrentTerminal  = Index2;\r
-\r
-      CleanUpPage (FORM_CON_COM_SETUP_ID, Private);\r
-      UpdateTerminalPage (Private);\r
 \r
-    } else if (QuestionId >= HANDLE_OPTION_OFFSET) {\r
-      Index2                  = (UINT16) (QuestionId - 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
+      // Tell browser not to ask for confirmation of changes,\r
+      // since we have already applied or discarded.\r
+      //\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;\r
+      break;  \r
 \r
-      Private->MenuEntry                  = NewMenuEntry;\r
-      Private->LoadContext->FilePathList  = Private->HandleContext->DevicePath;\r
+    case FORM_RESET:\r
+      gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
+      return EFI_UNSUPPORTED;\r
 \r
-      UpdateDriverAddHandleDescPage (Private);\r
+    default:\r
+      break;\r
     }\r
   }\r
 \r
   //\r
   // Pass changed uncommitted data back to Form Browser\r
   //\r
-  Status = HiiSetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap, NULL);\r
-\r
-  return Status;\r
+  HiiSetBrowserData (&gBootMaintFormSetGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap, NULL);\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
@@ -742,9 +725,10 @@ ApplyChangeHandler (
     ASSERT (CurrentFakeNVMap->COMParity < (sizeof (ParityList) / sizeof (ParityList[0])));\r
     NewTerminalContext->Parity        = (UINT8) ParityList[CurrentFakeNVMap->COMParity].Value;\r
     NewTerminalContext->TerminalType  = CurrentFakeNVMap->COMTerminalType;\r
+    NewTerminalContext->FlowControl   = CurrentFakeNVMap->COMFlowControl;\r
 \r
     ChangeTerminalDevicePath (\r
-      NewTerminalContext->DevicePath,\r
+      &(NewTerminalContext->DevicePath),\r
       FALSE\r
       );\r
 \r
@@ -984,7 +968,7 @@ InitializeBM (
   // Post our Boot Maint VFR binary to the HII database.\r
   //\r
   BmmCallbackInfo->BmmHiiHandle = HiiAddPackages (\r
-                                    &mBootMaintGuid,\r
+                                    &gBootMaintFormSetGuid,\r
                                     BmmCallbackInfo->BmmDriverHandle,\r
                                     BmBin,\r
                                     BdsDxeStrings,\r
@@ -996,7 +980,7 @@ InitializeBM (
   // Post our File Explorer VFR binary to the HII database.\r
   //\r
   BmmCallbackInfo->FeHiiHandle = HiiAddPackages (\r
-                                   &mFileExplorerGuid,\r
+                                   &gFileExploreFormSetGuid,\r
                                    BmmCallbackInfo->FeDriverHandle,\r
                                    FEBin,\r
                                    BdsDxeStrings,\r
@@ -1108,7 +1092,7 @@ InitializeBM (
     \r
     HiiUpdateForm (\r
       BmmCallbackInfo->BmmHiiHandle,\r
-      &mBootMaintGuid,\r
+      &gBootMaintFormSetGuid,\r
       FORM_BOOT_SETUP_ID,\r
       mStartOpCodeHandle, // Label FORM_BOOT_LEGACY_DEVICE_ID\r
       mEndOpCodeHandle    // LABEL_END\r
@@ -1398,7 +1382,7 @@ FormSetDispatcher (
                              gFormBrowser2,\r
                              &CallbackData->BmmHiiHandle,\r
                              1,\r
-                             &mBootMaintGuid,\r
+                             &gBootMaintFormSetGuid,\r
                              0,\r
                              NULL,\r
                              &ActionRequest\r
@@ -1420,7 +1404,7 @@ FormSetDispatcher (
                                gFormBrowser2,\r
                                &CallbackData->FeHiiHandle,\r
                                1,\r
-                               &mFileExplorerGuid,\r
+                               &gFileExploreFormSetGuid,\r
                                0,\r
                                NULL,\r
                                &ActionRequest\r