]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Update for IntelFrameworkModulePkg.
authorydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 15 Dec 2011 02:56:46 +0000 (02:56 +0000)
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 15 Dec 2011 02:56:46 +0000 (02:56 +0000)
Per UEFI spec, on CallBack action EFI_BROWSER_ACTION_CHANGING, the return value of ActionRequest will be ignored, but on CallBack action EFI_BROWSER_ACTION_CHANGED, the return value of ActionRequest will be used.
But, EDKII browser still processes the got ActionRequest. And, all HII drivers in EDKII project also returns their expected ActionRequest value on action EFI_BROWSER_ACTION_CHANGING.
Now update the browser to follow the spec, and update all core Hii drivers to keep old working modal.

Signed-off-by: ydong10
Reviewed-by: lgao4
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12866 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/Bm.vfr
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/BootMaint.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FormGuid.h
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/Variable.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMngr/BootManager.c
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManagerVfr.h
IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c

index fd14a7714eb24f494c65b6bf666f1559e868227c..afbbfdddf94b32f37c76be66f2ce5672e359e361 100644 (file)
@@ -55,7 +55,7 @@ formset
 \r
     subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
 \r
 \r
     subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
 \r
-    goto FORM_CON_MAIN_ID,\r
+    goto FORM_BOOT_FROM_FILE_ID,\r
          prompt = STRING_TOKEN(STR_BOOT_FROM_FILE),\r
          help   = STRING_TOKEN(STR_BOOT_FROM_FILE_HELP),\r
          flags = INTERACTIVE,\r
          prompt = STRING_TOKEN(STR_BOOT_FROM_FILE),\r
          help   = STRING_TOKEN(STR_BOOT_FROM_FILE_HELP),\r
          flags = INTERACTIVE,\r
@@ -154,13 +154,6 @@ formset
             key = FORM_DRV_CHG_ID;\r
   endform;\r
 \r
             key = FORM_DRV_CHG_ID;\r
   endform;\r
 \r
-  form formid = FORM_BOOT_ADD_ID,\r
-       title = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE);\r
-\r
-       label FORM_BOOT_ADD_ID;\r
-       label LABEL_END;\r
-  endform;\r
-\r
   form formid = FORM_BOOT_DEL_ID,\r
        title = STRING_TOKEN(STR_FORM_BOOT_DEL_TITLE);\r
 \r
   form formid = FORM_BOOT_DEL_ID,\r
        title = STRING_TOKEN(STR_FORM_BOOT_DEL_TITLE);\r
 \r
@@ -298,13 +291,6 @@ formset
        label LABEL_END;\r
   endform;\r
 \r
        label LABEL_END;\r
   endform;\r
 \r
-  form formid = FORM_DRV_ADD_FILE_ID,\r
-       title = STRING_TOKEN(STR_FORM_DRV_ADD_FILE_TITLE);\r
-\r
-       label FORM_DRV_ADD_FILE_ID;\r
-       label LABEL_END;\r
-  endform;\r
-\r
   form formid = FORM_DRV_ADD_HANDLE_ID,\r
        title = STRING_TOKEN(STR_FORM_DRV_ADD_HANDLE_TITLE);\r
 \r
   form formid = FORM_DRV_ADD_HANDLE_ID,\r
        title = STRING_TOKEN(STR_FORM_DRV_ADD_HANDLE_TITLE);\r
 \r
