]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
3dd5df7997672df5cd8db0102431b3c6cd49c0a7
[mirror_edk2.git] / MdeModulePkg / Universal / BdsDxe / BootMaint / UpdatePage.c
1 /** @file
2 Dynamically Update the pages
3
4 Copyright (c) 2004 - 2008, Intel Corporation. <BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #include "BootMaint.h"
16
17 /**
18 Refresh the global UpdateData structure.
19
20
21 @param VOID EDES_TODO: Add parameter description
22
23 EDES_TODO: Incomplete Descriptions None.
24
25 **/
26 VOID
27 RefreshUpdateData (
28 VOID
29 )
30 {
31 gUpdateData.Offset = 0;
32 }
33
34 /**
35 EDES_TODO: Add function description.
36
37 @param CallbackData EDES_TODO: Add parameter description
38
39 @return EDES_TODO: Add description for return value
40
41 **/
42 VOID
43 UpdatePageStart (
44 IN BMM_CALLBACK_DATA *CallbackData
45 )
46 {
47 RefreshUpdateData ();
48
49 if (!(CallbackData->BmmAskSaveOrNot)) {
50 //
51 // Add a "Go back to main page" tag in front of the form when there are no
52 // "Apply changes" and "Discard changes" tags in the end of the form.
53 //
54 CreateGotoOpCode (
55 FORM_MAIN_ID,
56 STRING_TOKEN (STR_FORM_GOTO_MAIN),
57 STRING_TOKEN (STR_FORM_GOTO_MAIN),
58 0,
59 FORM_MAIN_ID,
60 &gUpdateData
61 );
62 }
63
64 }
65
66 /**
67 EDES_TODO: Add function description.
68
69 @param CallbackData EDES_TODO: Add parameter description
70
71 @return EDES_TODO: Add description for return value
72
73 **/
74 VOID
75 UpdatePageEnd (
76 IN BMM_CALLBACK_DATA *CallbackData
77 )
78 {
79 //
80 // Create the "Apply changes" and "Discard changes" tags.
81 //
82 if (CallbackData->BmmAskSaveOrNot) {
83 CreateSubTitleOpCode (
84 STRING_TOKEN (STR_NULL_STRING),
85 0,
86 0,
87 0,
88 &gUpdateData
89 );
90
91 CreateGotoOpCode (
92 FORM_MAIN_ID,
93 STRING_TOKEN (STR_SAVE_AND_EXIT),
94 STRING_TOKEN (STR_NULL_STRING),
95 EFI_IFR_FLAG_CALLBACK,
96 KEY_VALUE_SAVE_AND_EXIT,
97 &gUpdateData
98 );
99 }
100
101 //
102 // Ensure user can return to the main page.
103 //
104 CreateGotoOpCode (
105 FORM_MAIN_ID,
106 STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
107 STRING_TOKEN (STR_NULL_STRING),
108 EFI_IFR_FLAG_CALLBACK,
109 KEY_VALUE_NO_SAVE_AND_EXIT,
110 &gUpdateData
111 );
112
113 IfrLibUpdateForm (
114 CallbackData->BmmHiiHandle,
115 &mBootMaintGuid,
116 CallbackData->BmmCurrentPageId,
117 CallbackData->BmmCurrentPageId,
118 FALSE,
119 &gUpdateData
120 );
121 }
122
123 /**
124 EDES_TODO: Add function description.
125
126 @param LabelId EDES_TODO: Add parameter description
127 @param CallbackData EDES_TODO: Add parameter description
128
129 @return EDES_TODO: Add description for return value
130
131 **/
132 VOID
133 CleanUpPage (
134 IN UINT16 LabelId,
135 IN BMM_CALLBACK_DATA *CallbackData
136 )
137 {
138 RefreshUpdateData ();
139
140 //
141 // Remove all op-codes from dynamic page
142 //
143 IfrLibUpdateForm (
144 CallbackData->BmmHiiHandle,
145 &mBootMaintGuid,
146 LabelId,
147 LabelId,
148 FALSE,
149 &gUpdateData
150 );
151 }
152
153 /**
154 EDES_TODO: Add function description.
155
156 @param FileContext EDES_TODO: Add parameter description
157
158 @return EDES_TODO: Add description for return value
159
160 **/
161 EFI_STATUS
162 BootThisFile (
163 IN BM_FILE_CONTEXT *FileContext
164 )
165 {
166 EFI_STATUS Status;
167 UINTN ExitDataSize;
168 CHAR16 *ExitData;
169 BDS_COMMON_OPTION *Option;
170
171 Status = gBS->AllocatePool (EfiBootServicesData, sizeof (BDS_COMMON_OPTION), (VOID **) &Option);
172 Option->Description = FileContext->FileName;
173 Option->DevicePath = FileContext->DevicePath;
174 Option->LoadOptionsSize = 0;
175 Option->LoadOptions = NULL;
176
177 //
178 // Since current no boot from removable media directly is allowed */
179 //
180 gST->ConOut->ClearScreen (gST->ConOut);
181
182 gBS->RaiseTPL (TPL_APPLICATION);
183
184 ExitDataSize = 0;
185
186 Status = BdsLibBootViaBootOption (Option, Option->DevicePath, &ExitDataSize, &ExitData);
187
188 gBS->RestoreTPL (TPL_APPLICATION);
189
190 return Status;
191
192 }
193
194 /**
195 EDES_TODO: Add function description.
196
197 @param CallbackData EDES_TODO: Add parameter description
198
199 @return EDES_TODO: Add description for return value
200
201 **/
202 VOID
203 UpdateConCOMPage (
204 IN BMM_CALLBACK_DATA *CallbackData
205 )
206 {
207 BM_MENU_ENTRY *NewMenuEntry;
208 UINT16 Index;
209
210 CallbackData->BmmAskSaveOrNot = FALSE;
211
212 UpdatePageStart (CallbackData);
213
214
215 for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
216 NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
217
218 CreateGotoOpCode (
219 FORM_CON_COM_SETUP_ID,
220 NewMenuEntry->DisplayStringToken,
221 STRING_TOKEN (STR_NULL_STRING),
222 EFI_IFR_FLAG_CALLBACK,
223 (UINT16) (TERMINAL_OPTION_OFFSET + Index),
224 &gUpdateData
225 );
226 }
227
228 UpdatePageEnd (CallbackData);
229 }
230
231 /**
232 EDES_TODO: Add function description.
233
234 @param CallbackData EDES_TODO: Add parameter description
235
236 @return EDES_TODO: Add description for return value
237
238 **/
239 VOID
240 UpdateBootDelPage (
241 IN BMM_CALLBACK_DATA *CallbackData
242 )
243 {
244 BM_MENU_ENTRY *NewMenuEntry;
245 BM_LOAD_CONTEXT *NewLoadContext;
246 UINT16 Index;
247
248 CallbackData->BmmAskSaveOrNot = TRUE;
249
250 UpdatePageStart (CallbackData);
251 CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);
252
253 for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
254 NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
255 NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
256 if (NewLoadContext->IsLegacy) {
257 continue;
258 }
259
260 NewLoadContext->Deleted = FALSE;
261 CallbackData->BmmFakeNvData.BootOptionDel[Index] = 0x00;
262
263 CreateCheckBoxOpCode (
264 (EFI_QUESTION_ID) (BOOT_OPTION_DEL_QUESTION_ID + Index),
265 VARSTORE_ID_BOOT_MAINT,
266 (UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index),
267 NewMenuEntry->DisplayStringToken,
268 NewMenuEntry->HelpStringToken,
269 0,
270 0,
271 &gUpdateData
272 );
273 }
274
275 UpdatePageEnd (CallbackData);
276 }
277
278 /**
279 EDES_TODO: Add function description.
280
281 @param CallbackData EDES_TODO: Add parameter description
282
283 @return EDES_TODO: Add description for return value
284
285 **/
286 VOID
287 UpdateDrvAddHandlePage (
288 IN BMM_CALLBACK_DATA *CallbackData
289 )
290 {
291 BM_MENU_ENTRY *NewMenuEntry;
292 UINT16 Index;
293
294 CallbackData->BmmAskSaveOrNot = FALSE;
295
296 UpdatePageStart (CallbackData);
297
298 for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {
299 NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);
300
301 CreateGotoOpCode (
302 FORM_DRV_ADD_HANDLE_DESC_ID,
303 NewMenuEntry->DisplayStringToken,
304 STRING_TOKEN (STR_NULL_STRING),
305 EFI_IFR_FLAG_CALLBACK,
306 (UINT16) (HANDLE_OPTION_OFFSET + Index),
307 &gUpdateData
308 );
309 }
310
311 UpdatePageEnd (CallbackData);
312 }
313
314 /**
315 EDES_TODO: Add function description.
316
317 @param CallbackData EDES_TODO: Add parameter description
318
319 @return EDES_TODO: Add description for return value
320
321 **/
322 VOID
323 UpdateDrvDelPage (
324 IN BMM_CALLBACK_DATA *CallbackData
325 )
326 {
327 BM_MENU_ENTRY *NewMenuEntry;
328 BM_LOAD_CONTEXT *NewLoadContext;
329 UINT16 Index;
330
331 CallbackData->BmmAskSaveOrNot = TRUE;
332
333 UpdatePageStart (CallbackData);
334
335 CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu);
336
337 for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {
338 NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);
339
340 NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
341 NewLoadContext->Deleted = FALSE;
342 CallbackData->BmmFakeNvData.DriverOptionDel[Index] = 0x00;
343
344 CreateCheckBoxOpCode (
345 (EFI_QUESTION_ID) (DRIVER_OPTION_DEL_QUESTION_ID + Index),
346 VARSTORE_ID_BOOT_MAINT,
347 (UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index),
348 NewMenuEntry->DisplayStringToken,
349 NewMenuEntry->HelpStringToken,
350 0,
351 0,
352 &gUpdateData
353 );
354 }
355
356 UpdatePageEnd (CallbackData);
357 }
358
359 /**
360 EDES_TODO: Add function description.
361
362 @param CallbackData EDES_TODO: Add parameter description
363
364 @return EDES_TODO: Add description for return value
365
366 **/
367 VOID
368 UpdateDriverAddHandleDescPage (
369 IN BMM_CALLBACK_DATA *CallbackData
370 )
371 {
372 BM_MENU_ENTRY *NewMenuEntry;
373
374 CallbackData->BmmFakeNvData.DriverAddActive = 0x01;
375 CallbackData->BmmFakeNvData.DriverAddForceReconnect = 0x00;
376 CallbackData->BmmAskSaveOrNot = TRUE;
377 NewMenuEntry = CallbackData->MenuEntry;
378
379 UpdatePageStart (CallbackData);
380
381 CreateSubTitleOpCode (
382 NewMenuEntry->DisplayStringToken,
383 0,
384 0,
385 0,
386 &gUpdateData
387 );
388
389 CreateStringOpCode (
390 (EFI_QUESTION_ID) DRV_ADD_HANDLE_DESC_QUESTION_ID,
391 VARSTORE_ID_BOOT_MAINT,
392 DRV_ADD_HANDLE_DESC_VAR_OFFSET,
393 STRING_TOKEN (STR_LOAD_OPTION_DESC),
394 STRING_TOKEN (STR_NULL_STRING),
395 0,
396 0,
397 6,
398 75,
399 &gUpdateData
400 );
401
402 CreateCheckBoxOpCode (
403 (EFI_QUESTION_ID) DRV_ADD_RECON_QUESTION_ID,
404 VARSTORE_ID_BOOT_MAINT,
405 DRV_ADD_RECON_VAR_OFFSET,
406 STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),
407 STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),
408 0,
409 0,
410 &gUpdateData
411 );
412
413 CreateStringOpCode (
414 (EFI_QUESTION_ID) DRIVER_ADD_OPTION_QUESTION_ID,
415 VARSTORE_ID_BOOT_MAINT,
416 DRIVER_ADD_OPTION_VAR_OFFSET,
417 STRING_TOKEN (STR_OPTIONAL_DATA),
418 STRING_TOKEN (STR_NULL_STRING),
419 0,
420 0,
421 6,
422 75,
423 &gUpdateData
424 );
425
426 UpdatePageEnd (CallbackData);
427 }
428
429 /**
430 EDES_TODO: Add function description.
431
432 @param UpdatePageId EDES_TODO: Add parameter description
433 @param ConsoleMenu EDES_TODO: Add parameter description
434 @param CallbackData EDES_TODO: Add parameter description
435
436 @return EDES_TODO: Add description for return value
437
438 **/
439 VOID
440 UpdateConsolePage (
441 IN UINT16 UpdatePageId,
442 IN BM_MENU_OPTION *ConsoleMenu,
443 IN BMM_CALLBACK_DATA *CallbackData
444 )
445 {
446 BM_MENU_ENTRY *NewMenuEntry;
447 BM_CONSOLE_CONTEXT *NewConsoleContext;
448 BM_TERMINAL_CONTEXT *NewTerminalContext;
449 UINT16 Index;
450 UINT16 Index2;
451 UINT8 CheckFlags;
452
453 CallbackData->BmmAskSaveOrNot = TRUE;
454
455 UpdatePageStart (CallbackData);
456
457 for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) {
458 NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);
459 NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
460 CheckFlags = 0;
461 if (NewConsoleContext->IsActive) {
462 CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
463 CallbackData->BmmFakeNvData.ConsoleCheck[Index] = TRUE;
464 } else {
465 CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;
466 }
467
468 CreateCheckBoxOpCode (
469 (EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),
470 VARSTORE_ID_BOOT_MAINT,
471 (UINT16) (CON_DEVICE_VAR_OFFSET + Index),
472 NewMenuEntry->DisplayStringToken,
473 NewMenuEntry->HelpStringToken,
474 0,
475 CheckFlags,
476 &gUpdateData
477 );
478 }
479
480 for (Index2 = 0; Index2 < TerminalMenu.MenuNumber; Index2++) {
481 CheckFlags = 0;
482 NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2);
483 NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
484
485 if (((NewTerminalContext->IsConIn != 0) && (UpdatePageId == FORM_CON_IN_ID)) ||
486 ((NewTerminalContext->IsConOut != 0) && (UpdatePageId == FORM_CON_OUT_ID)) ||
487 ((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID))
488 ) {
489 CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
490 CallbackData->BmmFakeNvData.ConsoleCheck[Index] = TRUE;
491 } else {
492 CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;
493 }
494
495 CreateCheckBoxOpCode (
496 (EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),
497 VARSTORE_ID_BOOT_MAINT,
498 (UINT16) (CON_DEVICE_VAR_OFFSET + Index),
499 NewMenuEntry->DisplayStringToken,
500 NewMenuEntry->HelpStringToken,
501 0,
502 CheckFlags,
503 &gUpdateData
504 );
505
506 Index++;
507 }
508
509 UpdatePageEnd (CallbackData);
510 }
511
512 /**
513 EDES_TODO: Add function description.
514
515 @param UpdatePageId EDES_TODO: Add parameter description
516 @param OptionMenu EDES_TODO: Add parameter description
517 @param CallbackData EDES_TODO: Add parameter description
518
519 @return EDES_TODO: Add description for return value
520
521 **/
522 VOID
523 UpdateOrderPage (
524 IN UINT16 UpdatePageId,
525 IN BM_MENU_OPTION *OptionMenu,
526 IN BMM_CALLBACK_DATA *CallbackData
527 )
528 {
529 BM_MENU_ENTRY *NewMenuEntry;
530 UINT16 Index;
531 IFR_OPTION *IfrOptionList;
532
533 CallbackData->BmmAskSaveOrNot = TRUE;
534
535 UpdatePageStart (CallbackData);
536
537 CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);
538
539 ZeroMem (CallbackData->BmmFakeNvData.OptionOrder, 100);
540
541 IfrOptionList = EfiAllocateZeroPool (sizeof (IFR_OPTION) * OptionMenu->MenuNumber);
542 if (NULL == IfrOptionList) {
543 return ;
544 }
545
546 for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
547 NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);
548 IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;
549 IfrOptionList[Index].Value.u8 = (UINT8) (NewMenuEntry->OptionNumber + 1);
550 IfrOptionList[Index].Flags = 0;
551 CallbackData->BmmFakeNvData.OptionOrder[Index] = IfrOptionList[Index].Value.u8;
552 }
553
554 if (OptionMenu->MenuNumber > 0) {
555 CreateOrderedListOpCode (
556 (EFI_QUESTION_ID) OPTION_ORDER_QUESTION_ID,
557 VARSTORE_ID_BOOT_MAINT,
558 OPTION_ORDER_VAR_OFFSET,
559 STRING_TOKEN (STR_CHANGE_ORDER),
560 STRING_TOKEN (STR_CHANGE_ORDER),
561 0,
562 0,
563 EFI_IFR_NUMERIC_SIZE_1,
564 100,
565 IfrOptionList,
566 OptionMenu->MenuNumber,
567 &gUpdateData
568 );
569 }
570
571 SafeFreePool (IfrOptionList);
572
573 UpdatePageEnd (CallbackData);
574
575 CopyMem (
576 CallbackData->BmmOldFakeNVData.OptionOrder,
577 CallbackData->BmmFakeNvData.OptionOrder,
578 100
579 );
580 }
581
582 /**
583 EDES_TODO: Add function description.
584
585 @param CallbackData EDES_TODO: Add parameter description
586
587 @return EDES_TODO: Add description for return value
588
589 **/
590 VOID
591 UpdateBootNextPage (
592 IN BMM_CALLBACK_DATA *CallbackData
593 )
594 {
595 BM_MENU_ENTRY *NewMenuEntry;
596 BM_LOAD_CONTEXT *NewLoadContext;
597 IFR_OPTION *IfrOptionList;
598 UINTN NumberOfOptions;
599 UINT16 Index;
600
601 IfrOptionList = NULL;
602 NumberOfOptions = BootOptionMenu.MenuNumber;
603 CallbackData->BmmAskSaveOrNot = TRUE;
604
605 UpdatePageStart (CallbackData);
606 CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);
607
608 if (NumberOfOptions > 0) {
609 IfrOptionList = EfiAllocateZeroPool ((NumberOfOptions + 1) * sizeof (IFR_OPTION));
610
611 ASSERT (IfrOptionList);
612
613 CallbackData->BmmFakeNvData.BootNext = (UINT16) (BootOptionMenu.MenuNumber);
614
615 for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
616 NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
617 NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
618 if (NewLoadContext->IsBootNext) {
619 IfrOptionList[Index].Flags = EFI_IFR_OPTION_DEFAULT;
620 CallbackData->BmmFakeNvData.BootNext = Index;
621 } else {
622 IfrOptionList[Index].Flags = 0;
623 }
624
625 IfrOptionList[Index].Value.u16 = Index;
626 IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;
627 }
628
629 IfrOptionList[Index].Value.u16 = Index;
630 IfrOptionList[Index].StringToken = STRING_TOKEN (STR_NONE);
631 IfrOptionList[Index].Flags = 0;
632 if (CallbackData->BmmFakeNvData.BootNext == Index) {
633 IfrOptionList[Index].Flags |= EFI_IFR_OPTION_DEFAULT;
634 }
635
636 CreateOneOfOpCode (
637 (EFI_QUESTION_ID) BOOT_NEXT_QUESTION_ID,
638 VARSTORE_ID_BOOT_MAINT,
639 BOOT_NEXT_VAR_OFFSET,
640 STRING_TOKEN (STR_BOOT_NEXT),
641 STRING_TOKEN (STR_BOOT_NEXT_HELP),
642 0,
643 EFI_IFR_NUMERIC_SIZE_2,
644 IfrOptionList,
645 (UINTN) (NumberOfOptions + 1),
646 &gUpdateData
647 );
648
649 SafeFreePool (IfrOptionList);
650 }
651
652 UpdatePageEnd (CallbackData);
653 }
654
655 /**
656 EDES_TODO: Add function description.
657
658 @param CallbackData EDES_TODO: Add parameter description
659
660 @return EDES_TODO: Add description for return value
661
662 **/
663 VOID
664 UpdateTimeOutPage (
665 IN BMM_CALLBACK_DATA *CallbackData
666 )
667 {
668 UINT16 BootTimeOut;
669
670 CallbackData->BmmAskSaveOrNot = TRUE;
671
672 UpdatePageStart (CallbackData);
673
674 BootTimeOut = BdsLibGetTimeout ();
675
676 CreateNumericOpCode (
677 (EFI_QUESTION_ID) BOOT_TIME_OUT_QUESTION_ID,
678 VARSTORE_ID_BOOT_MAINT,
679 BOOT_TIME_OUT_VAR_OFFSET,
680 STRING_TOKEN (STR_NUM_AUTO_BOOT),
681 STRING_TOKEN (STR_HLP_AUTO_BOOT),
682 0,
683 EFI_IFR_NUMERIC_SIZE_2 | EFI_IFR_DISPLAY_UINT_DEC,
684 0,
685 65535,
686 0,
687 BootTimeOut,
688 &gUpdateData
689 );
690
691 CallbackData->BmmFakeNvData.BootTimeOut = BootTimeOut;
692
693 UpdatePageEnd (CallbackData);
694 }
695
696 /**
697 Refresh the text mode page
698
699
700 @param CallbackData BMM_CALLBACK_DATA
701
702 EDES_TODO: Incomplete Descriptions None.
703
704 **/
705 VOID
706 UpdateConModePage (
707 IN BMM_CALLBACK_DATA *CallbackData
708 )
709 {
710 UINTN Mode;
711 UINTN Index;
712 UINTN Col;
713 UINTN Row;
714 CHAR16 RowString[50];
715 CHAR16 ModeString[50];
716 UINTN MaxMode;
717 UINTN ValidMode;
718 EFI_STRING_ID *ModeToken;
719 IFR_OPTION *IfrOptionList;
720 EFI_STATUS Status;
721 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
722
723 ConOut = gST->ConOut;
724 Index = 0;
725 ValidMode = 0;
726 MaxMode = (UINTN) (ConOut->Mode->MaxMode);
727
728 CallbackData->BmmAskSaveOrNot = TRUE;
729
730 UpdatePageStart (CallbackData);
731
732 //
733 // Check valid mode
734 //
735 for (Mode = 0; Mode < MaxMode; Mode++) {
736 Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);
737 if (EFI_ERROR (Status)) {
738 continue;
739 }
740 ValidMode++;
741 }
742
743 if (ValidMode == 0) {
744 return;
745 }
746
747 IfrOptionList = EfiAllocateZeroPool (sizeof (IFR_OPTION) * ValidMode);
748 ASSERT(IfrOptionList != NULL);
749
750 ModeToken = EfiAllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);
751 ASSERT(ModeToken != NULL);
752
753 //
754 // Determin which mode should be the first entry in menu
755 //
756 GetConsoleOutMode (CallbackData);
757
758 //
759 // Build text mode options
760 //
761 for (Mode = 0; Mode < MaxMode; Mode++) {
762 Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);
763 if (EFI_ERROR (Status)) {
764 continue;
765 }
766 //
767 // Build mode string Column x Row
768 //
769 UnicodeValueToString (ModeString, 0, Col, 0);
770 StrCat (ModeString, L" x ");
771 UnicodeValueToString (RowString, 0, Row, 0);
772 StrCat (ModeString, RowString);
773
774 HiiLibNewString (CallbackData->BmmHiiHandle, &ModeToken[Index], ModeString);
775
776 IfrOptionList[Index].StringToken = ModeToken[Index];
777 IfrOptionList[Index].Value.u16 = (UINT16) Mode;
778 if (Mode == CallbackData->BmmFakeNvData.ConsoleOutMode) {
779 IfrOptionList[Index].Flags = EFI_IFR_OPTION_DEFAULT;
780 } else {
781 IfrOptionList[Index].Flags = 0;
782 }
783 Index++;
784 }
785
786 CreateOneOfOpCode (
787 (EFI_QUESTION_ID) CON_MODE_QUESTION_ID,
788 VARSTORE_ID_BOOT_MAINT,
789 CON_MODE_VAR_OFFSET,
790 STRING_TOKEN (STR_CON_MODE_SETUP),
791 STRING_TOKEN (STR_CON_MODE_SETUP),
792 EFI_IFR_FLAG_RESET_REQUIRED,
793 EFI_IFR_NUMERIC_SIZE_2,
794 IfrOptionList,
795 ValidMode,
796 &gUpdateData
797 );
798 SafeFreePool (IfrOptionList);
799 SafeFreePool (ModeToken);
800
801 UpdatePageEnd (CallbackData);
802 }
803
804 /**
805 EDES_TODO: Add function description.
806
807 @param CallbackData EDES_TODO: Add parameter description
808
809 @return EDES_TODO: Add description for return value
810
811 **/
812 VOID
813 UpdateTerminalPage (
814 IN BMM_CALLBACK_DATA *CallbackData
815 )
816 {
817 UINT8 Index;
818 UINT8 CheckFlags;
819 IFR_OPTION *IfrOptionList;
820 BM_MENU_ENTRY *NewMenuEntry;
821 BM_TERMINAL_CONTEXT *NewTerminalContext;
822
823 CallbackData->BmmAskSaveOrNot = TRUE;
824
825 UpdatePageStart (CallbackData);
826
827 NewMenuEntry = BOpt_GetMenuEntry (
828 &TerminalMenu,
829 CallbackData->CurrentTerminal
830 );
831
832 if (NewMenuEntry == NULL) {
833 return ;
834 }
835
836 NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
837
838 IfrOptionList = EfiAllocateZeroPool (sizeof (IFR_OPTION) * 19);
839 if (IfrOptionList == NULL) {
840 return ;
841 }
842
843 for (Index = 0; Index < 19; Index++) {
844 CheckFlags = 0;
845 if (NewTerminalContext->BaudRate == (UINT64) (BaudRateList[Index].Value)) {
846 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
847 NewTerminalContext->BaudRateIndex = Index;
848 CallbackData->BmmFakeNvData.COMBaudRate = NewTerminalContext->BaudRateIndex;
849 }
850
851 IfrOptionList[Index].Flags = CheckFlags;
852 IfrOptionList[Index].StringToken = BaudRateList[Index].StringToken;
853 IfrOptionList[Index].Value.u8 = Index;
854 }
855
856 CreateOneOfOpCode (
857 (EFI_QUESTION_ID) COM_BAUD_RATE_QUESTION_ID,
858 VARSTORE_ID_BOOT_MAINT,
859 COM_BAUD_RATE_VAR_OFFSET,
860 STRING_TOKEN (STR_COM_BAUD_RATE),
861 STRING_TOKEN (STR_COM_BAUD_RATE),
862 0,
863 EFI_IFR_NUMERIC_SIZE_1,
864 IfrOptionList,
865 19,
866 &gUpdateData
867 );
868
869 for (Index = 0; Index < 4; Index++) {
870 CheckFlags = 0;
871
872 if (NewTerminalContext->DataBits == DataBitsList[Index].Value) {
873 NewTerminalContext->DataBitsIndex = Index;
874 CallbackData->BmmFakeNvData.COMDataRate = NewTerminalContext->DataBitsIndex;
875 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
876 }
877
878 IfrOptionList[Index].Flags = CheckFlags;
879 IfrOptionList[Index].StringToken = DataBitsList[Index].StringToken;
880 IfrOptionList[Index].Value.u8 = Index;
881 }
882
883 CreateOneOfOpCode (
884 (EFI_QUESTION_ID) COM_DATA_RATE_QUESTION_ID,
885 VARSTORE_ID_BOOT_MAINT,
886 COM_DATA_RATE_VAR_OFFSET,
887 STRING_TOKEN (STR_COM_DATA_BITS),
888 STRING_TOKEN (STR_COM_DATA_BITS),
889 0,
890 EFI_IFR_NUMERIC_SIZE_1,
891 IfrOptionList,
892 4,
893 &gUpdateData
894 );
895
896 for (Index = 0; Index < 5; Index++) {
897 CheckFlags = 0;
898 if (NewTerminalContext->Parity == ParityList[Index].Value) {
899 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
900 NewTerminalContext->ParityIndex = (UINT8) Index;
901 CallbackData->BmmFakeNvData.COMParity = NewTerminalContext->ParityIndex;
902 }
903
904 IfrOptionList[Index].Flags = CheckFlags;
905 IfrOptionList[Index].StringToken = ParityList[Index].StringToken;
906 IfrOptionList[Index].Value.u8 = Index;
907 }
908
909 CreateOneOfOpCode (
910 (EFI_QUESTION_ID) COM_PARITY_QUESTION_ID,
911 VARSTORE_ID_BOOT_MAINT,
912 COM_PARITY_VAR_OFFSET,
913 STRING_TOKEN (STR_COM_PARITY),
914 STRING_TOKEN (STR_COM_PARITY),
915 0,
916 EFI_IFR_NUMERIC_SIZE_1,
917 IfrOptionList,
918 5,
919 &gUpdateData
920 );
921
922 for (Index = 0; Index < 3; Index++) {
923 CheckFlags = 0;
924 if (NewTerminalContext->StopBits == StopBitsList[Index].Value) {
925 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
926 NewTerminalContext->StopBitsIndex = (UINT8) Index;
927 CallbackData->BmmFakeNvData.COMStopBits = NewTerminalContext->StopBitsIndex;
928 }
929
930 IfrOptionList[Index].Flags = CheckFlags;
931 IfrOptionList[Index].StringToken = StopBitsList[Index].StringToken;
932 IfrOptionList[Index].Value.u8 = Index;
933 }
934
935 CreateOneOfOpCode (
936 (EFI_QUESTION_ID) COM_STOP_BITS_QUESTION_ID,
937 VARSTORE_ID_BOOT_MAINT,
938 COM_STOP_BITS_VAR_OFFSET,
939 STRING_TOKEN (STR_COM_STOP_BITS),
940 STRING_TOKEN (STR_COM_STOP_BITS),
941 0,
942 EFI_IFR_NUMERIC_SIZE_1,
943 IfrOptionList,
944 3,
945 &gUpdateData
946 );
947
948 for (Index = 0; Index < 4; Index++) {
949 CheckFlags = 0;
950 if (NewTerminalContext->TerminalType == Index) {
951 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
952 CallbackData->BmmFakeNvData.COMTerminalType = NewTerminalContext->TerminalType;
953 }
954
955 IfrOptionList[Index].Flags = CheckFlags;
956 IfrOptionList[Index].StringToken = (EFI_STRING_ID) TerminalType[Index];
957 IfrOptionList[Index].Value.u8 = Index;
958 }
959
960 CreateOneOfOpCode (
961 (EFI_QUESTION_ID) COM_TERMINAL_QUESTION_ID,
962 VARSTORE_ID_BOOT_MAINT,
963 COM_TERMINAL_VAR_OFFSET,
964 STRING_TOKEN (STR_COM_TERMI_TYPE),
965 STRING_TOKEN (STR_COM_TERMI_TYPE),
966 0,
967 EFI_IFR_NUMERIC_SIZE_1,
968 IfrOptionList,
969 4,
970 &gUpdateData
971 );
972
973 SafeFreePool (IfrOptionList);
974
975 UpdatePageEnd (CallbackData);
976 }
977
978 /**
979 EDES_TODO: Add function description.
980
981 @param UpdatePageId EDES_TODO: Add parameter description
982 @param CallbackData EDES_TODO: Add parameter description
983
984 @return EDES_TODO: Add description for return value
985
986 **/
987 VOID
988 UpdatePageBody (
989 IN UINT16 UpdatePageId,
990 IN BMM_CALLBACK_DATA *CallbackData
991 )
992 {
993 CleanUpPage (UpdatePageId, CallbackData);
994 switch (UpdatePageId) {
995 case FORM_CON_IN_ID:
996 UpdateConsolePage (UpdatePageId, &ConsoleInpMenu, CallbackData);
997 break;
998
999 case FORM_CON_OUT_ID:
1000 UpdateConsolePage (UpdatePageId, &ConsoleOutMenu, CallbackData);
1001 break;
1002
1003 case FORM_CON_ERR_ID:
1004 UpdateConsolePage (UpdatePageId, &ConsoleErrMenu, CallbackData);
1005 break;
1006
1007 case FORM_BOOT_CHG_ID:
1008 UpdateOrderPage (UpdatePageId, &BootOptionMenu, CallbackData);
1009 break;
1010
1011 case FORM_DRV_CHG_ID:
1012 UpdateOrderPage (UpdatePageId, &DriverOptionMenu, CallbackData);
1013 break;
1014
1015 default:
1016 break;
1017 }
1018 }
1019
1020 /**
1021 EDES_TODO: Add function description.
1022
1023 @param DeviceType EDES_TODO: Add parameter description
1024 @param OptionIndex EDES_TODO: Add parameter description
1025 @param OptionSize EDES_TODO: Add parameter description
1026
1027 @return EDES_TODO: Add description for return value
1028
1029 **/
1030 VOID *
1031 GetLegacyBootOptionVar (
1032 IN UINTN DeviceType,
1033 OUT UINTN *OptionIndex,
1034 OUT UINTN *OptionSize
1035 )
1036 {
1037 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
1038 VOID *OptionBuffer;
1039 UINTN OrderSize;
1040 UINTN Index;
1041 UINT16 *OrderBuffer;
1042 CHAR16 StrTemp[100];
1043 UINT16 FilePathSize;
1044 UINT8 *Ptr;
1045 UINT8 *OptionalData;
1046
1047 //
1048 // Get Boot Option number from the size of BootOrder
1049 //
1050 OrderBuffer = BdsLibGetVariableAndSize (
1051 L"BootOrder",
1052 &gEfiGlobalVariableGuid,
1053 &OrderSize
1054 );
1055
1056 for (Index = 0; Index < OrderSize / sizeof (UINT16); Index++) {
1057 UnicodeSPrint (StrTemp, 100, L"Boot%04x", OrderBuffer[Index]);
1058 OptionBuffer = BdsLibGetVariableAndSize (
1059 StrTemp,
1060 &gEfiGlobalVariableGuid,
1061 OptionSize
1062 );
1063 if (NULL == OptionBuffer) {
1064 continue;
1065 }
1066
1067 Ptr = (UINT8 *) OptionBuffer;
1068 Ptr += sizeof (UINT32);
1069
1070 FilePathSize = *(UINT16 *) Ptr;
1071 Ptr += sizeof (UINT16);
1072
1073 Ptr += StrSize ((CHAR16 *) Ptr);
1074
1075 //
1076 // Now Ptr point to Device Path
1077 //
1078 DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
1079 Ptr += FilePathSize;
1080
1081 //
1082 // Now Ptr point to Optional Data
1083 //
1084 OptionalData = Ptr;
1085
1086 if ((DeviceType == ((BBS_TABLE *) OptionalData)->DeviceType) &&
1087 (BBS_DEVICE_PATH == DevicePath->Type) &&
1088 (BBS_BBS_DP == DevicePath->SubType)
1089 ) {
1090 *OptionIndex = OrderBuffer[Index];
1091 SafeFreePool (OrderBuffer);
1092 return OptionBuffer;
1093 } else {
1094 SafeFreePool (OptionBuffer);
1095 }
1096 }
1097
1098 SafeFreePool (OrderBuffer);
1099 return NULL;
1100 }
1101
1102 /**
1103 EDES_TODO: Add function description.
1104
1105 @param UpdatePageId EDES_TODO: Add parameter description
1106 @param CallbackData EDES_TODO: Add parameter description
1107
1108 @return EDES_TODO: Add description for return value
1109
1110 **/
1111 VOID
1112 UpdateSetLegacyDeviceOrderPage (
1113 IN UINT16 UpdatePageId,
1114 IN BMM_CALLBACK_DATA *CallbackData
1115 )
1116 {
1117 BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;
1118 BM_MENU_OPTION *OptionMenu;
1119 BM_MENU_ENTRY *NewMenuEntry;
1120 IFR_OPTION *IfrOptionList;
1121 EFI_STRING_ID StrRef;
1122 EFI_STRING_ID StrRefHelp;
1123 BBS_TYPE BbsType;
1124 UINTN VarSize;
1125 UINTN Pos;
1126 UINTN Bit;
1127 UINT16 Index;
1128 UINT16 Key;
1129 CHAR16 String[100];
1130 CHAR16 *TypeStr;
1131 CHAR16 *TypeStrHelp;
1132 UINT16 VarDevOrder;
1133 UINT8 *VarData;
1134 UINT8 *LegacyOrder;
1135 UINT8 *OldData;
1136 UINT8 *DisMap;
1137
1138 OptionMenu = NULL;
1139 Key = 0;
1140 StrRef = 0;
1141 StrRefHelp = 0;
1142 TypeStr = NULL;
1143 TypeStrHelp = NULL;
1144 BbsType = BBS_FLOPPY;
1145 LegacyOrder = NULL;
1146 OldData = NULL;
1147 DisMap = NULL;
1148
1149 CallbackData->BmmAskSaveOrNot = TRUE;
1150 UpdatePageStart (CallbackData);
1151
1152 DisMap = CallbackData->BmmOldFakeNVData.DisableMap;
1153
1154 SetMem (DisMap, 32, 0);
1155 //
1156 // Create oneof option list
1157 //
1158 switch (UpdatePageId) {
1159 case FORM_SET_FD_ORDER_ID:
1160 OptionMenu = (BM_MENU_OPTION *) &LegacyFDMenu;
1161 Key = (UINT16) LEGACY_FD_QUESTION_ID;
1162 TypeStr = StrFloppy;
1163 TypeStrHelp = StrFloppyHelp;
1164 BbsType = BBS_FLOPPY;
1165 LegacyOrder = CallbackData->BmmFakeNvData.LegacyFD;
1166 OldData = CallbackData->BmmOldFakeNVData.LegacyFD;
1167 break;
1168
1169 case FORM_SET_HD_ORDER_ID:
1170 OptionMenu = (BM_MENU_OPTION *) &LegacyHDMenu;
1171 Key = (UINT16) LEGACY_HD_QUESTION_ID;
1172 TypeStr = StrHardDisk;
1173 TypeStrHelp = StrHardDiskHelp;
1174 BbsType = BBS_HARDDISK;
1175 LegacyOrder = CallbackData->BmmFakeNvData.LegacyHD;
1176 OldData = CallbackData->BmmOldFakeNVData.LegacyHD;
1177 break;
1178
1179 case FORM_SET_CD_ORDER_ID:
1180 OptionMenu = (BM_MENU_OPTION *) &LegacyCDMenu;
1181 Key = (UINT16) LEGACY_CD_QUESTION_ID;
1182 TypeStr = StrCDROM;
1183 TypeStrHelp = StrCDROMHelp;
1184 BbsType = BBS_CDROM;
1185 LegacyOrder = CallbackData->BmmFakeNvData.LegacyCD;
1186 OldData = CallbackData->BmmOldFakeNVData.LegacyCD;
1187 break;
1188
1189 case FORM_SET_NET_ORDER_ID:
1190 OptionMenu = (BM_MENU_OPTION *) &LegacyNETMenu;
1191 Key = (UINT16) LEGACY_NET_QUESTION_ID;
1192 TypeStr = StrNET;
1193 TypeStrHelp = StrNETHelp;
1194 BbsType = BBS_EMBED_NETWORK;
1195 LegacyOrder = CallbackData->BmmFakeNvData.LegacyNET;
1196 OldData = CallbackData->BmmOldFakeNVData.LegacyNET;
1197 break;
1198
1199 case FORM_SET_BEV_ORDER_ID:
1200 OptionMenu = (BM_MENU_OPTION *) &LegacyBEVMenu;
1201 Key = (UINT16) LEGACY_BEV_QUESTION_ID;
1202 TypeStr = StrBEV;
1203 TypeStrHelp = StrBEVHelp;
1204 BbsType = BBS_BEV_DEVICE;
1205 LegacyOrder = CallbackData->BmmFakeNvData.LegacyBEV;
1206 OldData = CallbackData->BmmOldFakeNVData.LegacyBEV;
1207 break;
1208
1209 }
1210
1211 CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);
1212
1213 IfrOptionList = EfiAllocateZeroPool (sizeof (IFR_OPTION) * (OptionMenu->MenuNumber + 1));
1214 if (NULL == IfrOptionList) {
1215 return ;
1216 }
1217
1218 for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
1219 NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);
1220 IfrOptionList[Index].Flags = 0;
1221 if (0 == Index) {
1222 IfrOptionList[Index].Flags |= EFI_IFR_OPTION_DEFAULT;
1223 }
1224
1225 IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;
1226 IfrOptionList[Index].Value.u8 = (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index;
1227 }
1228 //
1229 // for item "Disabled"
1230 //
1231 IfrOptionList[Index].Flags = 0;
1232 IfrOptionList[Index].StringToken = STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE);
1233 IfrOptionList[Index].Value.u8 = 0xFF;
1234
1235 //
1236 // Get Device Order from variable
1237 //
1238 VarData = BdsLibGetVariableAndSize (
1239 VarLegacyDevOrder,
1240 &EfiLegacyDevOrderGuid,
1241 &VarSize
1242 );
1243
1244 if (NULL != VarData) {
1245 DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;
1246 while (VarData < VarData + VarSize) {
1247 if (DevOrder->BbsType == BbsType) {
1248 break;
1249 }
1250
1251 VarData += sizeof (BBS_TYPE);
1252 VarData += *(UINT16 *) VarData;
1253 DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;
1254 }
1255 //
1256 // Create oneof tag here for FD/HD/CD #1 #2
1257 //
1258 for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
1259 //
1260 // Create the string for oneof tag
1261 //
1262 UnicodeSPrint (String, sizeof (String), TypeStr, Index);
1263 StrRef = 0;
1264 HiiLibNewString (CallbackData->BmmHiiHandle, &StrRef, String);
1265
1266 UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);
1267 StrRefHelp = 0;
1268 HiiLibNewString (CallbackData->BmmHiiHandle, &StrRefHelp, String);
1269
1270 CreateOneOfOpCode (
1271 (EFI_QUESTION_ID) (Key + Index),
1272 VARSTORE_ID_BOOT_MAINT,
1273 (UINT16) (Key + Index - CONFIG_OPTION_OFFSET),
1274 StrRef,
1275 StrRefHelp,
1276 EFI_IFR_FLAG_CALLBACK,
1277 EFI_IFR_NUMERIC_SIZE_1,
1278 IfrOptionList,
1279 OptionMenu->MenuNumber + 1,
1280 &gUpdateData
1281 );
1282
1283 VarDevOrder = *(UINT16 *) ((UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index * sizeof (UINT16));
1284
1285 if (0xFF00 == (VarDevOrder & 0xFF00)) {
1286 LegacyOrder[Index] = 0xFF;
1287 Pos = (VarDevOrder & 0xFF) / 8;
1288 Bit = 7 - ((VarDevOrder & 0xFF) % 8);
1289 DisMap[Pos] = (UINT8) (DisMap[Pos] | (UINT8) (1 << Bit));
1290 } else {
1291 LegacyOrder[Index] = (UINT8) (VarDevOrder & 0xFF);
1292 }
1293 }
1294 }
1295
1296 CopyMem (OldData, LegacyOrder, 100);
1297
1298 if (IfrOptionList != NULL) {
1299 SafeFreePool (IfrOptionList);
1300 IfrOptionList = NULL;
1301 }
1302
1303 UpdatePageEnd (CallbackData);
1304 }
1305
1306 /**
1307 EDES_TODO: Add function description.
1308
1309 @param Private EDES_TODO: Add parameter description
1310 @param NewPageId EDES_TODO: Add parameter description
1311
1312 @return EDES_TODO: Add description for return value
1313
1314 **/
1315 VOID
1316 UpdatePageId (
1317 BMM_CALLBACK_DATA *Private,
1318 UINT16 NewPageId
1319 )
1320 {
1321 if ((NewPageId < FILE_OPTION_OFFSET) && (NewPageId >= HANDLE_OPTION_OFFSET)) {
1322 //
1323 // If we select a handle to add driver option, advance to the add handle description page.
1324 //
1325 NewPageId = FORM_DRV_ADD_HANDLE_DESC_ID;
1326 } else if ((NewPageId == KEY_VALUE_SAVE_AND_EXIT) || (NewPageId == KEY_VALUE_NO_SAVE_AND_EXIT)) {
1327 //
1328 // Return to main page after "Save Changes" or "Discard Changes".
1329 //
1330 NewPageId = FORM_MAIN_ID;
1331 } else if ((NewPageId >= TERMINAL_OPTION_OFFSET) && (NewPageId < CONSOLE_OPTION_OFFSET)) {
1332 NewPageId = FORM_CON_COM_SETUP_ID;
1333 }
1334
1335 if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {
1336 Private->BmmPreviousPageId = Private->BmmCurrentPageId;
1337 Private->BmmCurrentPageId = NewPageId;
1338 }
1339 }