TianoCore EDK2 master
Loading...
Searching...
No Matches
UpdatePage.c
Go to the documentation of this file.
1
10
15VOID
17 VOID
18 )
19{
20 //
21 // Init OpCode Handle and Allocate space for creation of Buffer
22 //
23 mStartOpCodeHandle = HiiAllocateOpCodeHandle ();
24 ASSERT (mStartOpCodeHandle != NULL);
25
26 mEndOpCodeHandle = HiiAllocateOpCodeHandle ();
27 ASSERT (mEndOpCodeHandle != NULL);
28
29 //
30 // Create Hii Extend Label OpCode as the start opcode
31 //
32 mStartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
34
35 //
36 // Create Hii Extend Label OpCode as the end opcode
37 //
38 mEndLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (mEndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
40 mEndLabel->Number = LABEL_END;
41}
42
47VOID
49 VOID
50 )
51{
52 //
53 // Free current updated date
54 //
55 if (mStartOpCodeHandle != NULL) {
56 HiiFreeOpCodeHandle (mStartOpCodeHandle);
57 }
58
59 //
60 // Create new OpCode Handle
61 //
62 mStartOpCodeHandle = HiiAllocateOpCodeHandle ();
63
64 //
65 // Create Hii Extend Label OpCode as the start opcode
66 //
67 mStartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
69}
70
78VOID
80 IN BMM_CALLBACK_DATA *CallbackData
81 )
82{
84 mStartLabel->Number = CallbackData->BmmCurrentPageId;
85
86 if (!(CallbackData->BmmAskSaveOrNot)) {
87 //
88 // Add a "Go back to main page" tag in front of the form when there are no
89 // "Apply changes" and "Discard changes" tags in the end of the form.
90 //
92 mStartOpCodeHandle,
93 FORM_MAIN_ID,
94 STRING_TOKEN (STR_FORM_GOTO_MAIN),
95 STRING_TOKEN (STR_FORM_GOTO_MAIN),
96 0,
97 FORM_MAIN_ID
98 );
99 }
100}
101
109VOID
111 IN BMM_CALLBACK_DATA *CallbackData
112 )
113{
114 //
115 // Create the "Apply changes" and "Discard changes" tags.
116 //
117 if (CallbackData->BmmAskSaveOrNot) {
119 mStartOpCodeHandle,
120 STRING_TOKEN (STR_NULL_STRING),
121 0,
122 0,
123 0
124 );
125
127 mStartOpCodeHandle,
128 KEY_VALUE_SAVE_AND_EXIT,
129 STRING_TOKEN (STR_SAVE_AND_EXIT),
130 STRING_TOKEN (STR_NULL_STRING),
131 EFI_IFR_FLAG_CALLBACK,
132 0
133 );
134 }
135
136 //
137 // Ensure user can return to the main page.
138 //
140 mStartOpCodeHandle,
141 KEY_VALUE_NO_SAVE_AND_EXIT,
142 STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
143 STRING_TOKEN (STR_NULL_STRING),
144 EFI_IFR_FLAG_CALLBACK,
145 0
146 );
147
149 CallbackData->BmmHiiHandle,
150 &mBootMaintGuid,
151 CallbackData->BmmCurrentPageId,
152 mStartOpCodeHandle, // Label CallbackData->BmmCurrentPageId
153 mEndOpCodeHandle // LABEL_END
154 );
155}
156
164VOID
166 IN UINT16 LabelId,
167 IN BMM_CALLBACK_DATA *CallbackData
168 )
169{
171
172 //
173 // Remove all op-codes from dynamic page
174 //
175 mStartLabel->Number = LabelId;
177 CallbackData->BmmHiiHandle,
178 &mBootMaintGuid,
179 LabelId,
180 mStartOpCodeHandle, // Label LabelId
181 mEndOpCodeHandle // LABEL_END
182 );
183}
184
191VOID
193 IN BMM_CALLBACK_DATA *CallbackData
194 )
195{
196 BM_MENU_ENTRY *NewMenuEntry;
197 UINT16 Index;
198
199 CallbackData->BmmAskSaveOrNot = TRUE;
200
201 UpdatePageStart (CallbackData);
202
203 for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
204 NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
205
207 mStartOpCodeHandle,
208 FORM_CON_COM_SETUP_ID,
209 NewMenuEntry->DisplayStringToken,
210 STRING_TOKEN (STR_NULL_STRING),
211 EFI_IFR_FLAG_CALLBACK,
212 (UINT16)(TERMINAL_OPTION_OFFSET + Index)
213 );
214 }
215
216 UpdatePageEnd (CallbackData);
217}
218
226VOID
228 IN BMM_CALLBACK_DATA *CallbackData
229 )
230{
231 BM_MENU_ENTRY *NewMenuEntry;
232 BM_LOAD_CONTEXT *NewLoadContext;
233 UINT16 Index;
234
235 CallbackData->BmmAskSaveOrNot = TRUE;
236
237 UpdatePageStart (CallbackData);
238
239 ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.BootOptionDel) / sizeof (CallbackData->BmmFakeNvData.BootOptionDel[0])));
240 for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
241 NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
242 NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
243 if (NewLoadContext->IsLegacy) {
244 continue;
245 }
246
247 NewLoadContext->Deleted = FALSE;
248
249 if (CallbackData->BmmFakeNvData.BootOptionDel[Index] && !CallbackData->BmmFakeNvData.BootOptionDelMark[Index]) {
250 //
251 // CallbackData->BmmFakeNvData.BootOptionDel[Index] == TRUE means browser knows this boot option is selected
252 // CallbackData->BmmFakeNvData.BootOptionDelMark[Index] = FALSE means BDS knows the selected boot option has
253 // deleted, browser maintains old useless info. So clear this info here, and later update this info to browser
254 // through HiiSetBrowserData function.
255 //
256 CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;
257 CallbackData->BmmOldFakeNVData.BootOptionDel[Index] = FALSE;
258 }
259
261 mStartOpCodeHandle,
262 (EFI_QUESTION_ID)(BOOT_OPTION_DEL_QUESTION_ID + Index),
263 VARSTORE_ID_BOOT_MAINT,
264 (UINT16)(BOOT_OPTION_DEL_VAR_OFFSET + Index),
265 NewMenuEntry->DisplayStringToken,
266 NewMenuEntry->HelpStringToken,
267 EFI_IFR_FLAG_CALLBACK,
268 0,
269 NULL
270 );
271 }
272
273 UpdatePageEnd (CallbackData);
274}
275
282VOID
284 IN BMM_CALLBACK_DATA *CallbackData
285 )
286{
287 BM_MENU_ENTRY *NewMenuEntry;
288 UINT16 Index;
289
290 CallbackData->BmmAskSaveOrNot = FALSE;
291
292 UpdatePageStart (CallbackData);
293
294 for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {
295 NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);
296
298 mStartOpCodeHandle,
299 FORM_DRV_ADD_HANDLE_DESC_ID,
300 NewMenuEntry->DisplayStringToken,
301 STRING_TOKEN (STR_NULL_STRING),
302 EFI_IFR_FLAG_CALLBACK,
303 (UINT16)(HANDLE_OPTION_OFFSET + Index)
304 );
305 }
306
307 UpdatePageEnd (CallbackData);
308}
309
317VOID
319 IN BMM_CALLBACK_DATA *CallbackData
320 )
321{
322 BM_MENU_ENTRY *NewMenuEntry;
323 BM_LOAD_CONTEXT *NewLoadContext;
324 UINT16 Index;
325
326 CallbackData->BmmAskSaveOrNot = TRUE;
327
328 UpdatePageStart (CallbackData);
329
330 ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.DriverOptionDel) / sizeof (CallbackData->BmmFakeNvData.DriverOptionDel[0])));
331 for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {
332 NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);
333
334 NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
335 NewLoadContext->Deleted = FALSE;
336
337 if (CallbackData->BmmFakeNvData.DriverOptionDel[Index] && !CallbackData->BmmFakeNvData.DriverOptionDelMark[Index]) {
338 //
339 // CallbackData->BmmFakeNvData.BootOptionDel[Index] == TRUE means browser knows this boot option is selected
340 // CallbackData->BmmFakeNvData.BootOptionDelMark[Index] = FALSE means BDS knows the selected boot option has
341 // deleted, browser maintains old useless info. So clear this info here, and later update this info to browser
342 // through HiiSetBrowserData function.
343 //
344 CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;
345 CallbackData->BmmOldFakeNVData.DriverOptionDel[Index] = FALSE;
346 }
347
349 mStartOpCodeHandle,
350 (EFI_QUESTION_ID)(DRIVER_OPTION_DEL_QUESTION_ID + Index),
351 VARSTORE_ID_BOOT_MAINT,
352 (UINT16)(DRIVER_OPTION_DEL_VAR_OFFSET + Index),
353 NewMenuEntry->DisplayStringToken,
354 NewMenuEntry->HelpStringToken,
355 EFI_IFR_FLAG_CALLBACK,
356 0,
357 NULL
358 );
359 }
360
361 UpdatePageEnd (CallbackData);
362}
363
371VOID
373 IN BMM_CALLBACK_DATA *CallbackData
374 )
375{
376 BM_MENU_ENTRY *NewMenuEntry;
377
378 CallbackData->BmmFakeNvData.DriverAddActive = 0x01;
379 CallbackData->BmmFakeNvData.DriverAddForceReconnect = 0x00;
380 CallbackData->BmmAskSaveOrNot = TRUE;
381 NewMenuEntry = CallbackData->MenuEntry;
382
383 UpdatePageStart (CallbackData);
384
386 mStartOpCodeHandle,
387 NewMenuEntry->DisplayStringToken,
388 0,
389 0,
390 0
391 );
392
394 mStartOpCodeHandle,
395 (EFI_QUESTION_ID)DRV_ADD_HANDLE_DESC_QUESTION_ID,
396 VARSTORE_ID_BOOT_MAINT,
397 DRV_ADD_HANDLE_DESC_VAR_OFFSET,
398 STRING_TOKEN (STR_LOAD_OPTION_DESC),
399 STRING_TOKEN (STR_NULL_STRING),
400 0,
401 0,
402 6,
403 75,
404 NULL
405 );
406
408 mStartOpCodeHandle,
409 (EFI_QUESTION_ID)DRV_ADD_RECON_QUESTION_ID,
410 VARSTORE_ID_BOOT_MAINT,
411 DRV_ADD_RECON_VAR_OFFSET,
412 STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),
413 STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),
414 0,
415 0,
416 NULL
417 );
418
420 mStartOpCodeHandle,
421 (EFI_QUESTION_ID)DRIVER_ADD_OPTION_QUESTION_ID,
422 VARSTORE_ID_BOOT_MAINT,
423 DRIVER_ADD_OPTION_VAR_OFFSET,
424 STRING_TOKEN (STR_OPTIONAL_DATA),
425 STRING_TOKEN (STR_NULL_STRING),
426 0,
427 0,
428 6,
429 75,
430 NULL
431 );
432
433 UpdatePageEnd (CallbackData);
434}
435
444VOID
446 IN UINT16 UpdatePageId,
447 IN BM_MENU_OPTION *ConsoleMenu,
448 IN BMM_CALLBACK_DATA *CallbackData
449 )
450{
451 BM_MENU_ENTRY *NewMenuEntry;
452 BM_CONSOLE_CONTEXT *NewConsoleContext;
453 BM_TERMINAL_CONTEXT *NewTerminalContext;
454 UINT16 Index;
455 UINT16 Index2;
456 UINT8 CheckFlags;
457 UINT8 *ConsoleCheck;
458 EFI_QUESTION_ID QuestionIdBase;
459 UINT16 VariableOffsetBase;
460
461 CallbackData->BmmAskSaveOrNot = TRUE;
462
463 UpdatePageStart (CallbackData);
464
465 ConsoleCheck = NULL;
466 QuestionIdBase = 0;
467 VariableOffsetBase = 0;
468
469 switch (UpdatePageId) {
470 case FORM_CON_IN_ID:
471 ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];
472 QuestionIdBase = CON_IN_DEVICE_QUESTION_ID;
473 VariableOffsetBase = CON_IN_DEVICE_VAR_OFFSET;
474 break;
475
476 case FORM_CON_OUT_ID:
477 ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleOutCheck[0];
478 QuestionIdBase = CON_OUT_DEVICE_QUESTION_ID;
479 VariableOffsetBase = CON_OUT_DEVICE_VAR_OFFSET;
480 break;
481
482 case FORM_CON_ERR_ID:
483 ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleErrCheck[0];
484 QuestionIdBase = CON_ERR_DEVICE_QUESTION_ID;
485 VariableOffsetBase = CON_ERR_DEVICE_VAR_OFFSET;
486 break;
487 }
488
489 ASSERT (ConsoleCheck != NULL);
490
491 for (Index = 0; ((Index < ConsoleMenu->MenuNumber) && \
492 (Index < MAX_MENU_NUMBER)); Index++)
493 {
494 CheckFlags = 0;
495 NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);
496 NewConsoleContext = (BM_CONSOLE_CONTEXT *)NewMenuEntry->VariableContext;
497 if (NewConsoleContext->IsActive) {
498 CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
499 ConsoleCheck[Index] = TRUE;
500 } else {
501 ConsoleCheck[Index] = FALSE;
502 }
503
505 mStartOpCodeHandle,
506 (EFI_QUESTION_ID)(QuestionIdBase + Index),
507 VARSTORE_ID_BOOT_MAINT,
508 (UINT16)(VariableOffsetBase + Index),
509 NewMenuEntry->DisplayStringToken,
510 NewMenuEntry->HelpStringToken,
511 EFI_IFR_FLAG_CALLBACK,
512 CheckFlags,
513 NULL
514 );
515 }
516
517 for (Index2 = 0; ((Index2 < TerminalMenu.MenuNumber) && \
518 (Index2 < MAX_MENU_NUMBER)); Index2++)
519 {
520 CheckFlags = 0;
521 NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2);
522 NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
523
524 ASSERT (Index < MAX_MENU_NUMBER);
525 if (((NewTerminalContext->IsConIn != 0) && (UpdatePageId == FORM_CON_IN_ID)) ||
526 ((NewTerminalContext->IsConOut != 0) && (UpdatePageId == FORM_CON_OUT_ID)) ||
527 ((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID))
528 )
529 {
530 CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
531
532 if (Index < MAX_MENU_NUMBER) {
533 ConsoleCheck[Index] = TRUE;
534 }
535 } else if (Index < MAX_MENU_NUMBER) {
536 ConsoleCheck[Index] = FALSE;
537 }
538
540 mStartOpCodeHandle,
541 (EFI_QUESTION_ID)(QuestionIdBase + Index),
542 VARSTORE_ID_BOOT_MAINT,
543 (UINT16)(VariableOffsetBase + Index),
544 NewMenuEntry->DisplayStringToken,
545 NewMenuEntry->HelpStringToken,
546 EFI_IFR_FLAG_CALLBACK,
547 CheckFlags,
548 NULL
549 );
550
551 Index++;
552 }
553
554 UpdatePageEnd (CallbackData);
555}
556
566VOID
568 IN UINT16 UpdatePageId,
569 IN BM_MENU_OPTION *OptionMenu,
570 IN BMM_CALLBACK_DATA *CallbackData
571 )
572{
573 BM_MENU_ENTRY *NewMenuEntry;
574 UINT16 Index;
575 UINT16 OptionIndex;
576 VOID *OptionsOpCodeHandle;
577 BOOLEAN BootOptionFound;
578 UINT32 *OptionOrder;
579 EFI_QUESTION_ID QuestionId;
580 UINT16 VarOffset;
581
582 CallbackData->BmmAskSaveOrNot = TRUE;
583 UpdatePageStart (CallbackData);
584
585 OptionOrder = NULL;
586 QuestionId = 0;
587 VarOffset = 0;
588 switch (UpdatePageId) {
589 case FORM_BOOT_CHG_ID:
590 //
591 // If the BootOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,
592 // means all Boot Options has been save in BootOptionMenu, we can get the date from the menu.
593 // else means browser maintains some uncommitted date which are not saved in BootOptionMenu,
594 // so we should not get the data from BootOptionMenu to show it.
595 //
596 if (CompareMem (CallbackData->BmmFakeNvData.BootOptionOrder, CallbackData->BmmOldFakeNVData.BootOptionOrder, sizeof (CallbackData->BmmFakeNvData.BootOptionOrder)) == 0) {
597 GetBootOrder (CallbackData);
598 }
599
600 OptionOrder = CallbackData->BmmFakeNvData.BootOptionOrder;
601 QuestionId = BOOT_OPTION_ORDER_QUESTION_ID;
602 VarOffset = BOOT_OPTION_ORDER_VAR_OFFSET;
603 break;
604
605 case FORM_DRV_CHG_ID:
606 //
607 // If the DriverOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,
608 // means all Driver Options has been save in DriverOptionMenu, we can get the DriverOptionOrder from the menu.
609 // else means browser maintains some uncommitted date which are not saved in DriverOptionMenu,
610 // so we should not get the data from DriverOptionMenu to show it.
611 //
612 if (CompareMem (CallbackData->BmmFakeNvData.DriverOptionOrder, CallbackData->BmmOldFakeNVData.DriverOptionOrder, sizeof (CallbackData->BmmFakeNvData.DriverOptionOrder)) == 0) {
613 GetDriverOrder (CallbackData);
614 }
615
616 OptionOrder = CallbackData->BmmFakeNvData.DriverOptionOrder;
617 QuestionId = DRIVER_OPTION_ORDER_QUESTION_ID;
618 VarOffset = DRIVER_OPTION_ORDER_VAR_OFFSET;
619 break;
620 }
621
622 ASSERT (OptionOrder != NULL);
623
624 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
625 ASSERT (OptionsOpCodeHandle != NULL);
626
627 NewMenuEntry = NULL;
628 for (OptionIndex = 0; (OptionIndex < MAX_MENU_NUMBER && OptionOrder[OptionIndex] != 0); OptionIndex++) {
629 BootOptionFound = FALSE;
630 for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
631 NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);
632 if ((UINT32)(NewMenuEntry->OptionNumber + 1) == OptionOrder[OptionIndex]) {
633 BootOptionFound = TRUE;
634 break;
635 }
636 }
637
638 if (BootOptionFound) {
640 OptionsOpCodeHandle,
641 NewMenuEntry->DisplayStringToken,
642 0,
643 EFI_IFR_TYPE_NUM_SIZE_32,
644 OptionOrder[OptionIndex]
645 );
646 }
647 }
648
649 if (OptionMenu->MenuNumber > 0) {
651 mStartOpCodeHandle, // Container for dynamic created opcodes
652 QuestionId, // Question ID
653 VARSTORE_ID_BOOT_MAINT, // VarStore ID
654 VarOffset, // Offset in Buffer Storage
655 STRING_TOKEN (STR_CHANGE_ORDER), // Question prompt text
656 STRING_TOKEN (STR_CHANGE_ORDER), // Question help text
657 0, // Question flag
658 0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET
659 EFI_IFR_TYPE_NUM_SIZE_32, // Data type of Question value
660 100, // Maximum container
661 OptionsOpCodeHandle, // Option Opcode list
662 NULL // Default Opcode is NULL
663 );
664 }
665
666 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
667
668 UpdatePageEnd (CallbackData);
669}
670
677VOID
679 IN BMM_CALLBACK_DATA *CallbackData
680 )
681{
682 UINTN Mode;
683 UINTN Index;
684 UINTN Col;
685 UINTN Row;
686 CHAR16 ModeString[50];
687 CHAR16 *PStr;
688 UINTN MaxMode;
689 UINTN ValidMode;
690 EFI_STRING_ID *ModeToken;
691 EFI_STATUS Status;
692 VOID *OptionsOpCodeHandle;
694
695 ConOut = gST->ConOut;
696 Index = 0;
697 ValidMode = 0;
698 MaxMode = (UINTN)(ConOut->Mode->MaxMode);
699
700 CallbackData->BmmAskSaveOrNot = TRUE;
701
702 UpdatePageStart (CallbackData);
703
704 //
705 // Check valid mode
706 //
707 for (Mode = 0; Mode < MaxMode; Mode++) {
708 Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);
709 if (EFI_ERROR (Status)) {
710 continue;
711 }
712
713 ValidMode++;
714 }
715
716 if (ValidMode == 0) {
717 return;
718 }
719
720 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
721 ASSERT (OptionsOpCodeHandle != NULL);
722
723 ModeToken = AllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);
724 ASSERT (ModeToken != NULL);
725
726 //
727 // Determin which mode should be the first entry in menu
728 //
729 GetConsoleOutMode (CallbackData);
730
731 //
732 // Build text mode options
733 //
734 for (Mode = 0; Mode < MaxMode; Mode++) {
735 Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);
736 if (EFI_ERROR (Status)) {
737 continue;
738 }
739
740 //
741 // Build mode string Column x Row
742 //
743 UnicodeValueToStringS (ModeString, sizeof (ModeString), 0, Col, 0);
744 PStr = &ModeString[0];
745 StrnCatS (PStr, ARRAY_SIZE (ModeString), L" x ", StrLen (L" x ") + 1);
746 PStr = PStr + StrLen (PStr);
748 PStr,
749 sizeof (ModeString) - ((UINTN)PStr - (UINTN)&ModeString[0]),
750 0,
751 Row,
752 0
753 );
754
755 ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL);
756
757 if (Mode == CallbackData->BmmFakeNvData.ConsoleOutMode) {
759 OptionsOpCodeHandle,
760 ModeToken[Index],
761 EFI_IFR_OPTION_DEFAULT,
762 EFI_IFR_TYPE_NUM_SIZE_16,
763 (UINT16)Mode
764 );
765 } else {
767 OptionsOpCodeHandle,
768 ModeToken[Index],
769 0,
770 EFI_IFR_TYPE_NUM_SIZE_16,
771 (UINT16)Mode
772 );
773 }
774
775 Index++;
776 }
777
779 mStartOpCodeHandle,
780 (EFI_QUESTION_ID)CON_MODE_QUESTION_ID,
781 VARSTORE_ID_BOOT_MAINT,
782 CON_MODE_VAR_OFFSET,
783 STRING_TOKEN (STR_CON_MODE_SETUP),
784 STRING_TOKEN (STR_CON_MODE_SETUP),
785 EFI_IFR_FLAG_RESET_REQUIRED,
786 EFI_IFR_NUMERIC_SIZE_2,
787 OptionsOpCodeHandle,
788 NULL
789 );
790
791 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
792 FreePool (ModeToken);
793
794 UpdatePageEnd (CallbackData);
795}
796
804VOID
806 IN BMM_CALLBACK_DATA *CallbackData
807 )
808{
809 UINT8 Index;
810 UINT8 CheckFlags;
811 BM_MENU_ENTRY *NewMenuEntry;
812 VOID *OptionsOpCodeHandle;
813 UINTN CurrentTerminal;
814
815 CallbackData->BmmAskSaveOrNot = TRUE;
816
817 UpdatePageStart (CallbackData);
818
819 CurrentTerminal = CallbackData->CurrentTerminal;
820 NewMenuEntry = BOpt_GetMenuEntry (
821 &TerminalMenu,
822 CurrentTerminal
823 );
824
825 if (NewMenuEntry == NULL) {
826 return;
827 }
828
829 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
830 ASSERT (OptionsOpCodeHandle != NULL);
831
832 for (Index = 0; Index < sizeof (BaudRateList) / sizeof (BaudRateList[0]); Index++) {
833 CheckFlags = 0;
834 if (BaudRateList[Index].Value == 115200) {
835 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
836 }
837
839 OptionsOpCodeHandle,
840 BaudRateList[Index].StringToken,
841 CheckFlags,
842 EFI_IFR_TYPE_NUM_SIZE_8,
843 Index
844 );
845 }
846
848 mStartOpCodeHandle,
849 (EFI_QUESTION_ID)(COM_BAUD_RATE_QUESTION_ID + CurrentTerminal),
850 VARSTORE_ID_BOOT_MAINT,
851 (UINT16)(COM_BAUD_RATE_VAR_OFFSET + CurrentTerminal),
852 STRING_TOKEN (STR_COM_BAUD_RATE),
853 STRING_TOKEN (STR_COM_BAUD_RATE),
854 EFI_IFR_FLAG_CALLBACK,
855 EFI_IFR_NUMERIC_SIZE_1,
856 OptionsOpCodeHandle,
857 NULL
858 );
859
860 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
861 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
862 ASSERT (OptionsOpCodeHandle != NULL);
863
864 for (Index = 0; Index < ARRAY_SIZE (DataBitsList); Index++) {
865 CheckFlags = 0;
866
867 if (DataBitsList[Index].Value == 8) {
868 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
869 }
870
872 OptionsOpCodeHandle,
873 DataBitsList[Index].StringToken,
874 CheckFlags,
875 EFI_IFR_TYPE_NUM_SIZE_8,
876 Index
877 );
878 }
879
881 mStartOpCodeHandle,
882 (EFI_QUESTION_ID)(COM_DATA_RATE_QUESTION_ID + CurrentTerminal),
883 VARSTORE_ID_BOOT_MAINT,
884 (UINT16)(COM_DATA_RATE_VAR_OFFSET + CurrentTerminal),
885 STRING_TOKEN (STR_COM_DATA_BITS),
886 STRING_TOKEN (STR_COM_DATA_BITS),
887 EFI_IFR_FLAG_CALLBACK,
888 EFI_IFR_NUMERIC_SIZE_1,
889 OptionsOpCodeHandle,
890 NULL
891 );
892
893 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
894 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
895 ASSERT (OptionsOpCodeHandle != NULL);
896
897 for (Index = 0; Index < ARRAY_SIZE (ParityList); Index++) {
898 CheckFlags = 0;
899 if (ParityList[Index].Value == NoParity) {
900 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
901 }
902
904 OptionsOpCodeHandle,
905 ParityList[Index].StringToken,
906 CheckFlags,
907 EFI_IFR_TYPE_NUM_SIZE_8,
908 Index
909 );
910 }
911
913 mStartOpCodeHandle,
914 (EFI_QUESTION_ID)(COM_PARITY_QUESTION_ID + CurrentTerminal),
915 VARSTORE_ID_BOOT_MAINT,
916 (UINT16)(COM_PARITY_VAR_OFFSET + CurrentTerminal),
917 STRING_TOKEN (STR_COM_PARITY),
918 STRING_TOKEN (STR_COM_PARITY),
919 EFI_IFR_FLAG_CALLBACK,
920 EFI_IFR_NUMERIC_SIZE_1,
921 OptionsOpCodeHandle,
922 NULL
923 );
924
925 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
926 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
927 ASSERT (OptionsOpCodeHandle != NULL);
928
929 for (Index = 0; Index < ARRAY_SIZE (StopBitsList); Index++) {
930 CheckFlags = 0;
931 if (StopBitsList[Index].Value == OneStopBit) {
932 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
933 }
934
936 OptionsOpCodeHandle,
937 StopBitsList[Index].StringToken,
938 CheckFlags,
939 EFI_IFR_TYPE_NUM_SIZE_8,
940 Index
941 );
942 }
943
945 mStartOpCodeHandle,
946 (EFI_QUESTION_ID)(COM_STOP_BITS_QUESTION_ID + CurrentTerminal),
947 VARSTORE_ID_BOOT_MAINT,
948 (UINT16)(COM_STOP_BITS_VAR_OFFSET + CurrentTerminal),
949 STRING_TOKEN (STR_COM_STOP_BITS),
950 STRING_TOKEN (STR_COM_STOP_BITS),
951 EFI_IFR_FLAG_CALLBACK,
952 EFI_IFR_NUMERIC_SIZE_1,
953 OptionsOpCodeHandle,
954 NULL
955 );
956
957 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
958 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
959 ASSERT (OptionsOpCodeHandle != NULL);
960
961 for (Index = 0; Index < ARRAY_SIZE (TerminalType); Index++) {
962 CheckFlags = 0;
963 if (Index == 0) {
964 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
965 }
966
968 OptionsOpCodeHandle,
969 (EFI_STRING_ID)TerminalType[Index],
970 CheckFlags,
971 EFI_IFR_TYPE_NUM_SIZE_8,
972 Index
973 );
974 }
975
977 mStartOpCodeHandle,
978 (EFI_QUESTION_ID)(COM_TERMINAL_QUESTION_ID + CurrentTerminal),
979 VARSTORE_ID_BOOT_MAINT,
980 (UINT16)(COM_TERMINAL_VAR_OFFSET + CurrentTerminal),
981 STRING_TOKEN (STR_COM_TERMI_TYPE),
982 STRING_TOKEN (STR_COM_TERMI_TYPE),
983 EFI_IFR_FLAG_CALLBACK,
984 EFI_IFR_NUMERIC_SIZE_1,
985 OptionsOpCodeHandle,
986 NULL
987 );
988
989 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
990 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
991 ASSERT (OptionsOpCodeHandle != NULL);
992
993 for (Index = 0; Index < ARRAY_SIZE (mFlowControlType); Index++) {
994 CheckFlags = 0;
995 if (Index == 0) {
996 CheckFlags |= EFI_IFR_OPTION_DEFAULT;
997 }
998
1000 OptionsOpCodeHandle,
1001 (EFI_STRING_ID)mFlowControlType[Index],
1002 CheckFlags,
1003 EFI_IFR_TYPE_NUM_SIZE_8,
1004 mFlowControlValue[Index]
1005 );
1006 }
1007
1009 mStartOpCodeHandle,
1010 (EFI_QUESTION_ID)(COM_FLOWCONTROL_QUESTION_ID + CurrentTerminal),
1011 VARSTORE_ID_BOOT_MAINT,
1012 (UINT16)(COM_FLOWCONTROL_VAR_OFFSET + CurrentTerminal),
1013 STRING_TOKEN (STR_COM_FLOW_CONTROL),
1014 STRING_TOKEN (STR_COM_FLOW_CONTROL),
1015 EFI_IFR_FLAG_CALLBACK,
1016 EFI_IFR_NUMERIC_SIZE_1,
1017 OptionsOpCodeHandle,
1018 NULL
1019 );
1020
1021 HiiFreeOpCodeHandle (OptionsOpCodeHandle);
1022
1023 UpdatePageEnd (CallbackData);
1024}
1025
1034VOID
1036 IN BMM_CALLBACK_DATA *CallbackData,
1037 IN EFI_FORM_ID FormId,
1038 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
1039 )
1040{
1041 CHAR16 *String;
1042 EFI_STRING_ID StringToken;
1043
1044 String = NULL;
1045
1046 if (DevicePath != NULL) {
1047 String = ExtractFileNameFromDevicePath (DevicePath);
1048 }
1049
1050 if (String == NULL) {
1051 String = HiiGetString (CallbackData->BmmHiiHandle, STRING_TOKEN (STR_NULL_STRING), NULL);
1052 ASSERT (String != NULL);
1053 }
1054
1055 StringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);
1056 FreePool (String);
1057
1058 if (FormId == FORM_BOOT_ADD_ID) {
1059 if (!CallbackData->BmmFakeNvData.BootOptionChanged) {
1060 ZeroMem (CallbackData->BmmFakeNvData.BootOptionalData, sizeof (CallbackData->BmmFakeNvData.BootOptionalData));
1061 ZeroMem (CallbackData->BmmFakeNvData.BootDescriptionData, sizeof (CallbackData->BmmFakeNvData.BootDescriptionData));
1062 ZeroMem (CallbackData->BmmOldFakeNVData.BootOptionalData, sizeof (CallbackData->BmmOldFakeNVData.BootOptionalData));
1063 ZeroMem (CallbackData->BmmOldFakeNVData.BootDescriptionData, sizeof (CallbackData->BmmOldFakeNVData.BootDescriptionData));
1064 }
1065 } else if (FormId == FORM_DRV_ADD_FILE_ID) {
1066 if (!CallbackData->BmmFakeNvData.DriverOptionChanged) {
1067 ZeroMem (CallbackData->BmmFakeNvData.DriverOptionalData, sizeof (CallbackData->BmmFakeNvData.DriverOptionalData));
1068 ZeroMem (CallbackData->BmmFakeNvData.DriverDescriptionData, sizeof (CallbackData->BmmFakeNvData.DriverDescriptionData));
1069 ZeroMem (CallbackData->BmmOldFakeNVData.DriverOptionalData, sizeof (CallbackData->BmmOldFakeNVData.DriverOptionalData));
1070 ZeroMem (CallbackData->BmmOldFakeNVData.DriverDescriptionData, sizeof (CallbackData->BmmOldFakeNVData.DriverDescriptionData));
1071 }
1072 }
1073
1075 mStartLabel->Number = FormId;
1076
1078 mStartOpCodeHandle,
1079 StringToken,
1080 0,
1081 0,
1082 0
1083 );
1084
1086 CallbackData->BmmHiiHandle,
1087 &mBootMaintGuid,
1088 FormId,
1089 mStartOpCodeHandle, // Label FormId
1090 mEndOpCodeHandle // LABEL_END
1091 );
1092}
1093
1102VOID
1104 IN UINT16 UpdatePageId,
1105 IN BMM_CALLBACK_DATA *CallbackData
1106 )
1107{
1108 CleanUpPage (UpdatePageId, CallbackData);
1109 switch (UpdatePageId) {
1110 case FORM_CON_IN_ID:
1112 break;
1113
1114 case FORM_CON_OUT_ID:
1116 break;
1117
1118 case FORM_CON_ERR_ID:
1120 break;
1121
1122 case FORM_BOOT_CHG_ID:
1124 break;
1125
1126 case FORM_DRV_CHG_ID:
1128 break;
1129
1130 default:
1131 break;
1132 }
1133}
1134
1142VOID
1144 BMM_CALLBACK_DATA *Private,
1145 UINT16 NewPageId
1146 )
1147{
1148 if ((NewPageId < FILE_OPTION_OFFSET) && (NewPageId >= HANDLE_OPTION_OFFSET)) {
1149 //
1150 // If we select a handle to add driver option, advance to the add handle description page.
1151 //
1152 NewPageId = FORM_DRV_ADD_HANDLE_DESC_ID;
1153 } else if ((NewPageId == KEY_VALUE_SAVE_AND_EXIT) || (NewPageId == KEY_VALUE_NO_SAVE_AND_EXIT)) {
1154 //
1155 // Return to main page after "Save Changes" or "Discard Changes".
1156 //
1157 NewPageId = FORM_MAIN_ID;
1158 } else if ((NewPageId >= TERMINAL_OPTION_OFFSET) && (NewPageId < CONSOLE_OPTION_OFFSET)) {
1159 NewPageId = FORM_CON_COM_SETUP_ID;
1160 }
1161
1162 if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {
1163 Private->BmmPreviousPageId = Private->BmmCurrentPageId;
1164 Private->BmmCurrentPageId = NewPageId;
1165 }
1166}
UINT64 UINTN
RETURN_STATUS EFIAPI StrnCatS(IN OUT CHAR16 *Destination, IN UINTN DestMax, IN CONST CHAR16 *Source, IN UINTN Length)
Definition: SafeString.c:507
UINTN EFIAPI StrLen(IN CONST CHAR16 *String)
Definition: String.c:30
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
CHAR16 * ExtractFileNameFromDevicePath(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
BM_MENU_ENTRY * BOpt_GetMenuEntry(BM_MENU_OPTION *MenuOption, UINTN MenuNumber)
Definition: BootOption.c:229
UINT16 TerminalType[9]
Definition: Data.c:19
BM_MENU_OPTION DriverMenu
Definition: Data.c:92
COM_ATTR DataBitsList[4]
Definition: Data.c:189
COM_ATTR BaudRateList[19]
Definition: Data.c:107
COM_ATTR ParityList[5]
Definition: Data.c:211
VOID GetConsoleOutMode(IN BMM_CALLBACK_DATA *CallbackData)
UINT16 mFlowControlType[2]
Definition: Data.c:34
BM_MENU_OPTION ConsoleErrMenu
Definition: Data.c:65
BM_MENU_OPTION DriverOptionMenu
Definition: Data.c:83
VOID GetBootOrder(IN BMM_CALLBACK_DATA *CallbackData)
Definition: BootOption.c:811
BM_MENU_OPTION ConsoleOutMenu
Definition: Data.c:56
BM_MENU_OPTION BootOptionMenu
Definition: Data.c:74
VOID GetDriverOrder(IN BMM_CALLBACK_DATA *CallbackData)
Definition: BootOption.c:858
BM_MENU_OPTION ConsoleInpMenu
Definition: Data.c:47
COM_ATTR StopBitsList[3]
Definition: Data.c:237
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
UINT8 *EFIAPI HiiCreateSubTitleOpCode(IN VOID *OpCodeHandle, IN EFI_STRING_ID Prompt, IN EFI_STRING_ID Help, IN UINT8 Flags, IN UINT8 Scope)
Definition: HiiLib.c:3504
UINT8 *EFIAPI HiiCreateGotoOpCode(IN VOID *OpCodeHandle, IN EFI_FORM_ID FormId, IN EFI_STRING_ID Prompt, IN EFI_STRING_ID Help, IN UINT8 QuestionFlags, IN EFI_QUESTION_ID QuestionId)
Definition: HiiLib.c:3551
VOID *EFIAPI HiiAllocateOpCodeHandle(VOID)
Definition: HiiLib.c:3051
VOID EFIAPI HiiFreeOpCodeHandle(VOID *OpCodeHandle)
Definition: HiiLib.c:3085
UINT8 *EFIAPI HiiCreateGuidOpCode(IN VOID *OpCodeHandle, IN CONST EFI_GUID *Guid, IN CONST VOID *GuidOpCode OPTIONAL, IN UINTN OpCodeSize)
Definition: HiiLib.c:3411
UINT8 *EFIAPI HiiCreateStringOpCode(IN VOID *OpCodeHandle, IN EFI_QUESTION_ID QuestionId, IN EFI_VARSTORE_ID VarStoreId, IN UINT16 VarOffset, IN EFI_STRING_ID Prompt, IN EFI_STRING_ID Help, IN UINT8 QuestionFlags, IN UINT8 StringFlags, IN UINT8 MinSize, IN UINT8 MaxSize, IN VOID *DefaultsOpCodeHandle OPTIONAL)
Definition: HiiLib.c:3841
UINT8 *EFIAPI HiiCreateCheckBoxOpCode(IN VOID *OpCodeHandle, IN EFI_QUESTION_ID QuestionId, IN EFI_VARSTORE_ID VarStoreId, IN UINT16 VarOffset, IN EFI_STRING_ID Prompt, IN EFI_STRING_ID Help, IN UINT8 QuestionFlags, IN UINT8 CheckBoxFlags, IN VOID *DefaultsOpCodeHandle OPTIONAL)
Definition: HiiLib.c:3675
EFI_STRING EFIAPI HiiGetString(IN EFI_HII_HANDLE HiiHandle, IN EFI_STRING_ID StringId, IN CONST CHAR8 *Language OPTIONAL)
Definition: HiiString.c:211
UINT8 *EFIAPI HiiCreateOneOfOptionOpCode(IN VOID *OpCodeHandle, IN UINT16 StringId, IN UINT8 Flags, IN UINT8 Type, IN UINT64 Value)
Definition: HiiLib.c:3329
EFI_STATUS EFIAPI HiiUpdateForm(IN EFI_HII_HANDLE HiiHandle, IN EFI_GUID *FormSetGuid OPTIONAL, IN EFI_FORM_ID FormId, IN VOID *StartOpCodeHandle, IN VOID *EndOpCodeHandle OPTIONAL)
Definition: HiiLib.c:4410
UINT8 *EFIAPI HiiCreateOneOfOpCode(IN VOID *OpCodeHandle, IN EFI_QUESTION_ID QuestionId, IN EFI_VARSTORE_ID VarStoreId, IN UINT16 VarOffset, IN EFI_STRING_ID Prompt, IN EFI_STRING_ID Help, IN UINT8 QuestionFlags, IN UINT8 OneOfFlags, IN VOID *OptionsOpCodeHandle, IN VOID *DefaultsOpCodeHandle OPTIONAL)
Definition: HiiLib.c:3908
EFI_STRING_ID EFIAPI HiiSetString(IN EFI_HII_HANDLE HiiHandle, IN EFI_STRING_ID StringId OPTIONAL, IN CONST EFI_STRING String, IN CONST CHAR8 *SupportedLanguages OPTIONAL)
Definition: HiiString.c:52
UINT8 *EFIAPI HiiCreateActionOpCode(IN VOID *OpCodeHandle, IN EFI_QUESTION_ID QuestionId, IN EFI_STRING_ID Prompt, IN EFI_STRING_ID Help, IN UINT8 QuestionFlags, IN EFI_STRING_ID QuestionConfig)
Definition: HiiLib.c:3461
UINT8 *EFIAPI HiiCreateOrderedListOpCode(IN VOID *OpCodeHandle, IN EFI_QUESTION_ID QuestionId, IN EFI_VARSTORE_ID VarStoreId, IN UINT16 VarOffset, IN EFI_STRING_ID Prompt, IN EFI_STRING_ID Help, IN UINT8 QuestionFlags, IN UINT8 OrderedListFlags, IN UINT8 DataType, IN UINT8 MaxContainers, IN VOID *OptionsOpCodeHandle, IN VOID *DefaultsOpCodeHandle OPTIONAL)
Definition: HiiLib.c:3979
#define EFI_IFR_EXTEND_OP_LABEL
Definition: MdeModuleHii.h:33
RETURN_STATUS EFIAPI UnicodeValueToStringS(IN OUT CHAR16 *Buffer, IN UINTN BufferSize, IN UINTN Flags, IN INT64 Value, IN UINTN Width)
Definition: PrintLib.c:652
#define NULL
Definition: Base.h:319
#define TRUE
Definition: Base.h:301
#define FALSE
Definition: Base.h:307
#define ARRAY_SIZE(Array)
Definition: Base.h:1393
#define IN
Definition: Base.h:279
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
EFI_SYSTEM_TABLE * gST
#define STRING_TOKEN(t)
VOID UpdateConModePage(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:678
VOID UpdatePageEnd(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:110
VOID CleanUpPage(IN UINT16 LabelId, IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:165
VOID UpdateConCOMPage(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:192
VOID UpdatePageStart(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:79
VOID UpdateOrderPage(IN UINT16 UpdatePageId, IN BM_MENU_OPTION *OptionMenu, IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:567
VOID UpdateDrvAddHandlePage(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:283
VOID RefreshUpdateData(VOID)
Definition: UpdatePage.c:48
VOID UpdateBootDelPage(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:227
VOID CreateUpdateData(VOID)
Definition: UpdatePage.c:16
VOID UpdateConsolePage(IN UINT16 UpdatePageId, IN BM_MENU_OPTION *ConsoleMenu, IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:445
VOID UpdatePageBody(IN UINT16 UpdatePageId, IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:1103
VOID UpdateTerminalPage(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:805
VOID UpdateDriverAddHandleDescPage(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:372
VOID UpdatePageId(BMM_CALLBACK_DATA *Private, UINT16 NewPageId)
Definition: UpdatePage.c:1143
VOID UpdateDrvDelPage(IN BMM_CALLBACK_DATA *CallbackData)
Definition: UpdatePage.c:318
VOID UpdateOptionPage(IN BMM_CALLBACK_DATA *CallbackData, IN EFI_FORM_ID FormId, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
Definition: UpdatePage.c:1035
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL * ConOut
Definition: UefiSpec.h:2064