index 4c8e3c8a4da07b530dd85b46ae97a59eb52dc376..d3215a3c866a5a892127bcb292b3614db27e3e4b 100644 (file)
@@ -286,31 +286,36 @@ BootMaintCallback (
   UINT8             *NewLegacyDev;\r
   UINT8             *DisMap;\r
   EFI_FORM_ID       FormId;\r
   UINT8             *NewLegacyDev;\r
   UINT8             *DisMap;\r
   EFI_FORM_ID       FormId;\r
-  Status = EFI_SUCCESS;\r
 \r
 \r
+  if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {    \r
+    //\r
+    // All other action return unsupported.\r
+    //\r
+    return EFI_UNSUPPORTED;\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 (&gBootMaintFormSetGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap);\r
   if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
   if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
-    if ((Value == NULL) || (ActionRequest == NULL)) {\r
+    if (Value == NULL) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
       return EFI_INVALID_PARAMETER;\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
+    \r
     UpdatePageId (Private, QuestionId);\r
 \r
     UpdatePageId (Private, QuestionId);\r
 \r
-    //\r
-    // Retrive uncommitted data from Form Browser\r
-    //\r
-    CurrentFakeNVMap = &Private->BmmFakeNvData;\r
-    HiiGetBrowserData (&gBootMaintFormSetGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap);\r
-\r
     //\r
     // need to be subtituded.\r
     //\r
     //\r
     // need to be subtituded.\r
     //\r
@@ -488,29 +493,14 @@ BootMaintCallback (
         switch (QuestionId) {\r
         case KEY_VALUE_BOOT_FROM_FILE:\r
           Private->FeCurrentState = FileExplorerStateBootFromFile;\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
           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
           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
           break;\r
 \r
         case FORM_DRV_ADD_HANDLE_ID:\r
@@ -543,10 +533,6 @@ BootMaintCallback (
           UpdateTimeOutPage (Private);\r
           break;\r
 \r
           UpdateTimeOutPage (Private);\r
           break;\r
 \r
-        case FORM_RESET:\r
-          gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
-          return EFI_UNSUPPORTED;\r
-\r
         case FORM_CON_IN_ID:\r
         case FORM_CON_OUT_ID:\r
         case FORM_CON_ERR_ID:\r
         case FORM_CON_IN_ID:\r
         case FORM_CON_OUT_ID:\r
         case FORM_CON_ERR_ID:\r
@@ -572,25 +558,6 @@ BootMaintCallback (
           UpdateSetLegacyDeviceOrderPage (QuestionId, Private);\r
           break;\r
 \r
           UpdateSetLegacyDeviceOrderPage (QuestionId, Private);\r
           break;\r
 \r
-        case KEY_VALUE_SAVE_AND_EXIT:\r
-        case KEY_VALUE_NO_SAVE_AND_EXIT:\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
-          }\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_FORM_APPLY;\r
-          break;\r
-\r
         default:\r
           break;\r
         }\r
         default:\r
           break;\r
         }\r
@@ -616,18 +583,44 @@ BootMaintCallback (
         UpdateDriverAddHandleDescPage (Private);\r
       }\r
     }\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
+      } else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT) {\r
+        DiscardChangeHandler (Private, CurrentFakeNVMap);\r
+      }\r
 \r
 \r
-    //\r
-    // Pass changed uncommitted data back to Form Browser\r
-    //\r
-    Status = HiiSetBrowserData (&gBootMaintFormSetGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap, NULL);\r
-    return Status;\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
+    case FORM_RESET:\r
+      gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
+      return EFI_UNSUPPORTED;\r
+\r
+    default:\r
+      break;\r
+    }\r
   }\r
 \r
   //\r
   }\r
 \r
   //\r
-  // All other action return unsupported.\r
+  // Pass changed uncommitted data back to Form Browser\r
   //\r
   //\r
-  return EFI_UNSUPPORTED;\r
+  HiiSetBrowserData (&gBootMaintFormSetGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap, NULL);\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
index b77e909ad538d7a4d92356ef5ee3d419d84fce82..733632b9f47fb184d3fd558bfb1b50052129c134 100644 (file)
@@ -253,21 +253,27 @@ FileExplorerCallback (
   FILE_EXPLORER_NV_DATA *NvRamMap;\r
   EFI_STATUS            Status;\r
 \r
   FILE_EXPLORER_NV_DATA *NvRamMap;\r
   EFI_STATUS            Status;\r
 \r
-  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
-    if ((Value == NULL) || (ActionRequest == NULL)) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-\r
-    Status         = EFI_SUCCESS;\r
-    Private        = FE_CALLBACK_DATA_FROM_THIS (This);\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
-\r
+  if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {\r
     //\r
     //\r
-    // Retrieve uncommitted data from Form Browser\r
+    // All other action return unsupported.\r
     //\r
     //\r
-    NvRamMap = &Private->FeFakeNvData;\r
-    HiiGetBrowserData (&gFileExploreFormSetGuid, mFileExplorerStorageName, sizeof (FILE_EXPLORER_NV_DATA), (UINT8 *) NvRamMap);\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+  \r
+  Status         = EFI_SUCCESS;\r
+  Private        = FE_CALLBACK_DATA_FROM_THIS (This);\r
 \r
 \r
+  //\r
+  // Retrieve uncommitted data from Form Browser\r
+  //\r
+  NvRamMap = &Private->FeFakeNvData;\r
+  HiiGetBrowserData (&gFileExploreFormSetGuid, mFileExplorerStorageName, sizeof (FILE_EXPLORER_NV_DATA), (UINT8 *) NvRamMap);\r
+\r
+  if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
+    if ((Value == NULL) || (ActionRequest == NULL)) {\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+    \r
     if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT || QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {\r
       //\r
       // Apply changes and exit formset\r
     if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT || QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {\r
       //\r
       // Apply changes and exit formset\r
@@ -309,16 +315,16 @@ FileExplorerCallback (
       // Exit File Explorer formset\r
       //\r
       *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
       // Exit File Explorer formset\r
       //\r
       *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-    } else {\r
-      if (UpdateFileExplorer (Private, QuestionId)) {\r
-        *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-      }\r
     }\r
     }\r
-\r
-    return Status;\r
+  } else if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+    if (Value == NULL) {\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+    \r
+    if (QuestionId >= FILE_OPTION_OFFSET) {\r
+      UpdateFileExplorer (Private, QuestionId);\r
+    }\r
   }\r
   }\r
-  //\r
-  // All other action return unsupported.\r
-  //\r
-  return EFI_UNSUPPORTED;\r
+\r
+  return Status;\r
 }\r
 }\r
