Patch includes:

1.Update question value after BDS change code to avoid save invalid data.
2.Fix a corner case bug that may cause unexpected popup when changing the legacy device order.
Signed-off-by: ydong10
Reviewed-by: lgao4

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12892 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
ydong10 2011-12-22 06:31:40 +00:00
parent 5c6889f7ce
commit 98ba35a40c

View File

@ -280,12 +280,12 @@ BootMaintCallback (
UINTN Pos; UINTN Pos;
UINTN Bit; UINTN Bit;
UINT16 NewValuePos; UINT16 NewValuePos;
UINT16 Index3;
UINT16 Index2; UINT16 Index2;
UINT16 Index; UINT16 Index;
UINT8 *OldLegacyDev; UINT8 *OldLegacyDev;
UINT8 *NewLegacyDev; UINT8 *NewLegacyDev;
UINT8 *DisMap; UINT8 *DisMap;
EFI_FORM_ID FormId;
if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) { if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {
// //
@ -321,56 +321,30 @@ BootMaintCallback (
// //
// Update Select FD/HD/CD/NET/BEV Order Form // Update Select FD/HD/CD/NET/BEV Order Form
// //
if (FORM_SET_FD_ORDER_ID == Private->BmmPreviousPageId || if ((QuestionId >= LEGACY_FD_QUESTION_ID) && (QuestionId < LEGACY_BEV_QUESTION_ID + MAX_MENU_NUMBER)) {
FORM_SET_HD_ORDER_ID == Private->BmmPreviousPageId ||
FORM_SET_CD_ORDER_ID == Private->BmmPreviousPageId ||
FORM_SET_NET_ORDER_ID == Private->BmmPreviousPageId ||
FORM_SET_BEV_ORDER_ID == Private->BmmPreviousPageId ||
((FORM_BOOT_SETUP_ID == Private->BmmPreviousPageId) &&
(QuestionId >= LEGACY_FD_QUESTION_ID) &&
(QuestionId < (LEGACY_BEV_QUESTION_ID + 100)) )
) {
DisMap = Private->BmmOldFakeNVData.DisableMap; DisMap = Private->BmmOldFakeNVData.DisableMap;
FormId = Private->BmmPreviousPageId; if (QuestionId >= LEGACY_FD_QUESTION_ID && QuestionId < LEGACY_FD_QUESTION_ID + MAX_MENU_NUMBER) {
if (FormId == FORM_BOOT_SETUP_ID) {
FormId = Private->BmmCurrentPageId;
}
switch (FormId) {
case FORM_SET_FD_ORDER_ID:
Number = (UINT16) LegacyFDMenu.MenuNumber; Number = (UINT16) LegacyFDMenu.MenuNumber;
OldLegacyDev = Private->BmmOldFakeNVData.LegacyFD; OldLegacyDev = Private->BmmOldFakeNVData.LegacyFD;
NewLegacyDev = CurrentFakeNVMap->LegacyFD; NewLegacyDev = CurrentFakeNVMap->LegacyFD;
break; } else if (QuestionId >= LEGACY_HD_QUESTION_ID && QuestionId < LEGACY_HD_QUESTION_ID + MAX_MENU_NUMBER) {
case FORM_SET_HD_ORDER_ID:
Number = (UINT16) LegacyHDMenu.MenuNumber; Number = (UINT16) LegacyHDMenu.MenuNumber;
OldLegacyDev = Private->BmmOldFakeNVData.LegacyHD; OldLegacyDev = Private->BmmOldFakeNVData.LegacyHD;
NewLegacyDev = CurrentFakeNVMap->LegacyHD; NewLegacyDev = CurrentFakeNVMap->LegacyHD;
break; } else if (QuestionId >= LEGACY_CD_QUESTION_ID && QuestionId < LEGACY_CD_QUESTION_ID + MAX_MENU_NUMBER) {
case FORM_SET_CD_ORDER_ID:
Number = (UINT16) LegacyCDMenu.MenuNumber; Number = (UINT16) LegacyCDMenu.MenuNumber;
OldLegacyDev = Private->BmmOldFakeNVData.LegacyCD; OldLegacyDev = Private->BmmOldFakeNVData.LegacyCD;
NewLegacyDev = CurrentFakeNVMap->LegacyCD; NewLegacyDev = CurrentFakeNVMap->LegacyCD;
break; } else if (QuestionId >= LEGACY_NET_QUESTION_ID && QuestionId < LEGACY_NET_QUESTION_ID + MAX_MENU_NUMBER) {
case FORM_SET_NET_ORDER_ID:
Number = (UINT16) LegacyNETMenu.MenuNumber; Number = (UINT16) LegacyNETMenu.MenuNumber;
OldLegacyDev = Private->BmmOldFakeNVData.LegacyNET; OldLegacyDev = Private->BmmOldFakeNVData.LegacyNET;
NewLegacyDev = CurrentFakeNVMap->LegacyNET; NewLegacyDev = CurrentFakeNVMap->LegacyNET;
break; } else if (QuestionId >= LEGACY_BEV_QUESTION_ID && QuestionId < LEGACY_BEV_QUESTION_ID + MAX_MENU_NUMBER) {
case FORM_SET_BEV_ORDER_ID:
Number = (UINT16) LegacyBEVMenu.MenuNumber; Number = (UINT16) LegacyBEVMenu.MenuNumber;
OldLegacyDev = Private->BmmOldFakeNVData.LegacyBEV; OldLegacyDev = Private->BmmOldFakeNVData.LegacyBEV;
NewLegacyDev = CurrentFakeNVMap->LegacyBEV; NewLegacyDev = CurrentFakeNVMap->LegacyBEV;
break;
default:
break;
} }
// //
// First, find the different position // First, find the different position
@ -455,6 +429,7 @@ BootMaintCallback (
// To prevent DISABLE appears in the middle of the list // To prevent DISABLE appears in the middle of the list
// we should perform a re-ordering // we should perform a re-ordering
// //
Index3 = Index;
Index = 0; Index = 0;
while (Index < Number) { while (Index < Number) {
if (0xFF != NewLegacyDev[Index]) { if (0xFF != NewLegacyDev[Index]) {
@ -485,6 +460,11 @@ BootMaintCallback (
NewLegacyDev, NewLegacyDev,
Number Number
); );
//
// Return correct question value.
//
Value->u8 = NewLegacyDev[Index3];
} }
} }