In BootMaintRouteConfig function, it will compare the data in BmmFakeNvData
and BmmOldFakeNVData to see whether there are some changes need to save.
In current codes when discarding changes or removing the useless changes,
it will update the related fields in BmmFakeNvData.
But also need to update related fields in BmmOldFakeNVData,
or it will result in incorrect comparison in BootMaintRouteConfig function,
then resulting in incorrect UI behaviors.
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
BMM_CALLBACK_DATA *Private;\r
BM_MENU_ENTRY *NewMenuEntry;\r
BMM_FAKE_NV_DATA *CurrentFakeNVMap;\r
BMM_CALLBACK_DATA *Private;\r
BM_MENU_ENTRY *NewMenuEntry;\r
BMM_FAKE_NV_DATA *CurrentFakeNVMap;\r
+ BMM_FAKE_NV_DATA *OldFakeNVMap;\r
UINTN Index;\r
EFI_DEVICE_PATH_PROTOCOL * File;\r
\r
UINTN Index;\r
EFI_DEVICE_PATH_PROTOCOL * File;\r
\r
// Retrive uncommitted data from Form Browser\r
//\r
CurrentFakeNVMap = &Private->BmmFakeNvData;\r
// Retrive uncommitted data from Form Browser\r
//\r
CurrentFakeNVMap = &Private->BmmFakeNvData;\r
+ OldFakeNVMap = &Private->BmmOldFakeNVData;\r
HiiGetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap);\r
\r
if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
HiiGetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap);\r
\r
if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
//\r
// Discard changes and exit formset\r
//\r
//\r
// Discard changes and exit formset\r
//\r
- CurrentFakeNVMap->DriverOptionalData[0] = 0x0000;\r
- CurrentFakeNVMap->DriverDescriptionData[0] = 0x0000;\r
+ ZeroMem (CurrentFakeNVMap->DriverOptionalData, sizeof (CurrentFakeNVMap->DriverOptionalData));\r
+ ZeroMem (CurrentFakeNVMap->BootDescriptionData, sizeof (CurrentFakeNVMap->BootDescriptionData));\r
+ ZeroMem (OldFakeNVMap->DriverOptionalData, sizeof (OldFakeNVMap->DriverOptionalData));\r
+ ZeroMem (OldFakeNVMap->DriverDescriptionData, sizeof (OldFakeNVMap->DriverDescriptionData));\r
CurrentFakeNVMap->DriverOptionChanged = FALSE;\r
CurrentFakeNVMap->ForceReconnect = TRUE;\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
CurrentFakeNVMap->DriverOptionChanged = FALSE;\r
CurrentFakeNVMap->ForceReconnect = TRUE;\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
//\r
// Discard changes and exit formset\r
//\r
//\r
// Discard changes and exit formset\r
//\r
- CurrentFakeNVMap->BootOptionalData[0] = 0x0000;\r
- CurrentFakeNVMap->BootDescriptionData[0] = 0x0000;\r
+ ZeroMem (CurrentFakeNVMap->BootOptionalData, sizeof (CurrentFakeNVMap->BootOptionalData));\r
+ ZeroMem (CurrentFakeNVMap->BootDescriptionData, sizeof (CurrentFakeNVMap->BootDescriptionData));\r
+ ZeroMem (OldFakeNVMap->BootOptionalData, sizeof (OldFakeNVMap->BootOptionalData));\r
+ ZeroMem (OldFakeNVMap->BootDescriptionData, sizeof (OldFakeNVMap->BootDescriptionData));\r
CurrentFakeNVMap->BootOptionChanged = FALSE;\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
} else if (QuestionId == KEY_VALUE_BOOT_DESCRIPTION || QuestionId == KEY_VALUE_BOOT_OPTION) {\r
CurrentFakeNVMap->BootOptionChanged = FALSE;\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
} else if (QuestionId == KEY_VALUE_BOOT_DESCRIPTION || QuestionId == KEY_VALUE_BOOT_OPTION) {\r
// through HiiSetBrowserData function.\r
//\r
CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;\r
// through HiiSetBrowserData function.\r
//\r
CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;\r
+ CallbackData->BmmOldFakeNVData.BootOptionDel[Index] = FALSE;\r
}\r
\r
HiiCreateCheckBoxOpCode (\r
}\r
\r
HiiCreateCheckBoxOpCode (\r
// through HiiSetBrowserData function.\r
//\r
CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;\r
// through HiiSetBrowserData function.\r
//\r
CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;\r
+ CallbackData->BmmOldFakeNVData.DriverOptionDel[Index] = FALSE;\r
}\r
HiiCreateCheckBoxOpCode (\r
mStartOpCodeHandle,\r
}\r
HiiCreateCheckBoxOpCode (\r
mStartOpCodeHandle,\r
if (!CallbackData->BmmFakeNvData.BootOptionChanged) {\r
ZeroMem (CallbackData->BmmFakeNvData.BootOptionalData, sizeof (CallbackData->BmmFakeNvData.BootOptionalData));\r
ZeroMem (CallbackData->BmmFakeNvData.BootDescriptionData, sizeof (CallbackData->BmmFakeNvData.BootDescriptionData));\r
if (!CallbackData->BmmFakeNvData.BootOptionChanged) {\r
ZeroMem (CallbackData->BmmFakeNvData.BootOptionalData, sizeof (CallbackData->BmmFakeNvData.BootOptionalData));\r
ZeroMem (CallbackData->BmmFakeNvData.BootDescriptionData, sizeof (CallbackData->BmmFakeNvData.BootDescriptionData));\r
+ ZeroMem (CallbackData->BmmOldFakeNVData.BootOptionalData, sizeof (CallbackData->BmmOldFakeNVData.BootOptionalData));\r
+ ZeroMem (CallbackData->BmmOldFakeNVData.BootDescriptionData, sizeof (CallbackData->BmmOldFakeNVData.BootDescriptionData));\r
}\r
} else if (FormId == FORM_DRV_ADD_FILE_ID){\r
if (!CallbackData->BmmFakeNvData.DriverOptionChanged) {\r
ZeroMem (CallbackData->BmmFakeNvData.DriverOptionalData, sizeof (CallbackData->BmmFakeNvData.DriverOptionalData));\r
ZeroMem (CallbackData->BmmFakeNvData.DriverDescriptionData, sizeof (CallbackData->BmmFakeNvData.DriverDescriptionData));\r
}\r
} else if (FormId == FORM_DRV_ADD_FILE_ID){\r
if (!CallbackData->BmmFakeNvData.DriverOptionChanged) {\r
ZeroMem (CallbackData->BmmFakeNvData.DriverOptionalData, sizeof (CallbackData->BmmFakeNvData.DriverOptionalData));\r
ZeroMem (CallbackData->BmmFakeNvData.DriverDescriptionData, sizeof (CallbackData->BmmFakeNvData.DriverDescriptionData));\r
+ ZeroMem (CallbackData->BmmOldFakeNVData.DriverOptionalData, sizeof (CallbackData->BmmOldFakeNVData.DriverOptionalData));\r
+ ZeroMem (CallbackData->BmmOldFakeNVData.DriverDescriptionData, sizeof (CallbackData->BmmOldFakeNVData.DriverDescriptionData));\r