index 1087db8472e8a1b87b7083bf8056e9a12b4ef84e..f0049a30433c1b165cf0764399c2f63ce0b7c635 100644 (file)
@@ -49,6 +49,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define FORM_BOOT_ADD_DESCRIPTION_ID         0x101F\r
 #define FORM_DRIVER_ADD_FILE_DESCRIPTION_ID  0x1020\r
 #define FORM_CON_MODE_ID                     0x1021\r
 #define FORM_BOOT_ADD_DESCRIPTION_ID         0x101F\r
 #define FORM_DRIVER_ADD_FILE_DESCRIPTION_ID  0x1020\r
 #define FORM_CON_MODE_ID                     0x1021\r
+#define FORM_BOOT_FROM_FILE_ID               0x1022\r
 \r
 #define MAXIMUM_FORM_ID                      0x10FF\r
 \r
 \r
 #define MAXIMUM_FORM_ID                      0x10FF\r
 \r
index f77b9f82edd305e4626bfb01cca6650c41a4801e..7d4f33d409601bae44f9041cafdf3552bfb8f2c0 100644 (file)
@@ -99,26 +99,26 @@ UpdatePageEnd (
       0\r
       );\r
 \r
       0\r
       );\r
 \r
-    HiiCreateGotoOpCode (\r
+    HiiCreateActionOpCode (\r
       mStartOpCodeHandle,\r
       mStartOpCodeHandle,\r
-      FORM_MAIN_ID,\r
+      KEY_VALUE_SAVE_AND_EXIT,\r
       STRING_TOKEN (STR_SAVE_AND_EXIT),\r
       STRING_TOKEN (STR_NULL_STRING),\r
       EFI_IFR_FLAG_CALLBACK,\r
       STRING_TOKEN (STR_SAVE_AND_EXIT),\r
       STRING_TOKEN (STR_NULL_STRING),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      KEY_VALUE_SAVE_AND_EXIT\r
+      0\r
       );\r
   }\r
 \r
   //\r
   // Ensure user can return to the main page.\r
   //\r
       );\r
   }\r
 \r
   //\r
   // Ensure user can return to the main page.\r
   //\r
