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