2 Dynamically Update the pages
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
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.
15 #include "BootMaint.h"
18 Refresh the global UpdateData structure.
21 @param VOID EDES_TODO: Add parameter description
23 EDES_TODO: Incomplete Descriptions None.
31 gUpdateData
.Offset
= 0;
35 EDES_TODO: Add function description.
37 @param CallbackData EDES_TODO: Add parameter description
39 @return EDES_TODO: Add description for return value
44 IN BMM_CALLBACK_DATA
*CallbackData
49 if (!(CallbackData
->BmmAskSaveOrNot
)) {
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.
56 STRING_TOKEN (STR_FORM_GOTO_MAIN
),
57 STRING_TOKEN (STR_FORM_GOTO_MAIN
),
67 EDES_TODO: Add function description.
69 @param CallbackData EDES_TODO: Add parameter description
71 @return EDES_TODO: Add description for return value
76 IN BMM_CALLBACK_DATA
*CallbackData
80 // Create the "Apply changes" and "Discard changes" tags.
82 if (CallbackData
->BmmAskSaveOrNot
) {
83 CreateSubTitleOpCode (
84 STRING_TOKEN (STR_NULL_STRING
),
93 STRING_TOKEN (STR_SAVE_AND_EXIT
),
94 STRING_TOKEN (STR_NULL_STRING
),
95 EFI_IFR_FLAG_CALLBACK
,
96 KEY_VALUE_SAVE_AND_EXIT
,
102 // Ensure user can return to the main page.
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
,
114 CallbackData
->BmmHiiHandle
,
116 CallbackData
->BmmCurrentPageId
,
117 CallbackData
->BmmCurrentPageId
,
124 EDES_TODO: Add function description.
126 @param LabelId EDES_TODO: Add parameter description
127 @param CallbackData EDES_TODO: Add parameter description
129 @return EDES_TODO: Add description for return value
135 IN BMM_CALLBACK_DATA
*CallbackData
138 RefreshUpdateData ();
141 // Remove all op-codes from dynamic page
144 CallbackData
->BmmHiiHandle
,
154 EDES_TODO: Add function description.
156 @param FileContext EDES_TODO: Add parameter description
158 @return EDES_TODO: Add description for return value
163 IN BM_FILE_CONTEXT
*FileContext
169 BDS_COMMON_OPTION
*Option
;
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
;
178 // Since current no boot from removable media directly is allowed */
180 gST
->ConOut
->ClearScreen (gST
->ConOut
);
182 gBS
->RaiseTPL (TPL_APPLICATION
);
186 Status
= BdsLibBootViaBootOption (Option
, Option
->DevicePath
, &ExitDataSize
, &ExitData
);
188 gBS
->RestoreTPL (TPL_APPLICATION
);
195 EDES_TODO: Add function description.
197 @param CallbackData EDES_TODO: Add parameter description
199 @return EDES_TODO: Add description for return value
204 IN BMM_CALLBACK_DATA
*CallbackData
207 BM_MENU_ENTRY
*NewMenuEntry
;
210 CallbackData
->BmmAskSaveOrNot
= FALSE
;
212 UpdatePageStart (CallbackData
);
215 for (Index
= 0; Index
< TerminalMenu
.MenuNumber
; Index
++) {
216 NewMenuEntry
= BOpt_GetMenuEntry (&TerminalMenu
, Index
);
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
),
228 UpdatePageEnd (CallbackData
);
232 EDES_TODO: Add function description.
234 @param CallbackData EDES_TODO: Add parameter description
236 @return EDES_TODO: Add description for return value
241 IN BMM_CALLBACK_DATA
*CallbackData
244 BM_MENU_ENTRY
*NewMenuEntry
;
245 BM_LOAD_CONTEXT
*NewLoadContext
;
248 CallbackData
->BmmAskSaveOrNot
= TRUE
;
250 UpdatePageStart (CallbackData
);
251 CreateMenuStringToken (CallbackData
, CallbackData
->BmmHiiHandle
, &BootOptionMenu
);
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
) {
260 NewLoadContext
->Deleted
= FALSE
;
261 CallbackData
->BmmFakeNvData
.BootOptionDel
[Index
] = 0x00;
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
,
275 UpdatePageEnd (CallbackData
);
279 EDES_TODO: Add function description.
281 @param CallbackData EDES_TODO: Add parameter description
283 @return EDES_TODO: Add description for return value
287 UpdateDrvAddHandlePage (
288 IN BMM_CALLBACK_DATA
*CallbackData
291 BM_MENU_ENTRY
*NewMenuEntry
;
294 CallbackData
->BmmAskSaveOrNot
= FALSE
;
296 UpdatePageStart (CallbackData
);
298 for (Index
= 0; Index
< DriverMenu
.MenuNumber
; Index
++) {
299 NewMenuEntry
= BOpt_GetMenuEntry (&DriverMenu
, Index
);
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
),
311 UpdatePageEnd (CallbackData
);
315 EDES_TODO: Add function description.
317 @param CallbackData EDES_TODO: Add parameter description
319 @return EDES_TODO: Add description for return value
324 IN BMM_CALLBACK_DATA
*CallbackData
327 BM_MENU_ENTRY
*NewMenuEntry
;
328 BM_LOAD_CONTEXT
*NewLoadContext
;
331 CallbackData
->BmmAskSaveOrNot
= TRUE
;
333 UpdatePageStart (CallbackData
);
335 CreateMenuStringToken (CallbackData
, CallbackData
->BmmHiiHandle
, &DriverOptionMenu
);
337 for (Index
= 0; Index
< DriverOptionMenu
.MenuNumber
; Index
++) {
338 NewMenuEntry
= BOpt_GetMenuEntry (&DriverOptionMenu
, Index
);
340 NewLoadContext
= (BM_LOAD_CONTEXT
*) NewMenuEntry
->VariableContext
;
341 NewLoadContext
->Deleted
= FALSE
;
342 CallbackData
->BmmFakeNvData
.DriverOptionDel
[Index
] = 0x00;
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
,
356 UpdatePageEnd (CallbackData
);
360 EDES_TODO: Add function description.
362 @param CallbackData EDES_TODO: Add parameter description
364 @return EDES_TODO: Add description for return value
368 UpdateDriverAddHandleDescPage (
369 IN BMM_CALLBACK_DATA
*CallbackData
372 BM_MENU_ENTRY
*NewMenuEntry
;
374 CallbackData
->BmmFakeNvData
.DriverAddActive
= 0x01;
375 CallbackData
->BmmFakeNvData
.DriverAddForceReconnect
= 0x00;
376 CallbackData
->BmmAskSaveOrNot
= TRUE
;
377 NewMenuEntry
= CallbackData
->MenuEntry
;
379 UpdatePageStart (CallbackData
);
381 CreateSubTitleOpCode (
382 NewMenuEntry
->DisplayStringToken
,
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
),
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
),
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
),
426 UpdatePageEnd (CallbackData
);
430 EDES_TODO: Add function description.
432 @param UpdatePageId EDES_TODO: Add parameter description
433 @param ConsoleMenu EDES_TODO: Add parameter description
434 @param CallbackData EDES_TODO: Add parameter description
436 @return EDES_TODO: Add description for return value
441 IN UINT16 UpdatePageId
,
442 IN BM_MENU_OPTION
*ConsoleMenu
,
443 IN BMM_CALLBACK_DATA
*CallbackData
446 BM_MENU_ENTRY
*NewMenuEntry
;
447 BM_CONSOLE_CONTEXT
*NewConsoleContext
;
448 BM_TERMINAL_CONTEXT
*NewTerminalContext
;
453 CallbackData
->BmmAskSaveOrNot
= TRUE
;
455 UpdatePageStart (CallbackData
);
457 for (Index
= 0; Index
< ConsoleMenu
->MenuNumber
; Index
++) {
458 NewMenuEntry
= BOpt_GetMenuEntry (ConsoleMenu
, Index
);
459 NewConsoleContext
= (BM_CONSOLE_CONTEXT
*) NewMenuEntry
->VariableContext
;
461 if (NewConsoleContext
->IsActive
) {
462 CheckFlags
|= EFI_IFR_CHECKBOX_DEFAULT
;
463 CallbackData
->BmmFakeNvData
.ConsoleCheck
[Index
] = TRUE
;
465 CallbackData
->BmmFakeNvData
.ConsoleCheck
[Index
] = FALSE
;
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
,
480 for (Index2
= 0; Index2
< TerminalMenu
.MenuNumber
; Index2
++) {
482 NewMenuEntry
= BOpt_GetMenuEntry (&TerminalMenu
, Index2
);
483 NewTerminalContext
= (BM_TERMINAL_CONTEXT
*) NewMenuEntry
->VariableContext
;
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
))
489 CheckFlags
|= EFI_IFR_CHECKBOX_DEFAULT
;
490 CallbackData
->BmmFakeNvData
.ConsoleCheck
[Index
] = TRUE
;
492 CallbackData
->BmmFakeNvData
.ConsoleCheck
[Index
] = FALSE
;
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
,
509 UpdatePageEnd (CallbackData
);
513 EDES_TODO: Add function description.
515 @param UpdatePageId EDES_TODO: Add parameter description
516 @param OptionMenu EDES_TODO: Add parameter description
517 @param CallbackData EDES_TODO: Add parameter description
519 @return EDES_TODO: Add description for return value
524 IN UINT16 UpdatePageId
,
525 IN BM_MENU_OPTION
*OptionMenu
,
526 IN BMM_CALLBACK_DATA
*CallbackData
529 BM_MENU_ENTRY
*NewMenuEntry
;
531 IFR_OPTION
*IfrOptionList
;
533 CallbackData
->BmmAskSaveOrNot
= TRUE
;
535 UpdatePageStart (CallbackData
);
537 CreateMenuStringToken (CallbackData
, CallbackData
->BmmHiiHandle
, OptionMenu
);
539 ZeroMem (CallbackData
->BmmFakeNvData
.OptionOrder
, 100);
541 IfrOptionList
= EfiAllocateZeroPool (sizeof (IFR_OPTION
) * OptionMenu
->MenuNumber
);
542 if (NULL
== IfrOptionList
) {
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
;
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
),
563 EFI_IFR_NUMERIC_SIZE_1
,
566 OptionMenu
->MenuNumber
,
571 SafeFreePool (IfrOptionList
);
573 UpdatePageEnd (CallbackData
);
576 CallbackData
->BmmOldFakeNVData
.OptionOrder
,
577 CallbackData
->BmmFakeNvData
.OptionOrder
,
583 EDES_TODO: Add function description.
585 @param CallbackData EDES_TODO: Add parameter description
587 @return EDES_TODO: Add description for return value
592 IN BMM_CALLBACK_DATA
*CallbackData
595 BM_MENU_ENTRY
*NewMenuEntry
;
596 BM_LOAD_CONTEXT
*NewLoadContext
;
597 IFR_OPTION
*IfrOptionList
;
598 UINTN NumberOfOptions
;
601 IfrOptionList
= NULL
;
602 NumberOfOptions
= BootOptionMenu
.MenuNumber
;
603 CallbackData
->BmmAskSaveOrNot
= TRUE
;
605 UpdatePageStart (CallbackData
);
606 CreateMenuStringToken (CallbackData
, CallbackData
->BmmHiiHandle
, &BootOptionMenu
);
608 if (NumberOfOptions
> 0) {
609 IfrOptionList
= EfiAllocateZeroPool ((NumberOfOptions
+ 1) * sizeof (IFR_OPTION
));
611 ASSERT (IfrOptionList
);
613 CallbackData
->BmmFakeNvData
.BootNext
= (UINT16
) (BootOptionMenu
.MenuNumber
);
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
;
622 IfrOptionList
[Index
].Flags
= 0;
625 IfrOptionList
[Index
].Value
.u16
= Index
;
626 IfrOptionList
[Index
].StringToken
= NewMenuEntry
->DisplayStringToken
;
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
;
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
),
643 EFI_IFR_NUMERIC_SIZE_2
,
645 (UINTN
) (NumberOfOptions
+ 1),
649 SafeFreePool (IfrOptionList
);
652 UpdatePageEnd (CallbackData
);
656 EDES_TODO: Add function description.
658 @param CallbackData EDES_TODO: Add parameter description
660 @return EDES_TODO: Add description for return value
665 IN BMM_CALLBACK_DATA
*CallbackData
670 CallbackData
->BmmAskSaveOrNot
= TRUE
;
672 UpdatePageStart (CallbackData
);
674 BootTimeOut
= BdsLibGetTimeout ();
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
),
683 EFI_IFR_NUMERIC_SIZE_2
| EFI_IFR_DISPLAY_UINT_DEC
,
691 CallbackData
->BmmFakeNvData
.BootTimeOut
= BootTimeOut
;
693 UpdatePageEnd (CallbackData
);
697 Refresh the text mode page
700 @param CallbackData BMM_CALLBACK_DATA
702 EDES_TODO: Incomplete Descriptions None.
707 IN BMM_CALLBACK_DATA
*CallbackData
714 CHAR16 RowString
[50];
715 CHAR16 ModeString
[50];
718 EFI_STRING_ID
*ModeToken
;
719 IFR_OPTION
*IfrOptionList
;
721 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*ConOut
;
723 ConOut
= gST
->ConOut
;
726 MaxMode
= (UINTN
) (ConOut
->Mode
->MaxMode
);
728 CallbackData
->BmmAskSaveOrNot
= TRUE
;
730 UpdatePageStart (CallbackData
);
735 for (Mode
= 0; Mode
< MaxMode
; Mode
++) {
736 Status
= ConOut
->QueryMode (ConOut
, Mode
, &Col
, &Row
);
737 if (EFI_ERROR (Status
)) {
743 if (ValidMode
== 0) {
747 IfrOptionList
= EfiAllocateZeroPool (sizeof (IFR_OPTION
) * ValidMode
);
748 ASSERT(IfrOptionList
!= NULL
);
750 ModeToken
= EfiAllocateZeroPool (sizeof (EFI_STRING_ID
) * ValidMode
);
751 ASSERT(ModeToken
!= NULL
);
754 // Determin which mode should be the first entry in menu
756 GetConsoleOutMode (CallbackData
);
759 // Build text mode options
761 for (Mode
= 0; Mode
< MaxMode
; Mode
++) {
762 Status
= ConOut
->QueryMode (ConOut
, Mode
, &Col
, &Row
);
763 if (EFI_ERROR (Status
)) {
767 // Build mode string Column x Row
769 UnicodeValueToString (ModeString
, 0, Col
, 0);
770 StrCat (ModeString
, L
" x ");
771 UnicodeValueToString (RowString
, 0, Row
, 0);
772 StrCat (ModeString
, RowString
);
774 HiiLibNewString (CallbackData
->BmmHiiHandle
, &ModeToken
[Index
], ModeString
);
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
;
781 IfrOptionList
[Index
].Flags
= 0;
787 (EFI_QUESTION_ID
) CON_MODE_QUESTION_ID
,
788 VARSTORE_ID_BOOT_MAINT
,
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
,
798 SafeFreePool (IfrOptionList
);
799 SafeFreePool (ModeToken
);
801 UpdatePageEnd (CallbackData
);
805 EDES_TODO: Add function description.
807 @param CallbackData EDES_TODO: Add parameter description
809 @return EDES_TODO: Add description for return value
814 IN BMM_CALLBACK_DATA
*CallbackData
819 IFR_OPTION
*IfrOptionList
;
820 BM_MENU_ENTRY
*NewMenuEntry
;
821 BM_TERMINAL_CONTEXT
*NewTerminalContext
;
823 CallbackData
->BmmAskSaveOrNot
= TRUE
;
825 UpdatePageStart (CallbackData
);
827 NewMenuEntry
= BOpt_GetMenuEntry (
829 CallbackData
->CurrentTerminal
832 if (NewMenuEntry
== NULL
) {
836 NewTerminalContext
= (BM_TERMINAL_CONTEXT
*) NewMenuEntry
->VariableContext
;
838 IfrOptionList
= EfiAllocateZeroPool (sizeof (IFR_OPTION
) * 19);
839 if (IfrOptionList
== NULL
) {
843 for (Index
= 0; Index
< 19; Index
++) {
845 if (NewTerminalContext
->BaudRate
== (UINT64
) (BaudRateList
[Index
].Value
)) {
846 CheckFlags
|= EFI_IFR_OPTION_DEFAULT
;
847 NewTerminalContext
->BaudRateIndex
= Index
;
848 CallbackData
->BmmFakeNvData
.COMBaudRate
= NewTerminalContext
->BaudRateIndex
;
851 IfrOptionList
[Index
].Flags
= CheckFlags
;
852 IfrOptionList
[Index
].StringToken
= BaudRateList
[Index
].StringToken
;
853 IfrOptionList
[Index
].Value
.u8
= Index
;
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
),
863 EFI_IFR_NUMERIC_SIZE_1
,
869 for (Index
= 0; Index
< 4; Index
++) {
872 if (NewTerminalContext
->DataBits
== DataBitsList
[Index
].Value
) {
873 NewTerminalContext
->DataBitsIndex
= Index
;
874 CallbackData
->BmmFakeNvData
.COMDataRate
= NewTerminalContext
->DataBitsIndex
;
875 CheckFlags
|= EFI_IFR_OPTION_DEFAULT
;
878 IfrOptionList
[Index
].Flags
= CheckFlags
;
879 IfrOptionList
[Index
].StringToken
= DataBitsList
[Index
].StringToken
;
880 IfrOptionList
[Index
].Value
.u8
= Index
;
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
),
890 EFI_IFR_NUMERIC_SIZE_1
,
896 for (Index
= 0; Index
< 5; Index
++) {
898 if (NewTerminalContext
->Parity
== ParityList
[Index
].Value
) {
899 CheckFlags
|= EFI_IFR_OPTION_DEFAULT
;
900 NewTerminalContext
->ParityIndex
= (UINT8
) Index
;
901 CallbackData
->BmmFakeNvData
.COMParity
= NewTerminalContext
->ParityIndex
;
904 IfrOptionList
[Index
].Flags
= CheckFlags
;
905 IfrOptionList
[Index
].StringToken
= ParityList
[Index
].StringToken
;
906 IfrOptionList
[Index
].Value
.u8
= Index
;
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
),
916 EFI_IFR_NUMERIC_SIZE_1
,
922 for (Index
= 0; Index
< 3; Index
++) {
924 if (NewTerminalContext
->StopBits
== StopBitsList
[Index
].Value
) {
925 CheckFlags
|= EFI_IFR_OPTION_DEFAULT
;
926 NewTerminalContext
->StopBitsIndex
= (UINT8
) Index
;
927 CallbackData
->BmmFakeNvData
.COMStopBits
= NewTerminalContext
->StopBitsIndex
;
930 IfrOptionList
[Index
].Flags
= CheckFlags
;
931 IfrOptionList
[Index
].StringToken
= StopBitsList
[Index
].StringToken
;
932 IfrOptionList
[Index
].Value
.u8
= Index
;
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
),
942 EFI_IFR_NUMERIC_SIZE_1
,
948 for (Index
= 0; Index
< 4; Index
++) {
950 if (NewTerminalContext
->TerminalType
== Index
) {
951 CheckFlags
|= EFI_IFR_OPTION_DEFAULT
;
952 CallbackData
->BmmFakeNvData
.COMTerminalType
= NewTerminalContext
->TerminalType
;
955 IfrOptionList
[Index
].Flags
= CheckFlags
;
956 IfrOptionList
[Index
].StringToken
= (EFI_STRING_ID
) TerminalType
[Index
];
957 IfrOptionList
[Index
].Value
.u8
= Index
;
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
),
967 EFI_IFR_NUMERIC_SIZE_1
,
973 SafeFreePool (IfrOptionList
);
975 UpdatePageEnd (CallbackData
);
979 EDES_TODO: Add function description.
981 @param UpdatePageId EDES_TODO: Add parameter description
982 @param CallbackData EDES_TODO: Add parameter description
984 @return EDES_TODO: Add description for return value
989 IN UINT16 UpdatePageId
,
990 IN BMM_CALLBACK_DATA
*CallbackData
993 CleanUpPage (UpdatePageId
, CallbackData
);
994 switch (UpdatePageId
) {
996 UpdateConsolePage (UpdatePageId
, &ConsoleInpMenu
, CallbackData
);
999 case FORM_CON_OUT_ID
:
1000 UpdateConsolePage (UpdatePageId
, &ConsoleOutMenu
, CallbackData
);
1003 case FORM_CON_ERR_ID
:
1004 UpdateConsolePage (UpdatePageId
, &ConsoleErrMenu
, CallbackData
);
1007 case FORM_BOOT_CHG_ID
:
1008 UpdateOrderPage (UpdatePageId
, &BootOptionMenu
, CallbackData
);
1011 case FORM_DRV_CHG_ID
:
1012 UpdateOrderPage (UpdatePageId
, &DriverOptionMenu
, CallbackData
);
1021 EDES_TODO: Add function description.
1023 @param DeviceType EDES_TODO: Add parameter description
1024 @param OptionIndex EDES_TODO: Add parameter description
1025 @param OptionSize EDES_TODO: Add parameter description
1027 @return EDES_TODO: Add description for return value
1031 GetLegacyBootOptionVar (
1032 IN UINTN DeviceType
,
1033 OUT UINTN
*OptionIndex
,
1034 OUT UINTN
*OptionSize
1037 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
1041 UINT16
*OrderBuffer
;
1042 CHAR16 StrTemp
[100];
1043 UINT16 FilePathSize
;
1045 UINT8
*OptionalData
;
1048 // Get Boot Option number from the size of BootOrder
1050 OrderBuffer
= BdsLibGetVariableAndSize (
1052 &gEfiGlobalVariableGuid
,
1056 for (Index
= 0; Index
< OrderSize
/ sizeof (UINT16
); Index
++) {
1057 UnicodeSPrint (StrTemp
, 100, L
"Boot%04x", OrderBuffer
[Index
]);
1058 OptionBuffer
= BdsLibGetVariableAndSize (
1060 &gEfiGlobalVariableGuid
,
1063 if (NULL
== OptionBuffer
) {
1067 Ptr
= (UINT8
*) OptionBuffer
;
1068 Ptr
+= sizeof (UINT32
);
1070 FilePathSize
= *(UINT16
*) Ptr
;
1071 Ptr
+= sizeof (UINT16
);
1073 Ptr
+= StrSize ((CHAR16
*) Ptr
);
1076 // Now Ptr point to Device Path
1078 DevicePath
= (EFI_DEVICE_PATH_PROTOCOL
*) Ptr
;
1079 Ptr
+= FilePathSize
;
1082 // Now Ptr point to Optional Data
1086 if ((DeviceType
== ((BBS_TABLE
*) OptionalData
)->DeviceType
) &&
1087 (BBS_DEVICE_PATH
== DevicePath
->Type
) &&
1088 (BBS_BBS_DP
== DevicePath
->SubType
)
1090 *OptionIndex
= OrderBuffer
[Index
];
1091 SafeFreePool (OrderBuffer
);
1092 return OptionBuffer
;
1094 SafeFreePool (OptionBuffer
);
1098 SafeFreePool (OrderBuffer
);
1103 EDES_TODO: Add function description.
1105 @param UpdatePageId EDES_TODO: Add parameter description
1106 @param CallbackData EDES_TODO: Add parameter description
1108 @return EDES_TODO: Add description for return value
1112 UpdateSetLegacyDeviceOrderPage (
1113 IN UINT16 UpdatePageId
,
1114 IN BMM_CALLBACK_DATA
*CallbackData
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
;
1131 CHAR16
*TypeStrHelp
;
1144 BbsType
= BBS_FLOPPY
;
1149 CallbackData
->BmmAskSaveOrNot
= TRUE
;
1150 UpdatePageStart (CallbackData
);
1152 DisMap
= CallbackData
->BmmOldFakeNVData
.DisableMap
;
1154 SetMem (DisMap
, 32, 0);
1156 // Create oneof option list
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
;
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
;
1179 case FORM_SET_CD_ORDER_ID
:
1180 OptionMenu
= (BM_MENU_OPTION
*) &LegacyCDMenu
;
1181 Key
= (UINT16
) LEGACY_CD_QUESTION_ID
;
1183 TypeStrHelp
= StrCDROMHelp
;
1184 BbsType
= BBS_CDROM
;
1185 LegacyOrder
= CallbackData
->BmmFakeNvData
.LegacyCD
;
1186 OldData
= CallbackData
->BmmOldFakeNVData
.LegacyCD
;
1189 case FORM_SET_NET_ORDER_ID
:
1190 OptionMenu
= (BM_MENU_OPTION
*) &LegacyNETMenu
;
1191 Key
= (UINT16
) LEGACY_NET_QUESTION_ID
;
1193 TypeStrHelp
= StrNETHelp
;
1194 BbsType
= BBS_EMBED_NETWORK
;
1195 LegacyOrder
= CallbackData
->BmmFakeNvData
.LegacyNET
;
1196 OldData
= CallbackData
->BmmOldFakeNVData
.LegacyNET
;
1199 case FORM_SET_BEV_ORDER_ID
:
1200 OptionMenu
= (BM_MENU_OPTION
*) &LegacyBEVMenu
;
1201 Key
= (UINT16
) LEGACY_BEV_QUESTION_ID
;
1203 TypeStrHelp
= StrBEVHelp
;
1204 BbsType
= BBS_BEV_DEVICE
;
1205 LegacyOrder
= CallbackData
->BmmFakeNvData
.LegacyBEV
;
1206 OldData
= CallbackData
->BmmOldFakeNVData
.LegacyBEV
;
1211 CreateMenuStringToken (CallbackData
, CallbackData
->BmmHiiHandle
, OptionMenu
);
1213 IfrOptionList
= EfiAllocateZeroPool (sizeof (IFR_OPTION
) * (OptionMenu
->MenuNumber
+ 1));
1214 if (NULL
== IfrOptionList
) {
1218 for (Index
= 0; Index
< OptionMenu
->MenuNumber
; Index
++) {
1219 NewMenuEntry
= BOpt_GetMenuEntry (OptionMenu
, Index
);
1220 IfrOptionList
[Index
].Flags
= 0;
1222 IfrOptionList
[Index
].Flags
|= EFI_IFR_OPTION_DEFAULT
;
1225 IfrOptionList
[Index
].StringToken
= NewMenuEntry
->DisplayStringToken
;
1226 IfrOptionList
[Index
].Value
.u8
= (UINT8
) ((BM_LEGACY_DEVICE_CONTEXT
*) NewMenuEntry
->VariableContext
)->Index
;
1229 // for item "Disabled"
1231 IfrOptionList
[Index
].Flags
= 0;
1232 IfrOptionList
[Index
].StringToken
= STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE
);
1233 IfrOptionList
[Index
].Value
.u8
= 0xFF;
1236 // Get Device Order from variable
1238 VarData
= BdsLibGetVariableAndSize (
1239 VAR_LEGACY_DEV_ORDER
,
1240 &EfiLegacyDevOrderGuid
,
1244 if (NULL
!= VarData
) {
1245 DevOrder
= (BM_LEGACY_DEV_ORDER_CONTEXT
*) VarData
;
1246 while (VarData
< VarData
+ VarSize
) {
1247 if (DevOrder
->BbsType
== BbsType
) {
1251 VarData
+= sizeof (BBS_TYPE
);
1252 VarData
+= *(UINT16
*) VarData
;
1253 DevOrder
= (BM_LEGACY_DEV_ORDER_CONTEXT
*) VarData
;
1256 // Create oneof tag here for FD/HD/CD #1 #2
1258 for (Index
= 0; Index
< OptionMenu
->MenuNumber
; Index
++) {
1260 // Create the string for oneof tag
1262 UnicodeSPrint (String
, sizeof (String
), TypeStr
, Index
);
1264 HiiLibNewString (CallbackData
->BmmHiiHandle
, &StrRef
, String
);
1266 UnicodeSPrint (String
, sizeof (String
), TypeStrHelp
, Index
);
1268 HiiLibNewString (CallbackData
->BmmHiiHandle
, &StrRefHelp
, String
);
1271 (EFI_QUESTION_ID
) (Key
+ Index
),
1272 VARSTORE_ID_BOOT_MAINT
,
1273 (UINT16
) (Key
+ Index
- CONFIG_OPTION_OFFSET
),
1276 EFI_IFR_FLAG_CALLBACK
,
1277 EFI_IFR_NUMERIC_SIZE_1
,
1279 OptionMenu
->MenuNumber
+ 1,
1283 VarDevOrder
= *(UINT16
*) ((UINT8
*) DevOrder
+ sizeof (BBS_TYPE
) + sizeof (UINT16
) + Index
* sizeof (UINT16
));
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
));
1291 LegacyOrder
[Index
] = (UINT8
) (VarDevOrder
& 0xFF);
1296 CopyMem (OldData
, LegacyOrder
, 100);
1298 if (IfrOptionList
!= NULL
) {
1299 SafeFreePool (IfrOptionList
);
1300 IfrOptionList
= NULL
;
1303 UpdatePageEnd (CallbackData
);
1307 EDES_TODO: Add function description.
1309 @param Private EDES_TODO: Add parameter description
1310 @param NewPageId EDES_TODO: Add parameter description
1312 @return EDES_TODO: Add description for return value
1317 BMM_CALLBACK_DATA
*Private
,
1321 if ((NewPageId
< FILE_OPTION_OFFSET
) && (NewPageId
>= HANDLE_OPTION_OFFSET
)) {
1323 // If we select a handle to add driver option, advance to the add handle description page.
1325 NewPageId
= FORM_DRV_ADD_HANDLE_DESC_ID
;
1326 } else if ((NewPageId
== KEY_VALUE_SAVE_AND_EXIT
) || (NewPageId
== KEY_VALUE_NO_SAVE_AND_EXIT
)) {
1328 // Return to main page after "Save Changes" or "Discard Changes".
1330 NewPageId
= FORM_MAIN_ID
;
1331 } else if ((NewPageId
>= TERMINAL_OPTION_OFFSET
) && (NewPageId
< CONSOLE_OPTION_OFFSET
)) {
1332 NewPageId
= FORM_CON_COM_SETUP_ID
;
1335 if ((NewPageId
> 0) && (NewPageId
< MAXIMUM_FORM_ID
)) {
1336 Private
->BmmPreviousPageId
= Private
->BmmCurrentPageId
;
1337 Private
->BmmCurrentPageId
= NewPageId
;