-  HiiCreateGotoOpCode (\r
+  HiiCreateActionOpCode (\r
     mStartOpCodeHandle,\r
     mStartOpCodeHandle,\r
-    FORM_MAIN_ID,\r
+    KEY_VALUE_NO_SAVE_AND_EXIT,\r
     STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
     STRING_TOKEN (STR_NULL_STRING),\r
     EFI_IFR_FLAG_CALLBACK,\r
     STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
     STRING_TOKEN (STR_NULL_STRING),\r
     EFI_IFR_FLAG_CALLBACK,\r
-    KEY_VALUE_NO_SAVE_AND_EXIT\r
+    0\r
     );\r
 \r
   HiiUpdateForm (\r
     );\r
 \r
   HiiUpdateForm (\r
index ac7e61496f8d62b79357768ebc5712ce8a048c33..c4b83ba0ffa4476d6c2d17a09e9fdb2d45cd9a31 100644 (file)
@@ -673,14 +673,13 @@ Var_UpdateDriverOption (
                       &gEfiGlobalVariableGuid,\r
                       &DriverOrderListSize\r
                       );\r
                       &gEfiGlobalVariableGuid,\r
                       &DriverOrderListSize\r
                       );\r
-  ASSERT (DriverOrderList != NULL);\r
   NewDriverOrderList = AllocateZeroPool (DriverOrderListSize + sizeof (UINT16));\r
   ASSERT (NewDriverOrderList != NULL);\r
   NewDriverOrderList = AllocateZeroPool (DriverOrderListSize + sizeof (UINT16));\r
   ASSERT (NewDriverOrderList != NULL);\r
-  CopyMem (NewDriverOrderList, DriverOrderList, DriverOrderListSize);\r
-  NewDriverOrderList[DriverOrderListSize / sizeof (UINT16)] = Index;\r
   if (DriverOrderList != NULL) {\r
   if (DriverOrderList != NULL) {\r
+    CopyMem (NewDriverOrderList, DriverOrderList, DriverOrderListSize);\r
     EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);\r
   }\r
     EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);\r
   }\r
