]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Library/BootMaintenanceManagerUiLib/UpdatePage.c
MdeModulePkg/BMMUI: Remove the incorrect and useless codes
[mirror_edk2.git] / MdeModulePkg / Library / BootMaintenanceManagerUiLib / UpdatePage.c
CommitLineData
4af04335
DB
1/** @file\r
2Dynamically update the pages.\r
3\r
a91f1a0e 4Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>\r
4af04335
DB
5This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "BootMaintenanceManager.h"\r
16\r
17/**\r
18 Create the global UpdateData structure.\r
19\r
20**/\r
21VOID\r
22CreateUpdateData (\r
23 VOID\r
24 )\r
25{\r
26 //\r
27 // Init OpCode Handle and Allocate space for creation of Buffer\r
28 //\r
29 mStartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
30 ASSERT (mStartOpCodeHandle != NULL);\r
31 \r
32 mEndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
33 ASSERT (mEndOpCodeHandle != NULL);\r
34 \r
35 //\r
36 // Create Hii Extend Label OpCode as the start opcode\r
37 //\r
38 mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
39 mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
40 \r
41 //\r
42 // Create Hii Extend Label OpCode as the end opcode\r
43 //\r
44 mEndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mEndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
45 mEndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
46 mEndLabel->Number = LABEL_END;\r
47}\r
48\r
49/**\r
50 Refresh the global UpdateData structure.\r
51\r
52**/\r
53VOID\r
54RefreshUpdateData (\r
55 VOID\r
56 )\r
57{\r
58 //\r
59 // Free current updated date\r
60 // \r
61 if (mStartOpCodeHandle != NULL) {\r
62 HiiFreeOpCodeHandle (mStartOpCodeHandle);\r
63 }\r
64\r
65 //\r
66 // Create new OpCode Handle\r
67 //\r
68 mStartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
69\r
70 //\r
71 // Create Hii Extend Label OpCode as the start opcode\r
72 //\r
73 mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
74 mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
75\r
76}\r
77\r
78/**\r
79 Add a "Go back to main page" tag in front of the form when there are no\r
80 "Apply changes" and "Discard changes" tags in the end of the form.\r
81 \r
82 @param CallbackData The BMM context data.\r
83\r
84**/\r
85VOID\r
86UpdatePageStart (\r
87 IN BMM_CALLBACK_DATA *CallbackData\r
88 )\r
89{\r
90 RefreshUpdateData ();\r
91 mStartLabel->Number = CallbackData->BmmCurrentPageId;\r
92\r
93 if (!(CallbackData->BmmAskSaveOrNot)) {\r
94 //\r
95 // Add a "Go back to main page" tag in front of the form when there are no\r
96 // "Apply changes" and "Discard changes" tags in the end of the form.\r
97 //\r
98 HiiCreateGotoOpCode (\r
99 mStartOpCodeHandle,\r
100 FORM_MAIN_ID,\r
101 STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
102 STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
103 0,\r
104 FORM_MAIN_ID\r
105 );\r
106 }\r
107}\r
108\r
109/**\r
110 Create the "Apply changes" and "Discard changes" tags. And\r
111 ensure user can return to the main page.\r
112\r
113 @param CallbackData The BMM context data.\r
114\r
115**/\r
116VOID\r
117UpdatePageEnd (\r
118 IN BMM_CALLBACK_DATA *CallbackData\r
119 )\r
120{\r
121 //\r
122 // Create the "Apply changes" and "Discard changes" tags.\r
123 //\r
124 if (CallbackData->BmmAskSaveOrNot) {\r
125 HiiCreateSubTitleOpCode (\r
126 mStartOpCodeHandle,\r
127 STRING_TOKEN (STR_NULL_STRING),\r
128 0,\r
129 0,\r
130 0\r
131 );\r
132\r
133 HiiCreateActionOpCode (\r
134 mStartOpCodeHandle,\r
135 KEY_VALUE_SAVE_AND_EXIT,\r
136 STRING_TOKEN (STR_SAVE_AND_EXIT),\r
137 STRING_TOKEN (STR_NULL_STRING),\r
138 EFI_IFR_FLAG_CALLBACK,\r
139 0\r
140 );\r
141 }\r
142\r
143 //\r
144 // Ensure user can return to the main page.\r
145 //\r
146 HiiCreateActionOpCode (\r
147 mStartOpCodeHandle,\r
148 KEY_VALUE_NO_SAVE_AND_EXIT,\r
149 STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
150 STRING_TOKEN (STR_NULL_STRING),\r
151 EFI_IFR_FLAG_CALLBACK,\r
152 0\r
153 );\r
154\r
155 HiiUpdateForm (\r
156 CallbackData->BmmHiiHandle,\r
157 &mBootMaintGuid,\r
158 CallbackData->BmmCurrentPageId,\r
159 mStartOpCodeHandle, // Label CallbackData->BmmCurrentPageId\r
160 mEndOpCodeHandle // LABEL_END\r
161 );\r
162}\r
163\r
164/**\r
165 Clean up the dynamic opcode at label and form specified by both LabelId. \r
166\r
167 @param LabelId It is both the Form ID and Label ID for opcode deletion.\r
168 @param CallbackData The BMM context data.\r
169\r
170**/\r
171VOID\r
172CleanUpPage (\r
173 IN UINT16 LabelId,\r
174 IN BMM_CALLBACK_DATA *CallbackData\r
175 )\r
176{\r
177 RefreshUpdateData ();\r
178\r
179 //\r
180 // Remove all op-codes from dynamic page\r
181 //\r
182 mStartLabel->Number = LabelId;\r
183 HiiUpdateForm (\r
184 CallbackData->BmmHiiHandle,\r
185 &mBootMaintGuid,\r
186 LabelId,\r
187 mStartOpCodeHandle, // Label LabelId\r
188 mEndOpCodeHandle // LABEL_END\r
189 );\r
190}\r
191\r
192/**\r
193 Create a list of Goto Opcode for all terminal devices logged\r
194 by TerminaMenu. This list will be inserted to form FORM_CON_COM_SETUP_ID.\r
195\r
196 @param CallbackData The BMM context data.\r
197**/\r
198VOID\r
199UpdateConCOMPage (\r
200 IN BMM_CALLBACK_DATA *CallbackData\r
201 )\r
202{\r
203 BM_MENU_ENTRY *NewMenuEntry;\r
204 UINT16 Index;\r
205\r
206 CallbackData->BmmAskSaveOrNot = TRUE;\r
207\r
208 UpdatePageStart (CallbackData);\r
209\r
210 for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
211 NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
212\r
213 HiiCreateGotoOpCode (\r
214 mStartOpCodeHandle,\r
215 FORM_CON_COM_SETUP_ID,\r
216 NewMenuEntry->DisplayStringToken,\r
217 STRING_TOKEN (STR_NULL_STRING),\r
218 EFI_IFR_FLAG_CALLBACK,\r
219 (UINT16) (TERMINAL_OPTION_OFFSET + Index)\r
220 );\r
221 }\r
222\r
223 UpdatePageEnd (CallbackData);\r
224}\r
225\r
226\r
227/**\r
228 Create a list of boot option from global BootOptionMenu. It\r
229 allow user to delete the boot option.\r
230\r
231 @param CallbackData The BMM context data.\r
232\r
233**/\r
234VOID\r
235UpdateBootDelPage (\r
236 IN BMM_CALLBACK_DATA *CallbackData\r
237 )\r
238{\r
239 BM_MENU_ENTRY *NewMenuEntry;\r
240 BM_LOAD_CONTEXT *NewLoadContext;\r
241 UINT16 Index;\r
242\r
243 CallbackData->BmmAskSaveOrNot = TRUE;\r
244\r
245 UpdatePageStart (CallbackData);\r
246\r
247 ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.BootOptionDel) / sizeof (CallbackData->BmmFakeNvData.BootOptionDel[0])));\r
248 for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
249 NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
250 NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
251 if (NewLoadContext->IsLegacy) {\r
252 continue;\r
253 }\r
254\r
255 NewLoadContext->Deleted = FALSE;\r
256\r
257 if (CallbackData->BmmFakeNvData.BootOptionDel[Index] && !CallbackData->BmmFakeNvData.BootOptionDelMark[Index]) {\r
258 //\r
259 // CallbackData->BmmFakeNvData.BootOptionDel[Index] == TRUE means browser knows this boot option is selected\r
260 // CallbackData->BmmFakeNvData.BootOptionDelMark[Index] = FALSE means BDS knows the selected boot option has\r
261 // deleted, browser maintains old useless info. So clear this info here, and later update this info to browser\r
262 // through HiiSetBrowserData function.\r
263 //\r
264 CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;\r
265 }\r
266 \r
267 HiiCreateCheckBoxOpCode (\r
268 mStartOpCodeHandle,\r
269 (EFI_QUESTION_ID) (BOOT_OPTION_DEL_QUESTION_ID + Index),\r
270 VARSTORE_ID_BOOT_MAINT,\r
271 (UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index),\r
272 NewMenuEntry->DisplayStringToken,\r
273 NewMenuEntry->HelpStringToken,\r
274 EFI_IFR_FLAG_CALLBACK,\r
275 0,\r
276 NULL\r
277 );\r
278 }\r
279 UpdatePageEnd (CallbackData);\r
280}\r
281\r
282/**\r
283 Create a lit of driver option from global DriverMenu.\r
284\r
285 @param CallbackData The BMM context data.\r
286\r
287**/\r
288VOID\r
289UpdateDrvAddHandlePage (\r
290 IN BMM_CALLBACK_DATA *CallbackData\r
291 )\r
292{\r
293 BM_MENU_ENTRY *NewMenuEntry;\r
294 UINT16 Index;\r
295\r
296 CallbackData->BmmAskSaveOrNot = FALSE;\r
297\r
298 UpdatePageStart (CallbackData);\r
299\r
300 for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {\r
301 NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);\r
302\r
303 HiiCreateGotoOpCode (\r
304 mStartOpCodeHandle,\r
305 FORM_DRV_ADD_HANDLE_DESC_ID,\r
306 NewMenuEntry->DisplayStringToken,\r
307 STRING_TOKEN (STR_NULL_STRING),\r
308 EFI_IFR_FLAG_CALLBACK,\r
309 (UINT16) (HANDLE_OPTION_OFFSET + Index)\r
310 );\r
311 }\r
312\r
313 UpdatePageEnd (CallbackData);\r
314}\r
315\r
316/**\r
317 Create a lit of driver option from global DriverOptionMenu. It\r
318 allow user to delete the driver option.\r
319\r
320 @param CallbackData The BMM context data.\r
321\r
322**/\r
323VOID\r
324UpdateDrvDelPage (\r
325 IN BMM_CALLBACK_DATA *CallbackData\r
326 )\r
327{\r
328 BM_MENU_ENTRY *NewMenuEntry;\r
329 BM_LOAD_CONTEXT *NewLoadContext;\r
330 UINT16 Index;\r
331\r
332 CallbackData->BmmAskSaveOrNot = TRUE;\r
333\r
334 UpdatePageStart (CallbackData);\r
335\r
336 ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.DriverOptionDel) / sizeof (CallbackData->BmmFakeNvData.DriverOptionDel[0])));\r
337 for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
338 NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);\r
339\r
340 NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
341 NewLoadContext->Deleted = FALSE;\r
342\r
343 if (CallbackData->BmmFakeNvData.DriverOptionDel[Index] && !CallbackData->BmmFakeNvData.DriverOptionDelMark[Index]) {\r
344 //\r
345 // CallbackData->BmmFakeNvData.BootOptionDel[Index] == TRUE means browser knows this boot option is selected\r
346 // CallbackData->BmmFakeNvData.BootOptionDelMark[Index] = FALSE means BDS knows the selected boot option has\r
347 // deleted, browser maintains old useless info. So clear this info here, and later update this info to browser\r
348 // through HiiSetBrowserData function.\r
349 //\r
350 CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;\r
351 }\r
352 HiiCreateCheckBoxOpCode (\r
353 mStartOpCodeHandle,\r
354 (EFI_QUESTION_ID) (DRIVER_OPTION_DEL_QUESTION_ID + Index),\r
355 VARSTORE_ID_BOOT_MAINT,\r
356 (UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index),\r
357 NewMenuEntry->DisplayStringToken,\r
358 NewMenuEntry->HelpStringToken,\r
359 EFI_IFR_FLAG_CALLBACK,\r
360 0,\r
361 NULL\r
362 );\r
363 }\r
364\r
365 UpdatePageEnd (CallbackData);\r
366}\r
367\r
368/**\r
369 Prepare the page to allow user to add description for \r
370 a Driver Option.\r
371\r
372 @param CallbackData The BMM context data.\r
373\r
374**/\r
375VOID\r
376UpdateDriverAddHandleDescPage (\r
377 IN BMM_CALLBACK_DATA *CallbackData\r
378 )\r
379{\r
380 BM_MENU_ENTRY *NewMenuEntry;\r
381\r
382 CallbackData->BmmFakeNvData.DriverAddActive = 0x01;\r
383 CallbackData->BmmFakeNvData.DriverAddForceReconnect = 0x00;\r
384 CallbackData->BmmAskSaveOrNot = TRUE;\r
385 NewMenuEntry = CallbackData->MenuEntry;\r
386\r
387 UpdatePageStart (CallbackData);\r
388\r
389 HiiCreateSubTitleOpCode (\r
390 mStartOpCodeHandle,\r
391 NewMenuEntry->DisplayStringToken,\r
392 0,\r
393 0,\r
394 0\r
395 );\r
396\r
397 HiiCreateStringOpCode (\r
398 mStartOpCodeHandle,\r
399 (EFI_QUESTION_ID) DRV_ADD_HANDLE_DESC_QUESTION_ID,\r
400 VARSTORE_ID_BOOT_MAINT,\r
401 DRV_ADD_HANDLE_DESC_VAR_OFFSET,\r
402 STRING_TOKEN (STR_LOAD_OPTION_DESC),\r
403 STRING_TOKEN (STR_NULL_STRING),\r
404 0,\r
405 0,\r
406 6,\r
407 75,\r
408 NULL\r
409 );\r
410\r
411 HiiCreateCheckBoxOpCode (\r
412 mStartOpCodeHandle,\r
413 (EFI_QUESTION_ID) DRV_ADD_RECON_QUESTION_ID,\r
414 VARSTORE_ID_BOOT_MAINT,\r
415 DRV_ADD_RECON_VAR_OFFSET,\r
416 STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
417 STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
418 0,\r
419 0,\r
420 NULL\r
421 );\r
422\r
423 HiiCreateStringOpCode (\r
424 mStartOpCodeHandle,\r
425 (EFI_QUESTION_ID) DRIVER_ADD_OPTION_QUESTION_ID,\r
426 VARSTORE_ID_BOOT_MAINT,\r
427 DRIVER_ADD_OPTION_VAR_OFFSET,\r
428 STRING_TOKEN (STR_OPTIONAL_DATA),\r
429 STRING_TOKEN (STR_NULL_STRING),\r
430 0,\r
431 0,\r
432 6,\r
433 75,\r
434 NULL\r
435 );\r
436\r
437 UpdatePageEnd (CallbackData);\r
438}\r
439\r
440/**\r
441 Update console page.\r
442\r
443 @param UpdatePageId The form ID to be updated.\r
444 @param ConsoleMenu The console menu list.\r
445 @param CallbackData The BMM context data.\r
446\r
447**/\r
448VOID\r
449UpdateConsolePage (\r
450 IN UINT16 UpdatePageId,\r
451 IN BM_MENU_OPTION *ConsoleMenu,\r
452 IN BMM_CALLBACK_DATA *CallbackData\r
453 )\r
454{\r
455 BM_MENU_ENTRY *NewMenuEntry;\r
456 BM_CONSOLE_CONTEXT *NewConsoleContext;\r
457 BM_TERMINAL_CONTEXT *NewTerminalContext;\r
458 UINT16 Index;\r
459 UINT16 Index2;\r
460 UINT8 CheckFlags;\r
461 UINT8 *ConsoleCheck;\r
4af04335
DB
462 EFI_QUESTION_ID QuestionIdBase;\r
463 UINT16 VariableOffsetBase;\r
464\r
465 CallbackData->BmmAskSaveOrNot = TRUE;\r
466\r
467 UpdatePageStart (CallbackData);\r
468\r
469 ConsoleCheck = NULL;\r
4af04335
DB
470 QuestionIdBase = 0;\r
471 VariableOffsetBase = 0;\r
4af04335
DB
472\r
473 switch (UpdatePageId) {\r
474 case FORM_CON_IN_ID:\r
475 ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];\r
4af04335
DB
476 QuestionIdBase = CON_IN_DEVICE_QUESTION_ID;\r
477 VariableOffsetBase = CON_IN_DEVICE_VAR_OFFSET;\r
478 break;\r
479\r
480 case FORM_CON_OUT_ID:\r
481 ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleOutCheck[0];\r
4af04335
DB
482 QuestionIdBase = CON_OUT_DEVICE_QUESTION_ID;\r
483 VariableOffsetBase = CON_OUT_DEVICE_VAR_OFFSET;\r
484 break;\r
485\r
486 case FORM_CON_ERR_ID:\r
487 ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleErrCheck[0];\r
4af04335
DB
488 QuestionIdBase = CON_ERR_DEVICE_QUESTION_ID;\r
489 VariableOffsetBase = CON_ERR_DEVICE_VAR_OFFSET;\r
490 break;\r
491 }\r
492 ASSERT (ConsoleCheck != NULL);\r
493\r
494 for (Index = 0; ((Index < ConsoleMenu->MenuNumber) && \\r
495 (Index < MAX_MENU_NUMBER)) ; Index++) {\r
496 CheckFlags = 0;\r
497 NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
498 NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
499 if (NewConsoleContext->IsActive) {\r
500 CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
501 ConsoleCheck[Index] = TRUE;\r
502 } else {\r
503 ConsoleCheck[Index] = FALSE;\r
504 }\r
505 HiiCreateCheckBoxOpCode (\r
506 mStartOpCodeHandle,\r
507 (EFI_QUESTION_ID) (QuestionIdBase + Index),\r
508 VARSTORE_ID_BOOT_MAINT,\r
509 (UINT16) (VariableOffsetBase + Index),\r
510 NewMenuEntry->DisplayStringToken,\r
511 NewMenuEntry->HelpStringToken,\r
a3475fe0 512 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
513 CheckFlags,\r
514 NULL\r
515 );\r
516 }\r
517\r
518 for (Index2 = 0; ((Index2 < TerminalMenu.MenuNumber) && \\r
519 (Index2 < MAX_MENU_NUMBER)); Index2++) {\r
520 CheckFlags = 0;\r
521 NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2);\r
522 NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
523\r
524 ASSERT (Index < MAX_MENU_NUMBER);\r
525 if (((NewTerminalContext->IsConIn != 0) && (UpdatePageId == FORM_CON_IN_ID)) ||\r
526 ((NewTerminalContext->IsConOut != 0) && (UpdatePageId == FORM_CON_OUT_ID)) ||\r
527 ((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID))\r
528 ) {\r
529 CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
530 ConsoleCheck[Index] = TRUE;\r
531 } else {\r
532 ConsoleCheck[Index] = FALSE;\r
533 }\r
534 HiiCreateCheckBoxOpCode (\r
535 mStartOpCodeHandle,\r
536 (EFI_QUESTION_ID) (QuestionIdBase + Index),\r
537 VARSTORE_ID_BOOT_MAINT,\r
538 (UINT16) (VariableOffsetBase + Index),\r
539 NewMenuEntry->DisplayStringToken,\r
540 NewMenuEntry->HelpStringToken,\r
a3475fe0 541 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
542 CheckFlags,\r
543 NULL\r
544 );\r
545\r
546 Index++;\r
547 }\r
548\r
4af04335
DB
549 UpdatePageEnd (CallbackData);\r
550}\r
551\r
552/**\r
553 Update the page's NV Map if user has changed the order\r
554 a list. This list can be Boot Order or Driver Order.\r
555\r
556 @param UpdatePageId The form ID to be updated.\r
557 @param OptionMenu The new list.\r
558 @param CallbackData The BMM context data.\r
559\r
560**/\r
561VOID\r
562UpdateOrderPage (\r
563 IN UINT16 UpdatePageId,\r
564 IN BM_MENU_OPTION *OptionMenu,\r
565 IN BMM_CALLBACK_DATA *CallbackData\r
566 )\r
567{\r
568 BM_MENU_ENTRY *NewMenuEntry;\r
569 UINT16 Index;\r
570 UINT16 OptionIndex;\r
571 VOID *OptionsOpCodeHandle;\r
4af04335
DB
572 BOOLEAN BootOptionFound;\r
573 UINT32 *OptionOrder;\r
574 EFI_QUESTION_ID QuestionId;\r
575 UINT16 VarOffset;\r
576\r
577 CallbackData->BmmAskSaveOrNot = TRUE;\r
578 UpdatePageStart (CallbackData);\r
579\r
580 OptionOrder = NULL;\r
581 QuestionId = 0;\r
582 VarOffset = 0;\r
583 switch (UpdatePageId) { \r
584 \r
585 case FORM_BOOT_CHG_ID:\r
586 GetBootOrder (CallbackData);\r
587 OptionOrder = CallbackData->BmmFakeNvData.BootOptionOrder;\r
588 QuestionId = BOOT_OPTION_ORDER_QUESTION_ID;\r
589 VarOffset = BOOT_OPTION_ORDER_VAR_OFFSET;\r
590 break;\r
591 \r
592 case FORM_DRV_CHG_ID:\r
593 GetDriverOrder (CallbackData);\r
594 OptionOrder = CallbackData->BmmFakeNvData.DriverOptionOrder;\r
595 QuestionId = DRIVER_OPTION_ORDER_QUESTION_ID;\r
596 VarOffset = DRIVER_OPTION_ORDER_VAR_OFFSET;\r
597 break;\r
598 } \r
599 ASSERT (OptionOrder != NULL); \r
600 \r
601 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
602 ASSERT (OptionsOpCodeHandle != NULL);\r
603 \r
604 NewMenuEntry = NULL;\r
605 for (OptionIndex = 0; (OptionOrder[OptionIndex] != 0 && OptionIndex < MAX_MENU_NUMBER); OptionIndex++) {\r
606 BootOptionFound = FALSE;\r
607 for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
608 NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
4af04335
DB
609 if ((UINT32) (NewMenuEntry->OptionNumber + 1) == OptionOrder[OptionIndex]) {\r
610 BootOptionFound = TRUE;\r
611 break;\r
612 }\r
613 }\r
614 if (BootOptionFound) {\r
615 HiiCreateOneOfOptionOpCode (\r
616 OptionsOpCodeHandle,\r
617 NewMenuEntry->DisplayStringToken,\r
618 0,\r
619 EFI_IFR_TYPE_NUM_SIZE_32,\r
620 OptionOrder[OptionIndex]\r
621 );\r
622 }\r
623 }\r
624 \r
625 if (OptionMenu->MenuNumber > 0) {\r
626 HiiCreateOrderedListOpCode ( \r
627 mStartOpCodeHandle, // Container for dynamic created opcodes \r
628 QuestionId, // Question ID \r
629 VARSTORE_ID_BOOT_MAINT, // VarStore ID \r
630 VarOffset, // Offset in Buffer Storage \r
631 STRING_TOKEN (STR_CHANGE_ORDER), // Question prompt text \r
632 STRING_TOKEN (STR_CHANGE_ORDER), // Question help text \r
633 0, // Question flag \r
634 0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET\r
635 EFI_IFR_TYPE_NUM_SIZE_32, // Data type of Question value \r
636 100, // Maximum container \r
637 OptionsOpCodeHandle, // Option Opcode list \r
638 NULL // Default Opcode is NULL \r
639 );\r
640 }\r
641\r
642 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
643\r
644 UpdatePageEnd (CallbackData);\r
645\r
646}\r
647\r
4af04335
DB
648/**\r
649 Refresh the text mode page.\r
650\r
651 @param CallbackData The BMM context data.\r
652\r
653**/\r
654VOID\r
655UpdateConModePage (\r
656 IN BMM_CALLBACK_DATA *CallbackData\r
657 )\r
658{\r
659 UINTN Mode;\r
660 UINTN Index;\r
661 UINTN Col;\r
662 UINTN Row;\r
663 CHAR16 ModeString[50];\r
664 CHAR16 *PStr;\r
665 UINTN MaxMode;\r
666 UINTN ValidMode;\r
667 EFI_STRING_ID *ModeToken;\r
668 EFI_STATUS Status;\r
669 VOID *OptionsOpCodeHandle;\r
670 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;\r
671\r
672 ConOut = gST->ConOut;\r
673 Index = 0;\r
674 ValidMode = 0;\r
675 MaxMode = (UINTN) (ConOut->Mode->MaxMode);\r
676\r
677 CallbackData->BmmAskSaveOrNot = TRUE;\r
678\r
679 UpdatePageStart (CallbackData);\r
680\r
681 //\r
682 // Check valid mode\r
683 //\r
684 for (Mode = 0; Mode < MaxMode; Mode++) {\r
685 Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);\r
686 if (EFI_ERROR (Status)) {\r
687 continue;\r
688 }\r
689 ValidMode++;\r
690 }\r
691\r
692 if (ValidMode == 0) {\r
693 return;\r
694 }\r
695\r
696 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
697 ASSERT (OptionsOpCodeHandle != NULL);\r
698\r
699 ModeToken = AllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);\r
700 ASSERT(ModeToken != NULL);\r
701\r
702 //\r
703 // Determin which mode should be the first entry in menu\r
704 //\r
705 GetConsoleOutMode (CallbackData);\r
706\r
707 //\r
708 // Build text mode options\r
709 //\r
710 for (Mode = 0; Mode < MaxMode; Mode++) {\r
711 Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);\r
712 if (EFI_ERROR (Status)) {\r
713 continue;\r
714 }\r
715 \r
716 //\r
717 // Build mode string Column x Row\r
718 //\r
719 UnicodeValueToString (ModeString, 0, Col, 0);\r
720 PStr = &ModeString[0];\r
721 StrnCatS (PStr, sizeof (ModeString) / sizeof (ModeString[0]), L" x ", StrLen(L" x ") + 1);\r
722 PStr = PStr + StrLen (PStr);\r
723 UnicodeValueToString (PStr , 0, Row, 0);\r
724\r
725 ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL);\r
726\r
727 if (Mode == CallbackData->BmmFakeNvData.ConsoleOutMode) {\r
728 HiiCreateOneOfOptionOpCode (\r
729 OptionsOpCodeHandle,\r
730 ModeToken[Index],\r
731 EFI_IFR_OPTION_DEFAULT,\r
732 EFI_IFR_TYPE_NUM_SIZE_16,\r
733 (UINT16) Mode\r
734 );\r
735 } else {\r
736 HiiCreateOneOfOptionOpCode (\r
737 OptionsOpCodeHandle,\r
738 ModeToken[Index],\r
739 0,\r
740 EFI_IFR_TYPE_NUM_SIZE_16,\r
741 (UINT16) Mode\r
742 );\r
743 }\r
744 Index++;\r
745 }\r
746\r
747 HiiCreateOneOfOpCode (\r
748 mStartOpCodeHandle,\r
749 (EFI_QUESTION_ID) CON_MODE_QUESTION_ID,\r
750 VARSTORE_ID_BOOT_MAINT,\r
751 CON_MODE_VAR_OFFSET,\r
752 STRING_TOKEN (STR_CON_MODE_SETUP),\r
753 STRING_TOKEN (STR_CON_MODE_SETUP),\r
754 EFI_IFR_FLAG_RESET_REQUIRED,\r
755 EFI_IFR_NUMERIC_SIZE_2,\r
756 OptionsOpCodeHandle,\r
757 NULL\r
758 );\r
759\r
760 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
761 FreePool (ModeToken);\r
762\r
763 UpdatePageEnd (CallbackData);\r
764}\r
765\r
766 /**\r
767 Create the dynamic page which allows user to set the property such as Baud Rate, Data Bits,\r
768 Parity, Stop Bits, Terminal Type.\r
769\r
770 @param CallbackData The BMM context data.\r
771\r
772**/\r
773VOID\r
774UpdateTerminalPage (\r
775 IN BMM_CALLBACK_DATA *CallbackData\r
776 )\r
777{\r
778 UINT8 Index;\r
779 UINT8 CheckFlags;\r
780 BM_MENU_ENTRY *NewMenuEntry;\r
781 VOID *OptionsOpCodeHandle;\r
782 UINTN CurrentTerminal;\r
783\r
784 CallbackData->BmmAskSaveOrNot = TRUE;\r
785\r
786 UpdatePageStart (CallbackData);\r
787\r
788 CurrentTerminal = CallbackData->CurrentTerminal;\r
789 NewMenuEntry = BOpt_GetMenuEntry (\r
790 &TerminalMenu,\r
791 CurrentTerminal\r
792 );\r
793\r
794 if (NewMenuEntry == NULL) {\r
795 return ;\r
796 }\r
797\r
798 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
799 ASSERT (OptionsOpCodeHandle != NULL);\r
800\r
801 for (Index = 0; Index < sizeof (BaudRateList) / sizeof (BaudRateList [0]); Index++) {\r
802 CheckFlags = 0;\r
803 if (BaudRateList[Index].Value == 115200) {\r
804 CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
805 }\r
806 HiiCreateOneOfOptionOpCode (\r
807 OptionsOpCodeHandle,\r
808 BaudRateList[Index].StringToken,\r
809 CheckFlags,\r
810 EFI_IFR_TYPE_NUM_SIZE_8,\r
811 Index\r
812 );\r
813 }\r
814\r
815 HiiCreateOneOfOpCode (\r
816 mStartOpCodeHandle,\r
817 (EFI_QUESTION_ID) (COM_BAUD_RATE_QUESTION_ID + CurrentTerminal),\r
818 VARSTORE_ID_BOOT_MAINT,\r
819 (UINT16) (COM_BAUD_RATE_VAR_OFFSET + CurrentTerminal),\r
820 STRING_TOKEN (STR_COM_BAUD_RATE),\r
821 STRING_TOKEN (STR_COM_BAUD_RATE),\r
a3475fe0 822 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
823 EFI_IFR_NUMERIC_SIZE_1,\r
824 OptionsOpCodeHandle,\r
825 NULL\r
826 );\r
827 \r
828 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
829 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
830 ASSERT (OptionsOpCodeHandle != NULL);\r
831\r
832 for (Index = 0; Index < sizeof (DataBitsList) / sizeof (DataBitsList[0]); Index++) {\r
833 CheckFlags = 0;\r
834\r
835 if (DataBitsList[Index].Value == 8) {\r
836 CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
837 }\r
838\r
839 HiiCreateOneOfOptionOpCode (\r
840 OptionsOpCodeHandle,\r
841 DataBitsList[Index].StringToken,\r
842 CheckFlags,\r
843 EFI_IFR_TYPE_NUM_SIZE_8,\r
844 Index\r
845 );\r
846 }\r
847\r
848 HiiCreateOneOfOpCode (\r
849 mStartOpCodeHandle,\r
850 (EFI_QUESTION_ID) (COM_DATA_RATE_QUESTION_ID + CurrentTerminal),\r
851 VARSTORE_ID_BOOT_MAINT,\r
852 (UINT16) (COM_DATA_RATE_VAR_OFFSET + CurrentTerminal),\r
853 STRING_TOKEN (STR_COM_DATA_BITS),\r
854 STRING_TOKEN (STR_COM_DATA_BITS),\r
a3475fe0 855 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
856 EFI_IFR_NUMERIC_SIZE_1,\r
857 OptionsOpCodeHandle,\r
858 NULL\r
859 );\r
860\r
861 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
862 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
863 ASSERT (OptionsOpCodeHandle != NULL);\r
864\r
865 for (Index = 0; Index < sizeof (ParityList) / sizeof (ParityList[0]); Index++) {\r
866 CheckFlags = 0;\r
867 if (ParityList[Index].Value == NoParity) {\r
868 CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
869 }\r
870\r
871 HiiCreateOneOfOptionOpCode (\r
872 OptionsOpCodeHandle,\r
873 ParityList[Index].StringToken,\r
874 CheckFlags,\r
875 EFI_IFR_TYPE_NUM_SIZE_8,\r
876 Index\r
877 );\r
878 }\r
879\r
880 HiiCreateOneOfOpCode (\r
881 mStartOpCodeHandle,\r
882 (EFI_QUESTION_ID) (COM_PARITY_QUESTION_ID + CurrentTerminal),\r
883 VARSTORE_ID_BOOT_MAINT,\r
884 (UINT16) (COM_PARITY_VAR_OFFSET + CurrentTerminal),\r
885 STRING_TOKEN (STR_COM_PARITY),\r
886 STRING_TOKEN (STR_COM_PARITY),\r
a3475fe0 887 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
888 EFI_IFR_NUMERIC_SIZE_1,\r
889 OptionsOpCodeHandle,\r
890 NULL\r
891 );\r
892\r
893 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
894 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
895 ASSERT (OptionsOpCodeHandle != NULL);\r
896\r
897 for (Index = 0; Index < sizeof (StopBitsList) / sizeof (StopBitsList[0]); Index++) {\r
898 CheckFlags = 0;\r
899 if (StopBitsList[Index].Value == OneStopBit) {\r
900 CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
901 }\r
902\r
903 HiiCreateOneOfOptionOpCode (\r
904 OptionsOpCodeHandle,\r
905 StopBitsList[Index].StringToken,\r
906 CheckFlags,\r
907 EFI_IFR_TYPE_NUM_SIZE_8,\r
908 Index\r
909 );\r
910 }\r
911\r
912 HiiCreateOneOfOpCode (\r
913 mStartOpCodeHandle,\r
914 (EFI_QUESTION_ID) (COM_STOP_BITS_QUESTION_ID + CurrentTerminal),\r
915 VARSTORE_ID_BOOT_MAINT,\r
916 (UINT16) (COM_STOP_BITS_VAR_OFFSET + CurrentTerminal),\r
917 STRING_TOKEN (STR_COM_STOP_BITS),\r
918 STRING_TOKEN (STR_COM_STOP_BITS),\r
a3475fe0 919 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
920 EFI_IFR_NUMERIC_SIZE_1,\r
921 OptionsOpCodeHandle,\r
922 NULL\r
923 );\r
924\r
925 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
926 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
927 ASSERT (OptionsOpCodeHandle != NULL);\r
928\r
929 for (Index = 0; Index < sizeof (TerminalType) / sizeof (TerminalType[0]); Index++) {\r
930 CheckFlags = 0;\r
931 if (Index == 0) {\r
932 CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
933 }\r
934\r
935 HiiCreateOneOfOptionOpCode (\r
936 OptionsOpCodeHandle,\r
937 (EFI_STRING_ID) TerminalType[Index],\r
938 CheckFlags,\r
939 EFI_IFR_TYPE_NUM_SIZE_8,\r
940 Index\r
941 );\r
942 }\r
943\r
944 HiiCreateOneOfOpCode (\r
945 mStartOpCodeHandle,\r
946 (EFI_QUESTION_ID) (COM_TERMINAL_QUESTION_ID + CurrentTerminal),\r
947 VARSTORE_ID_BOOT_MAINT,\r
948 (UINT16) (COM_TERMINAL_VAR_OFFSET + CurrentTerminal),\r
949 STRING_TOKEN (STR_COM_TERMI_TYPE),\r
950 STRING_TOKEN (STR_COM_TERMI_TYPE),\r
a3475fe0 951 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
952 EFI_IFR_NUMERIC_SIZE_1,\r
953 OptionsOpCodeHandle,\r
954 NULL\r
955 );\r
956\r
957 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
958 OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
959 ASSERT (OptionsOpCodeHandle != NULL);\r
960\r
961 for (Index = 0; Index < sizeof (mFlowControlType) / sizeof (mFlowControlType[0]); Index++) {\r
962 CheckFlags = 0;\r
963 if (Index == 0) {\r
964 CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
965 }\r
966 HiiCreateOneOfOptionOpCode (\r
967 OptionsOpCodeHandle,\r
968 (EFI_STRING_ID) mFlowControlType[Index],\r
969 CheckFlags,\r
970 EFI_IFR_TYPE_NUM_SIZE_8,\r
971 mFlowControlValue[Index]\r
972 );\r
973 }\r
974\r
975 HiiCreateOneOfOpCode (\r
976 mStartOpCodeHandle,\r
977 (EFI_QUESTION_ID) (COM_FLOWCONTROL_QUESTION_ID + CurrentTerminal),\r
978 VARSTORE_ID_BOOT_MAINT,\r
979 (UINT16) (COM_FLOWCONTROL_VAR_OFFSET + CurrentTerminal),\r
980 STRING_TOKEN (STR_COM_FLOW_CONTROL),\r
981 STRING_TOKEN (STR_COM_FLOW_CONTROL),\r
a3475fe0 982 EFI_IFR_FLAG_CALLBACK,\r
4af04335
DB
983 EFI_IFR_NUMERIC_SIZE_1,\r
984 OptionsOpCodeHandle,\r
985 NULL\r
986 );\r
987\r
988 HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
989\r
990 UpdatePageEnd (CallbackData);\r
991}\r
992 \r
993/**\r
994Update add boot/driver option page.\r
995\r
996@param CallbackData The BMM context data.\r
997@param FormId The form ID to be updated.\r
998@param DevicePath Device path.\r
999\r
1000**/\r
1001VOID\r
1002UpdateOptionPage(\r
1003 IN BMM_CALLBACK_DATA *CallbackData,\r
1004 IN EFI_FORM_ID FormId,\r
1005 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
1006 )\r
1007{\r
1008 CHAR16 *String;\r
1009 EFI_STRING_ID StringToken;\r
1010\r
a91f1a0e
BD
1011 String = NULL;\r
1012\r
4af04335
DB
1013 if (DevicePath != NULL){\r
1014 String = ExtractFileNameFromDevicePath(DevicePath);\r
a91f1a0e
BD
1015 }\r
1016 if (String == NULL) {\r
4af04335
DB
1017 String = HiiGetString (CallbackData->BmmHiiHandle, STRING_TOKEN (STR_NULL_STRING), NULL);\r
1018 ASSERT (String != NULL);\r
4af04335
DB
1019 }\r
1020\r
a91f1a0e
BD
1021 StringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
1022 FreePool (String);\r
1023\r
4af04335
DB
1024 if(FormId == FORM_BOOT_ADD_ID){\r
1025 if (!CallbackData->BmmFakeNvData.BootOptionChanged) {\r
1026 ZeroMem (CallbackData->BmmFakeNvData.BootOptionalData, sizeof (CallbackData->BmmFakeNvData.BootOptionalData));\r
1027 ZeroMem (CallbackData->BmmFakeNvData.BootDescriptionData, sizeof (CallbackData->BmmFakeNvData.BootDescriptionData));\r
1028 }\r
1029 } else if (FormId == FORM_DRV_ADD_FILE_ID){\r
1030 if (!CallbackData->BmmFakeNvData.DriverOptionChanged) {\r
1031 ZeroMem (CallbackData->BmmFakeNvData.DriverOptionalData, sizeof (CallbackData->BmmFakeNvData.DriverOptionalData));\r
1032 ZeroMem (CallbackData->BmmFakeNvData.DriverDescriptionData, sizeof (CallbackData->BmmFakeNvData.DriverDescriptionData));\r
1033 }\r
1034 }\r
1035\r
1036 RefreshUpdateData();\r
1037 mStartLabel->Number = FormId;\r
1038\r
1039 HiiCreateSubTitleOpCode (\r
1040 mStartOpCodeHandle,\r
1041 StringToken,\r
1042 0,\r
1043 0,\r
1044 0\r
1045 );\r
1046\r
1047 HiiUpdateForm (\r
1048 CallbackData->BmmHiiHandle,\r
1049 &mBootMaintGuid,\r
1050 FormId,\r
1051 mStartOpCodeHandle,// Label FormId\r
1052 mEndOpCodeHandle // LABEL_END\r
1053 );\r
1054}\r
1055\r
1056/**\r
1057 Dispatch the correct update page function to call based on\r
1058 the UpdatePageId.\r
1059\r
1060 @param UpdatePageId The form ID.\r
1061 @param CallbackData The BMM context data.\r
1062\r
1063**/\r
1064VOID\r
1065UpdatePageBody (\r
1066 IN UINT16 UpdatePageId,\r
1067 IN BMM_CALLBACK_DATA *CallbackData\r
1068 )\r
1069{\r
1070 CleanUpPage (UpdatePageId, CallbackData);\r
1071 switch (UpdatePageId) {\r
1072 case FORM_CON_IN_ID:\r
1073 UpdateConsolePage (UpdatePageId, &ConsoleInpMenu, CallbackData);\r
1074 break;\r
1075\r
1076 case FORM_CON_OUT_ID:\r
1077 UpdateConsolePage (UpdatePageId, &ConsoleOutMenu, CallbackData);\r
1078 break;\r
1079\r
1080 case FORM_CON_ERR_ID:\r
1081 UpdateConsolePage (UpdatePageId, &ConsoleErrMenu, CallbackData);\r
1082 break;\r
1083\r
1084 case FORM_BOOT_CHG_ID:\r
1085 UpdateOrderPage (UpdatePageId, &BootOptionMenu, CallbackData);\r
1086 break;\r
1087\r
1088 case FORM_DRV_CHG_ID:\r
1089 UpdateOrderPage (UpdatePageId, &DriverOptionMenu, CallbackData);\r
1090 break;\r
1091\r
1092 default:\r
1093 break;\r
1094 }\r
1095}\r
1096\r
1097/**\r
1098 Dispatch the display to the next page based on NewPageId.\r
1099\r
1100 @param Private The BMM context data.\r
1101 @param NewPageId The original page ID.\r
1102\r
1103**/\r
1104VOID\r
1105UpdatePageId (\r
1106 BMM_CALLBACK_DATA *Private,\r
1107 UINT16 NewPageId\r
1108 )\r
1109{\r
1110 if ((NewPageId < FILE_OPTION_OFFSET) && (NewPageId >= HANDLE_OPTION_OFFSET)) {\r
1111 //\r
1112 // If we select a handle to add driver option, advance to the add handle description page.\r
1113 //\r
1114 NewPageId = FORM_DRV_ADD_HANDLE_DESC_ID;\r
1115 } else if ((NewPageId == KEY_VALUE_SAVE_AND_EXIT) || (NewPageId == KEY_VALUE_NO_SAVE_AND_EXIT)) {\r
1116 //\r
1117 // Return to main page after "Save Changes" or "Discard Changes".\r
1118 //\r
1119 NewPageId = FORM_MAIN_ID;\r
1120 } else if ((NewPageId >= TERMINAL_OPTION_OFFSET) && (NewPageId < CONSOLE_OPTION_OFFSET)) {\r
1121 NewPageId = FORM_CON_COM_SETUP_ID;\r
1122 }\r
1123\r
1124 if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {\r
1125 Private->BmmPreviousPageId = Private->BmmCurrentPageId;\r
1126 Private->BmmCurrentPageId = NewPageId;\r
1127 }\r
1128}\r