+  NewDriverOrderList[DriverOrderListSize / sizeof (UINT16)] = Index;\r
 \r
   Status = gRT->SetVariable (\r
                   L"DriverOrder",\r
 \r
   Status = gRT->SetVariable (\r
                   L"DriverOrder",\r
index 0a7561b18731ac5a1effe93176f7392c80f4540c..f86d55594b90437f63cd85304fb03aea9f776c27 100644 (file)
@@ -95,7 +95,7 @@ BootManagerCallback (
   LIST_ENTRY              *Link;\r
   UINT16                  KeyCount;\r
 \r
   LIST_ENTRY              *Link;\r
   UINT16                  KeyCount;\r
 \r
-  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+  if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
     if ((Value == NULL) || (ActionRequest == NULL)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
     if ((Value == NULL) || (ActionRequest == NULL)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
index d0bf764667cb134c3d2ee1136f45674d6471f760..6cb9d6b7ab07de5da771e4f26c430822a03a860e 100644 (file)
@@ -133,35 +133,30 @@ DeviceManagerCallback (
 {\r
   UINTN CurIndex;\r
 \r
 {\r
   UINTN CurIndex;\r
 \r
-  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
-    if ((Value == NULL) || (ActionRequest == NULL)) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-\r
-    gCallbackKey = QuestionId;\r
-    if ((QuestionId < MAX_KEY_SECTION_LEN + NETWORK_DEVICE_LIST_KEY_OFFSET) && (QuestionId >= NETWORK_DEVICE_LIST_KEY_OFFSET)) {\r
-      //\r
-      // If user select the mac address, need to record mac address string to support next form show.\r
-      //\r
-      for (CurIndex = 0; CurIndex < mMacDeviceList.CurListLen; CurIndex ++) {\r
-        if (mMacDeviceList.NodeList[CurIndex].QuestionId == QuestionId) {\r
-           mSelectedMacAddrString = HiiGetString (gDeviceManagerPrivate.HiiHandle, mMacDeviceList.NodeList[CurIndex].PromptId, NULL);\r
-        }\r
-      }\r
-    }\r
-  \r
+  if (Action != EFI_BROWSER_ACTION_CHANGING) {\r
     //\r
     //\r
-    // Request to exit SendForm(), so as to switch to selected form\r
+    // All other action return unsupported.\r
     //\r
     //\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+    return EFI_UNSUPPORTED;\r
+  }\r
 \r
 \r
-    return EFI_SUCCESS;\r
+  if (Value == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   }\r
 \r
-  //\r
-  // All other action return unsupported.\r
-  //\r
-  return EFI_UNSUPPORTED;\r
+  gCallbackKey = QuestionId;\r
+  if ((QuestionId < MAX_KEY_SECTION_LEN + NETWORK_DEVICE_LIST_KEY_OFFSET) && (QuestionId >= NETWORK_DEVICE_LIST_KEY_OFFSET)) {\r
+    //\r
+    // If user select the mac address, need to record mac address string to support next form show.\r
+    //\r
+    for (CurIndex = 0; CurIndex < mMacDeviceList.CurListLen; CurIndex ++) {\r
+      if (mMacDeviceList.NodeList[CurIndex].QuestionId == QuestionId) {\r
+         mSelectedMacAddrString = HiiGetString (gDeviceManagerPrivate.HiiHandle, mMacDeviceList.NodeList[CurIndex].PromptId, NULL);\r
+      }\r
+    }\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
@@ -873,7 +868,7 @@ CallDeviceManager (
           AddNetworkMenu = TRUE;\r
           HiiCreateGotoOpCode (\r
             StartOpCodeHandle,\r
           AddNetworkMenu = TRUE;\r
           HiiCreateGotoOpCode (\r
             StartOpCodeHandle,\r
-            DEVICE_MANAGER_FORM_ID,\r
+            INVALID_FORM_ID,\r
             STRING_TOKEN (STR_FORM_NETWORK_DEVICE_LIST_TITLE),\r
             STRING_TOKEN (STR_FORM_NETWORK_DEVICE_LIST_HELP),\r
             EFI_IFR_FLAG_CALLBACK,\r
             STRING_TOKEN (STR_FORM_NETWORK_DEVICE_LIST_TITLE),\r
             STRING_TOKEN (STR_FORM_NETWORK_DEVICE_LIST_HELP),\r
             EFI_IFR_FLAG_CALLBACK,\r
@@ -887,7 +882,7 @@ CallDeviceManager (
         while (AddItemCount > 0) {\r
             HiiCreateGotoOpCode (\r
               StartOpCodeHandle,\r
         while (AddItemCount > 0) {\r
             HiiCreateGotoOpCode (\r
               StartOpCodeHandle,\r
-              NETWORK_DEVICE_LIST_FORM_ID,\r
+              INVALID_FORM_ID,\r
               mMacDeviceList.NodeList[mMacDeviceList.CurListLen - AddItemCount].PromptId,\r
               STRING_TOKEN (STR_NETWORK_DEVICE_HELP),\r
               EFI_IFR_FLAG_CALLBACK,\r
               mMacDeviceList.NodeList[mMacDeviceList.CurListLen - AddItemCount].PromptId,\r
               STRING_TOKEN (STR_NETWORK_DEVICE_HELP),\r
               EFI_IFR_FLAG_CALLBACK,\r
@@ -901,7 +896,7 @@ CallDeviceManager (
         //\r
         HiiCreateGotoOpCode (\r
           StartOpCodeHandle,\r
         //\r
         HiiCreateGotoOpCode (\r
           StartOpCodeHandle,\r
-          NETWORK_DEVICE_FORM_ID,\r
+          INVALID_FORM_ID,\r
           Token,\r
           TokenHelp,\r
           EFI_IFR_FLAG_CALLBACK,\r
           Token,\r
           TokenHelp,\r
           EFI_IFR_FLAG_CALLBACK,\r
@@ -916,7 +911,7 @@ CallDeviceManager (
       if (mNextShowFormId == DEVICE_MANAGER_FORM_ID) {\r
         HiiCreateGotoOpCode (\r
           StartOpCodeHandle,\r
       if (mNextShowFormId == DEVICE_MANAGER_FORM_ID) {\r
         HiiCreateGotoOpCode (\r
           StartOpCodeHandle,\r
-          DEVICE_MANAGER_FORM_ID,\r
+          INVALID_FORM_ID,\r
           Token,\r
           TokenHelp,\r
           EFI_IFR_FLAG_CALLBACK,\r
           Token,\r
           TokenHelp,\r
           EFI_IFR_FLAG_CALLBACK,\r
@@ -1097,7 +1092,7 @@ DriverHealthCallback (
   OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest\r
   )\r
 {\r
   OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest\r
   )\r
 {\r
-  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+  if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
     if ((Value == NULL) || (ActionRequest == NULL)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
     if ((Value == NULL) || (ActionRequest == NULL)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
index 96e2c0a2cfdb383e80f42a7b3644f44f595df99e..b6b086600fda39dc6f8cc23d6ff35d860197bb7f 100644 (file)
@@ -31,6 +31,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #define LABEL_VBIOS                          0x0040\r
 \r
 \r
 #define LABEL_VBIOS                          0x0040\r
 \r
+#define INVALID_FORM_ID                      0x0FFF\r
 #define DEVICE_MANAGER_FORM_ID               0x1000\r
 #define NETWORK_DEVICE_LIST_FORM_ID          0x1001\r
 #define NETWORK_DEVICE_FORM_ID               0x1002\r
 #define DEVICE_MANAGER_FORM_ID               0x1000\r
 #define NETWORK_DEVICE_LIST_FORM_ID          0x1001\r
 #define NETWORK_DEVICE_FORM_ID               0x1002\r
index 8a8286a704475425ee7c932c5c8dbf3194c46dfd..efecf7bec6018828e765cccb55f49fa0a7152806 100644 (file)
@@ -175,23 +175,26 @@ FrontPageCallback (
   CHAR8                         *PlatformSupportedLanguages;\r
   CHAR8                         *BestLanguage;\r
 \r
   CHAR8                         *PlatformSupportedLanguages;\r
   CHAR8                         *BestLanguage;\r
 \r
-  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+  if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {\r
+    //\r
+    // All other action return unsupported.\r
+    //\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+  \r
+  gCallbackKey = QuestionId;\r
+\r
+  if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
     if ((Value == NULL) || (ActionRequest == NULL)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
     if ((Value == NULL) || (ActionRequest == NULL)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
-    gCallbackKey = QuestionId;\r
-\r
-    //\r
-    // The first 4 entries in the Front Page are to be GUARANTEED to remain constant so IHV's can\r
-    // describe to their customers in documentation how to find their setup information (namely\r
-    // under the device manager and specific buckets)\r
-    //\r
     switch (QuestionId) {\r
     case FRONT_PAGE_KEY_CONTINUE:\r
       //\r
       // This is the continue - clear the screen and return an error to get out of FrontPage loop\r
       //\r
     switch (QuestionId) {\r
     case FRONT_PAGE_KEY_CONTINUE:\r
       //\r
       // This is the continue - clear the screen and return an error to get out of FrontPage loop\r
       //\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
       break;\r
 \r
     case FRONT_PAGE_KEY_LANGUAGE:\r
       break;\r
 \r
     case FRONT_PAGE_KEY_LANGUAGE:\r
@@ -250,11 +253,27 @@ FrontPageCallback (
         ASSERT (FALSE);\r
       }\r
 \r
         ASSERT (FALSE);\r
       }\r
 \r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+\r
       FreePool (PlatformSupportedLanguages);\r
       FreePool (Lang);\r
       FreePool (LanguageString);\r
       break;\r
 \r
       FreePool (PlatformSupportedLanguages);\r
       FreePool (Lang);\r
       FreePool (LanguageString);\r
       break;\r
 \r
+    default:\r
+      break;\r
+    }\r
+  } else if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+    if (Value == NULL) {\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+\r
+    //\r
+    // The first 4 entries in the Front Page are to be GUARANTEED to remain constant so IHV's can\r
+    // describe to their customers in documentation how to find their setup information (namely\r
+    // under the device manager and specific buckets)\r
+    //\r
+    switch (QuestionId) {\r
     case FRONT_PAGE_KEY_BOOT_MANAGER:\r
       //\r
       // Boot Manager\r
     case FRONT_PAGE_KEY_BOOT_MANAGER:\r
       //\r
       // Boot Manager\r
@@ -277,16 +296,9 @@ FrontPageCallback (
       gCallbackKey = 0;\r
       break;\r
     }\r
       gCallbackKey = 0;\r
       break;\r
     }\r
-\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-\r
-    return EFI_SUCCESS;\r
   }\r
 \r
   }\r
 \r
-  //\r
-  // All other action return unsupported.\r
-  //\r
-  return EFI_UNSUPPORTED;\r
+  return EFI_SUCCESS;  \r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
@@ -1181,6 +1193,7 @@ PlatformBdsEnterFrontPage (
     BootLogo->SetBootLogo (BootLogo, NULL, 0, 0, 0, 0);\r
   }\r
 \r
     BootLogo->SetBootLogo (BootLogo, NULL, 0, 0, 0, 0);\r
   }\r
 \r
+  Status = EFI_SUCCESS;\r
   do {\r
     //\r
     // Set proper video resolution and text mode for setup\r
   do {\r
     //\r
     // Set proper video resolution and text mode for setup\r
@@ -1195,7 +1208,7 @@ PlatformBdsEnterFrontPage (
     UpdateFrontPageStrings ();\r
 \r
     gCallbackKey = 0;\r
     UpdateFrontPageStrings ();\r
 \r
     gCallbackKey = 0;\r
-    Status = CallFrontPage ();\r
+    CallFrontPage ();\r
 \r
     //\r
     // If gCallbackKey is greater than 1 and less or equal to 5,\r
 \r
     //\r
     // If gCallbackKey is greater than 1 and less or equal to 5,\r