]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/BdsDxe/BootMaint/BootMaint.h
edk2/MdeModulePkg/Universal/BdsDxe/BootMaint/BootMaint.h:
[mirror_edk2.git] / MdeModulePkg / Universal / BdsDxe / BootMaint / BootMaint.h
1 /*++
2
3 Copyright (c) 2004 - 2008, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 BootMaint.h
15
16 Abstract:
17
18 Revision History
19
20 --*/
21
22 #ifndef _BOOT_MAINT_H
23 #define _BOOT_MAINT_H
24
25 #include "Bds.h"
26 #include "BBSsupport.h"
27 #include "FormGuid.h"
28 #include "FrontPage.h"
29
30 //
31 // Constants which are variable names used to access variables
32 //
33 #define VarLegacyDevOrder L"LegacyDevOrder"
34
35 #define VarConOutMode L"ConOutMode"
36
37 //
38 // Guid of a NV Variable which store the information about the
39 // FD/HD/CD/NET/BEV order
40 //
41 #define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \
42 { \
43 0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52} \
44 }
45
46 //
47 // String Contant
48 //
49 #define StrFloppy L"Floppy Drive #%02x"
50 #define StrHardDisk L"HardDisk Drive #%02x"
51 #define StrCDROM L"ATAPI CDROM Drive #%02x"
52 #define StrNET L"NET Drive #%02x"
53 #define StrBEV L"BEV Drive #%02x"
54 #define StrFloppyHelp L"Select Floppy Drive #%02x"
55 #define StrHardDiskHelp L"Select HardDisk Drive #%02x"
56 #define StrCDROMHelp L"Select ATAPI CDROM Drive #%02x"
57 #define StrNETHelp L"NET Drive #%02x"
58 #define StrBEVHelp L"BEV Drive #%02x"
59
60 //
61 // Variable created with this flag will be "Efi:...."
62 //
63 #define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
64
65 //
66 // Define Maxmim characters that will be accepted
67 //
68 #define MAX_CHAR 480
69 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
70
71 //
72 // Check to see if current build support option active feature of
73 // some driver option
74 //
75 #ifndef LOAD_OPTION_ACTIVE
76 #define LOAD_OPTION_ACTIVE 0x00000001
77 #endif
78
79 //
80 // Check to see if current build support force reconnect feature of
81 // some driver option
82 //
83 #ifndef LOAD_OPTION_FORCE_RECONNECT
84 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
85 #endif
86
87 extern EFI_GUID mBootMaintGuid;
88 extern EFI_GUID mFileExplorerGuid;
89
90 //
91 // These are the VFR compiler generated data representing our VFR data.
92 //
93 extern UINT8 BmBin[];
94 extern UINT8 FEBin[];
95
96 //
97 // Below are the number of options in Baudrate, Databits,
98 // Parity and Stopbits selection for serial ports.
99 //
100 #define BM_COM_ATTR_BUADRATE 19
101 #define BM_COM_ATTR_DATABITS 4
102 #define BM_COM_ATTR_PARITY 5
103 #define BM_COM_ATTR_STOPBITS 3
104
105 //
106 // Callback function helper
107 //
108 #define BMM_CALLBACK_DATA_SIGNATURE EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')
109 #define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
110
111 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
112
113 //
114 // Enumeration type definition
115 //
116 typedef UINT8 BBS_TYPE;
117
118 typedef enum {
119 PC_ANSI = 0,
120 VT_100,
121 VT_100_PLUS,
122 VT_UTF8
123 } TYPE_OF_TERMINAL;
124
125 typedef enum {
126 COM1 = 0,
127 COM2,
128 UNKNOW_COM
129 } TYPE_OF_COM;
130
131 typedef enum {
132 CONIN = 0,
133 CONOUT,
134 CONERR,
135 UNKNOWN_CON
136 } TYPE_OF_CON;
137
138 typedef enum {
139 BAUDRATE = 0,
140 DATABITS,
141 PARITY,
142 STOPBITS,
143 UNKNOW_ATTR
144 } TYPE_OF_ATTRIBUTE;
145
146 typedef enum {
147 MANNER_GOTO = 0,
148 MANNER_CHECK,
149 MANNER_ONEOF,
150 MANNER_USER_DEFINE
151 } TYPE_OF_UPATE_MANNER;
152
153 typedef enum {
154 INACTIVE_STATE = 0,
155 BOOT_FROM_FILE_STATE,
156 ADD_BOOT_OPTION_STATE,
157 ADD_DRIVER_OPTION_STATE,
158 UNKNOWN_STATE
159 } FILE_EXPLORER_STATE;
160
161 typedef enum {
162 FILE_SYSTEM,
163 DIRECTORY,
164 UNKNOWN_CONTEXT
165 } FILE_EXPLORER_DISPLAY_CONTEXT;
166
167 //
168 // All of the signatures that will be used in list structure
169 //
170 #define BM_MENU_OPTION_SIGNATURE EFI_SIGNATURE_32 ('m', 'e', 'n', 'u')
171 #define BM_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('l', 'o', 'a', 'd')
172 #define BM_CONSOLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('c', 'n', 's', 'l')
173 #define BM_FILE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('f', 'i', 'l', 'e')
174 #define BM_HANDLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('h', 'n', 'd', 'l')
175 #define BM_TERMINAL_OPTION_SIGNATURE EFI_SIGNATURE_32 ('t', 'r', 'm', 'l')
176 #define BM_MENU_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('e', 'n', 't', 'r')
177
178 #define BM_LOAD_CONTEXT_SELECT 0x0
179 #define BM_CONSOLE_CONTEXT_SELECT 0x1
180 #define BM_FILE_CONTEXT_SELECT 0x2
181 #define BM_HANDLE_CONTEXT_SELECT 0x3
182 #define BM_TERMINAL_CONTEXT_SELECT 0x5
183
184 #define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
185 #define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
186 #define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
187 #define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
188
189 //
190 // Buffer size for update data
191 //
192 #define UPDATE_DATA_SIZE 0x100000
193
194 //
195 // Namespace of callback keys used in display and file system navigation
196 //
197 #define MAX_BBS_OFFSET 0xE000
198 #define NET_OPTION_OFFSET 0xD800
199 #define BEV_OPTION_OFFSET 0xD000
200 #define FD_OPTION_OFFSET 0xC000
201 #define HD_OPTION_OFFSET 0xB000
202 #define CD_OPTION_OFFSET 0xA000
203 #define FILE_OPTION_OFFSET 0x8000
204 #define FILE_OPTION_MASK 0x7FFF
205 #define HANDLE_OPTION_OFFSET 0x7000
206 #define CONSOLE_OPTION_OFFSET 0x6000
207 #define TERMINAL_OPTION_OFFSET 0x5000
208 #define CONFIG_OPTION_OFFSET 0x1200
209 #define KEY_VALUE_OFFSET 0x1100
210 #define FORM_ID_OFFSET 0x1000
211
212 //
213 // VarOffset that will be used to create question
214 // all these values are computed from the structure
215 // defined below
216 //
217 #define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field)))
218
219 //
220 // Question Id of Zero is invalid, so add an offset to it
221 //
222 #define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET)
223
224 #define BOOT_TIME_OUT_VAR_OFFSET VAR_OFFSET (BootTimeOut)
225 #define BOOT_NEXT_VAR_OFFSET VAR_OFFSET (BootNext)
226 #define COM1_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM1BaudRate)
227 #define COM1_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM1DataRate)
228 #define COM1_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM1StopBits)
229 #define COM1_PARITY_VAR_OFFSET VAR_OFFSET (COM1Parity)
230 #define COM1_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType)
231 #define COM2_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM2BaudRate)
232 #define COM2_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM2DataRate)
233 #define COM2_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM2StopBits)
234 #define COM2_PARITY_VAR_OFFSET VAR_OFFSET (COM2Parity)
235 #define COM2_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType)
236 #define DRV_ADD_HANDLE_DESC_VAR_OFFSET VAR_OFFSET (DriverAddHandleDesc)
237 #define DRV_ADD_ACTIVE_VAR_OFFSET VAR_OFFSET (DriverAddActive)
238 #define DRV_ADD_RECON_VAR_OFFSET VAR_OFFSET (DriverAddForceReconnect)
239 #define CON_IN_COM1_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM1)
240 #define CON_IN_COM2_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM2)
241 #define CON_OUT_COM1_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM1)
242 #define CON_OUT_COM2_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM2)
243 #define CON_ERR_COM1_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM1)
244 #define CON_ERR_COM2_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM2)
245 #define CON_MODE_VAR_OFFSET VAR_OFFSET (ConsoleOutMode)
246 #define CON_DEVICE_VAR_OFFSET VAR_OFFSET (ConsoleCheck)
247 #define OPTION_ORDER_VAR_OFFSET VAR_OFFSET (OptionOrder)
248 #define DRIVER_OPTION_ORDER_VAR_OFFSET VAR_OFFSET (DriverOptionToBeDeleted)
249 #define BOOT_OPTION_DEL_VAR_OFFSET VAR_OFFSET (BootOptionDel)
250 #define DRIVER_OPTION_DEL_VAR_OFFSET VAR_OFFSET (DriverOptionDel)
251 #define DRIVER_ADD_OPTION_VAR_OFFSET VAR_OFFSET (DriverAddHandleOptionalData)
252 #define COM_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COMBaudRate)
253 #define COM_DATA_RATE_VAR_OFFSET VAR_OFFSET (COMDataRate)
254 #define COM_STOP_BITS_VAR_OFFSET VAR_OFFSET (COMStopBits)
255 #define COM_PARITY_VAR_OFFSET VAR_OFFSET (COMParity)
256 #define COM_TERMINAL_VAR_OFFSET VAR_OFFSET (COMTerminalType)
257 #define LEGACY_FD_VAR_OFFSET VAR_OFFSET (LegacyFD)
258 #define LEGACY_HD_VAR_OFFSET VAR_OFFSET (LegacyHD)
259 #define LEGACY_CD_VAR_OFFSET VAR_OFFSET (LegacyCD)
260 #define LEGACY_NET_VAR_OFFSET VAR_OFFSET (LegacyNET)
261 #define LEGACY_BEV_VAR_OFFSET VAR_OFFSET (LegacyBEV)
262
263 #define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
264 #define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
265 #define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
266 #define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
267 #define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
268 #define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
269 #define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
270 #define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
271 #define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
272 #define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
273 #define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
274 #define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
275 #define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
276 #define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
277 #define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
278 #define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
279 #define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
280 #define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
281 #define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
282 #define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
283 #define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
284 #define CON_MODE_QUESTION_ID QUESTION_ID (ConsoleOutMode)
285 #define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
286 #define OPTION_ORDER_QUESTION_ID QUESTION_ID (OptionOrder)
287 #define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
288 #define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
289 #define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
290 #define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
291 #define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
292 #define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
293 #define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
294 #define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
295 #define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
296 #define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD)
297 #define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD)
298 #define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD)
299 #define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET)
300 #define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV)
301
302 #define STRING_DEPOSITORY_NUMBER 8
303
304 //
305 // #pragma pack(1)
306 //
307 // Serial Ports attributes, first one is the value for
308 // return from callback function, stringtoken is used to
309 // display the value properly
310 //
311 typedef struct {
312 UINTN Value;
313 UINT16 StringToken;
314 } COM_ATTR;
315
316 #pragma pack(1)
317 typedef struct {
318 BBS_TYPE BbsType;
319 //
320 // Length = sizeof (UINT16) + SIZEOF (Data)
321 //
322 UINT16 Length;
323 UINT16 *Data;
324 } BM_LEGACY_DEV_ORDER_CONTEXT;
325 #pragma pack()
326
327 typedef struct {
328 UINT64 BaudRate;
329 UINT8 DataBits;
330 UINT8 Parity;
331 UINT8 StopBits;
332
333 UINT8 BaudRateIndex;
334 UINT8 DataBitsIndex;
335 UINT8 ParityIndex;
336 UINT8 StopBitsIndex;
337
338 UINT8 IsConIn;
339 UINT8 IsConOut;
340 UINT8 IsStdErr;
341 UINT8 TerminalType;
342
343 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
344 } BM_TERMINAL_CONTEXT;
345
346 typedef struct {
347 BOOLEAN IsBootNext;
348 BOOLEAN LoadOptionModified;
349 BOOLEAN Deleted;
350
351 BOOLEAN IsLegacy;
352 BOOLEAN IsActive;
353 BOOLEAN ForceReconnect;
354 UINTN OptionalDataSize;
355
356 UINTN LoadOptionSize;
357 UINT8 *LoadOption;
358
359 UINT32 Attributes;
360 UINT16 FilePathListLength;
361 UINT16 *Description;
362 EFI_DEVICE_PATH_PROTOCOL *FilePathList;
363 UINT8 *OptionalData;
364
365 UINT16 BbsIndex;
366 } BM_LOAD_CONTEXT;
367
368 typedef struct {
369 BBS_TABLE *BbsTable;
370 UINTN Index;
371 UINTN BbsCount;
372 UINT16 *Description;
373 } BM_LEGACY_DEVICE_CONTEXT;
374
375 typedef struct {
376
377 BOOLEAN IsActive;
378
379 BOOLEAN IsTerminal;
380
381 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
382 } BM_CONSOLE_CONTEXT;
383
384 typedef struct {
385 UINTN Column;
386 UINTN Row;
387 } CONSOLE_OUT_MODE;
388
389 typedef struct {
390 EFI_HANDLE Handle;
391 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
392 EFI_FILE_HANDLE FHandle;
393 UINT16 *FileName;
394 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *Info;
395
396 BOOLEAN IsRoot;
397 BOOLEAN IsDir;
398 BOOLEAN IsRemovableMedia;
399 BOOLEAN IsLoadFile;
400 BOOLEAN IsBootLegacy;
401 } BM_FILE_CONTEXT;
402
403 typedef struct {
404 EFI_HANDLE Handle;
405 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
406 } BM_HANDLE_CONTEXT;
407
408 typedef struct {
409 UINTN Signature;
410 LIST_ENTRY Head;
411 UINTN MenuNumber;
412 } BM_MENU_OPTION;
413
414 typedef struct {
415 UINTN Signature;
416 LIST_ENTRY Link;
417 UINTN OptionNumber;
418 UINT16 *DisplayString;
419 UINT16 *HelpString;
420 EFI_STRING_ID DisplayStringToken;
421 EFI_STRING_ID HelpStringToken;
422 UINTN ContextSelection;
423 VOID *VariableContext;
424 } BM_MENU_ENTRY;
425
426 typedef struct {
427 //
428 // Shared callback data.
429 //
430 UINTN Signature;
431
432 BM_MENU_ENTRY *MenuEntry;
433 BM_HANDLE_CONTEXT *HandleContext;
434 BM_FILE_CONTEXT *FileContext;
435 BM_LOAD_CONTEXT *LoadContext;
436 BM_TERMINAL_CONTEXT *TerminalContext;
437 UINTN CurrentTerminal;
438 BBS_TYPE BbsType;
439
440 //
441 // BMM main formset callback data.
442 //
443 EFI_HII_HANDLE BmmHiiHandle;
444 EFI_HANDLE BmmDriverHandle;
445 EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess;
446 EFI_FORM_ID BmmCurrentPageId;
447 EFI_FORM_ID BmmPreviousPageId;
448 BOOLEAN BmmAskSaveOrNot;
449 BMM_FAKE_NV_DATA BmmFakeNvData;
450 BMM_FAKE_NV_DATA BmmOldFakeNVData;
451
452 //
453 // File explorer formset callback data.
454 //
455 EFI_HII_HANDLE FeHiiHandle;
456 EFI_HANDLE FeDriverHandle;
457 EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
458 FILE_EXPLORER_STATE FeCurrentState;
459 FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext;
460 FILE_EXPLORER_NV_DATA FeFakeNvData;
461 } BMM_CALLBACK_DATA;
462
463 typedef struct _STRING_LIST_NODE {
464 EFI_STRING_ID StringToken;
465 struct _STRING_LIST_NODE *Next;
466 } STRING_LIST_NODE;
467
468 typedef struct _STRING_DEPOSITORY {
469 UINTN TotalNodeNumber;
470 STRING_LIST_NODE *CurrentNode;
471 STRING_LIST_NODE *ListHead;
472 } STRING_DEPOSITORY;
473
474 //
475 // #pragma pack()
476 //
477 // For initializing File System menu
478 //
479 EFI_STATUS
480 BOpt_FindFileSystem (
481 IN BMM_CALLBACK_DATA *CallbackData
482 )
483 ;
484
485 //
486 // For cleaning up File System menu
487 //
488 VOID
489 BOpt_FreeFileSystem (
490 VOID
491 )
492 ;
493
494 //
495 // For initializing File Navigation menu
496 //
497 EFI_STATUS
498 BOpt_FindFiles (
499 IN BMM_CALLBACK_DATA *CallbackData,
500 IN BM_MENU_ENTRY *MenuEntry
501 )
502 ;
503
504 //
505 // For cleaning up File Navigation menu
506 //
507 VOID
508 BOpt_FreeFiles (
509 VOID
510 )
511 ;
512
513 //
514 // For Initializing handle navigation menu
515 //
516 EFI_STATUS
517 BOpt_FindDrivers (
518 VOID
519 )
520 ;
521
522 //
523 // For Cleaning up handle navigation menu
524 //
525 VOID
526 BOpt_FreeDrivers(VOID);
527
528 //
529 // For initializing Boot Option menu
530 //
531 EFI_STATUS
532 BOpt_GetBootOptions (
533 IN BMM_CALLBACK_DATA *CallbackData
534 );
535
536 //
537 // For Initializing Driver option menu
538 //
539 EFI_STATUS
540 BOpt_GetDriverOptions (
541 IN BMM_CALLBACK_DATA *CallbackData
542 );
543
544 //
545 // For Cleaning up boot option menu
546 //
547 VOID
548 BOpt_FreeBootOptions (VOID);
549
550 //
551 // For cleaning up driver option menu
552 //
553 VOID
554 BOpt_FreeDriverOptions(VOID);
555
556 //
557 // For Initializing HD/FD/CD/NET/BEV option menu
558 //
559 EFI_STATUS
560 BOpt_GetLegacyOptions(VOID);
561
562 //
563 // For cleaning up driver option menu
564 //
565 VOID
566 BOpt_FreeLegacyOptions(VOID);
567
568 //
569 // this function is used to take place of all other free menu actions
570 //
571 VOID
572 BOpt_FreeMenu (
573 BM_MENU_OPTION *FreeMenu
574 );
575
576
577 //
578 // Following are the helper functions used
579 //
580 CHAR16 *
581 BOpt_AppendFileName (
582 IN CHAR16 *Str1,
583 IN CHAR16 *Str2
584 );
585
586 BOOLEAN
587 BOpt_IsEfiImageName (
588 IN UINT16 *FileName
589 );
590
591 BOOLEAN
592 BOpt_IsEfiApp (
593 IN EFI_FILE_HANDLE Dir,
594 IN UINT16 *FileName
595 );
596
597 //
598 // Get current unused boot option number
599 //
600 UINT16
601 BOpt_GetBootOptionNumber (VOID);
602
603 //
604 // Get current unused driver option number
605 //
606 UINT16
607 BOpt_GetDriverOptionNumber (VOID);
608
609 BM_MENU_ENTRY *
610 BOpt_CreateMenuEntry (
611 UINTN MenuType
612 );
613
614 VOID
615 BOpt_DestroyMenuEntry (
616 BM_MENU_ENTRY *MenuEntry
617 );
618
619 BM_MENU_ENTRY *
620 BOpt_GetMenuEntry (
621 BM_MENU_OPTION *MenuOption,
622 UINTN MenuNumber
623 );
624
625 //
626 // a helper function used to free pool type memory
627 //
628 VOID
629 SafeFreePool (
630 IN VOID *Buffer
631 );
632
633 //
634 // Locate all serial io devices for console
635 //
636 EFI_STATUS
637 LocateSerialIo (VOID);
638
639 //
640 // Initializing Console menu
641 //
642 EFI_STATUS
643 GetAllConsoles(VOID);
644
645 //
646 // Get current mode information
647 //
648 VOID
649 GetConsoleOutMode (
650 IN BMM_CALLBACK_DATA *CallbackData
651 );
652
653 //
654 // Cleaning up console menu
655 //
656 EFI_STATUS
657 FreeAllConsoles(VOID);
658
659 VOID
660 ChangeVariableDevicePath (
661 EFI_DEVICE_PATH_PROTOCOL *DevicePath
662 );
663
664 EFI_STATUS
665 ChangeTerminalDevicePath (
666 EFI_DEVICE_PATH_PROTOCOL *DevicePath,
667 BOOLEAN ChangeTerminal
668 );
669 //
670 // Variable operation by menu selection
671 //
672 EFI_STATUS
673 Var_UpdateBootOption (
674 IN BMM_CALLBACK_DATA *CallbackData,
675 IN FILE_EXPLORER_NV_DATA *NvRamMap
676 );
677
678 EFI_STATUS
679 Var_DelBootOption (VOID);
680
681 EFI_STATUS
682 Var_ChangeBootOrder (VOID);
683
684 EFI_STATUS
685 Var_UpdateDriverOption (
686 IN BMM_CALLBACK_DATA *CallbackData,
687 IN EFI_HII_HANDLE HiiHandle,
688 IN UINT16 *DescriptionData,
689 IN UINT16 *OptionalData,
690 IN UINT8 ForceReconnect
691 );
692
693 EFI_STATUS
694 Var_DelDriverOption (VOID);
695
696 EFI_STATUS
697 Var_ChangeDriverOrder (VOID);
698
699 EFI_STATUS
700 Var_UpdateConsoleInpOption (VOID);
701
702 EFI_STATUS
703 Var_UpdateConsoleOutOption (VOID);
704
705 EFI_STATUS
706 Var_UpdateErrorOutOption (VOID);
707
708 VOID
709 Var_UpdateAllConsoleOption (VOID);
710
711 EFI_STATUS
712 Var_UpdateBootNext (
713 IN BMM_CALLBACK_DATA *CallbackData
714 );
715
716 EFI_STATUS
717 Var_UpdateBootOrder (
718 IN BMM_CALLBACK_DATA *CallbackData
719 );
720
721 EFI_STATUS
722 Var_UpdateDriverOrder (
723 IN BMM_CALLBACK_DATA *CallbackData
724 );
725
726 EFI_STATUS
727 Var_UpdateBBSOption (
728 IN BMM_CALLBACK_DATA *CallbackData
729 );
730
731 EFI_STATUS
732 Var_UpdateConMode (
733 IN BMM_CALLBACK_DATA *CallbackData
734 );
735
736 //
737 // Following are page create and refresh functions
738 //
739 VOID
740 RefreshUpdateData (
741 VOID
742 );
743
744 VOID
745 CleanUpPage (
746 IN UINT16 LabelId,
747 IN BMM_CALLBACK_DATA *CallbackData
748 );
749
750 EFI_STATUS
751 UpdatePage (
752 IN BMM_CALLBACK_DATA *CallbackData,
753 IN BM_MENU_OPTION *UpdatingMenu,
754 IN UINT16 UpdatingPage,
755 IN UINT16 UpdatingManner,
756 IN UINT16 QuestionIdStart,
757 IN UINT16 GotoForm,
758 IN UINT16 GotoAlternateForm,
759 IN EFI_STRING_ID DisplayTokenStart,
760 IN EFI_STRING_ID HelpTokenStart,
761 IN UINT16 KeyValueStart
762 );
763
764 VOID
765 UpdateBootAddPage (
766 IN BMM_CALLBACK_DATA *CallbackData
767 );
768
769 VOID
770 UpdateBootDelPage (
771 IN BMM_CALLBACK_DATA *CallbackData
772 );
773
774 VOID
775 UpdateDrvAddFilePage (
776 IN BMM_CALLBACK_DATA *CallbackData
777 );
778
779 VOID
780 UpdateDrvAddHandlePage (
781 IN BMM_CALLBACK_DATA *CallbackData
782 );
783
784 VOID
785 UpdateDrvDelPage (
786 IN BMM_CALLBACK_DATA *CallbackData
787 );
788
789 VOID
790 UpdateDriverAddHandleDescPage (
791 IN BMM_CALLBACK_DATA *CallbackData
792 );
793
794 VOID
795 UpdateBootTimeOut (
796 IN BMM_CALLBACK_DATA *CallbackData
797 );
798
799 VOID
800 UpdateConInPage (
801 IN BMM_CALLBACK_DATA *CallbackData
802 );
803
804 VOID
805 UpdateConOutPage (
806 IN BMM_CALLBACK_DATA *CallbackData
807 );
808
809 VOID
810 UpdateStdErrPage (
811 IN BMM_CALLBACK_DATA *CallbackData
812 );
813
814 VOID
815 UpdatePageBody (
816 IN UINT16 UpdatePageId,
817 IN BMM_CALLBACK_DATA *CallbackData
818 );
819
820 VOID
821 UpdateCOM1Page (
822 IN BMM_CALLBACK_DATA *CallbackData
823 );
824
825 VOID
826 UpdateCOM2Page (
827 IN BMM_CALLBACK_DATA *CallbackData
828 );
829
830 VOID
831 UpdateBootOrderPage (
832 IN BMM_CALLBACK_DATA *CallbackData
833 );
834
835 VOID
836 UpdateDriverOrderPage (
837 IN BMM_CALLBACK_DATA *CallbackData
838 );
839
840 VOID
841 UpdateBootNextPage (
842 IN BMM_CALLBACK_DATA *CallbackData
843 );
844
845 VOID
846 UpdateTimeOutPage (
847 IN BMM_CALLBACK_DATA *CallbackData
848 );
849
850 VOID
851 UpdateTerminalPage (
852 IN BMM_CALLBACK_DATA *CallbackData
853 );
854
855 VOID
856 UpdateConModePage (
857 IN BMM_CALLBACK_DATA *CallbackData
858 );
859
860 VOID
861 UpdateConCOMPage (
862 IN BMM_CALLBACK_DATA *CallbackData
863 );
864
865 VOID
866 UpdateSetLegacyDeviceOrderPage (
867 IN UINT16 UpdatePageId,
868 IN BMM_CALLBACK_DATA *CallbackData
869 );
870
871 EFI_STATUS
872 BootLegacy (
873 IN UINT16 BbsType,
874 IN UINT16 BbsFlag
875 );
876
877 BM_MENU_ENTRY *
878 GetCurrentTerminal (
879 UINTN TerminalNumber
880 );
881
882 EFI_FILE_HANDLE
883 EfiLibOpenRoot (
884 IN EFI_HANDLE DeviceHandle
885 );
886
887 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
888 EfiLibFileSystemVolumeLabelInfo (
889 IN EFI_FILE_HANDLE FHand
890 );
891
892 EFI_FILE_INFO *
893 EfiLibFileInfo (
894 IN EFI_FILE_HANDLE FHand
895 );
896
897 UINTN
898 UnicodeToAscii (
899 IN CHAR16 *UStr,
900 IN UINTN Length,
901 OUT CHAR8 *AStr
902 );
903
904 CHAR16 *
905 DevicePathToStr (
906 EFI_DEVICE_PATH_PROTOCOL *DevPath
907 );
908
909 VOID *
910 EfiAllocateZeroPool (
911 IN UINTN Size
912 );
913
914 EFI_STATUS
915 EfiLibLocateProtocol (
916 IN EFI_GUID *ProtocolGuid,
917 OUT VOID **Interface
918 );
919
920 VOID *
921 EfiReallocatePool (
922 IN VOID *OldPool,
923 IN UINTN OldSize,
924 IN UINTN NewSize
925 );
926
927 CHAR16 *
928 DevicePathToStr (
929 EFI_DEVICE_PATH_PROTOCOL *DevPath
930 );
931
932 VOID *
933 BdsLibGetVariableAndSize (
934 IN CHAR16 *Name,
935 IN EFI_GUID *VendorGuid,
936 OUT UINTN *VarSize
937 );
938
939 EFI_STATUS
940 EfiLibDeleteVariable (
941 IN CHAR16 *VarName,
942 IN EFI_GUID *VarGuid
943 );
944
945 CHAR16 *
946 EfiStrDuplicate (
947 IN CHAR16 *Src
948 );
949
950 BOOLEAN
951 EfiLibMatchDevicePaths (
952 IN EFI_DEVICE_PATH_PROTOCOL *Multi,
953 IN EFI_DEVICE_PATH_PROTOCOL *Single
954 );
955
956 UINTN
957 EfiDevicePathInstanceCount (
958 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
959 );
960
961 EFI_STATUS
962 CreateMenuStringToken (
963 IN BMM_CALLBACK_DATA *CallbackData,
964 IN EFI_HII_HANDLE HiiHandle,
965 IN BM_MENU_OPTION *MenuOption
966 );
967
968 UINT16 *
969 EfiLibStrFromDatahub (
970 IN EFI_DEVICE_PATH_PROTOCOL *DevPath
971 );
972
973 VOID *
974 GetLegacyBootOptionVar (
975 IN UINTN DeviceType,
976 OUT UINTN *OptionIndex,
977 OUT UINTN *OptionSize
978 );
979
980 EFI_STATUS
981 InitializeBM (
982 VOID
983 );
984
985 EFI_STATUS
986 BdsStartBootMaint (
987 VOID
988 );
989
990 VOID
991 InitializeStringDepository (VOID);
992
993 EFI_STRING_ID
994 GetStringTokenFromDepository (
995 IN BMM_CALLBACK_DATA *CallbackData,
996 IN STRING_DEPOSITORY *StringDepository
997 );
998
999 VOID
1000 ReclaimStringDepository (
1001 VOID
1002 );
1003
1004 VOID
1005 CleanUpStringDepository (
1006 VOID
1007 );
1008
1009 EFI_STATUS
1010 ApplyChangeHandler (
1011 IN BMM_CALLBACK_DATA *Private,
1012 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap,
1013 IN EFI_FORM_ID FormId
1014 );
1015
1016 VOID
1017 DiscardChangeHandler (
1018 IN BMM_CALLBACK_DATA *Private,
1019 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
1020 );
1021
1022 VOID
1023 UpdatePageId (
1024 BMM_CALLBACK_DATA *Private,
1025 UINT16 NewPageId
1026 );
1027
1028 EFI_STATUS
1029 BootThisFile (
1030 IN BM_FILE_CONTEXT *FileContext
1031 );
1032
1033 BOOLEAN
1034 UpdateFileExplorer (
1035 IN BMM_CALLBACK_DATA *CallbackData,
1036 IN UINT16 KeyValue
1037 );
1038
1039 EFI_STATUS
1040 EFIAPI
1041 FileExplorerCallback (
1042 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
1043 IN EFI_BROWSER_ACTION Action,
1044 IN EFI_QUESTION_ID QuestionId,
1045 IN UINT8 Type,
1046 IN EFI_IFR_TYPE_VALUE *Value,
1047 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
1048 );
1049
1050 EFI_STATUS
1051 FormSetDispatcher (
1052 IN BMM_CALLBACK_DATA *CallbackData
1053 );
1054
1055 //
1056 // Global variable in this program (defined in data.c)
1057 //
1058 extern BM_MENU_OPTION BootOptionMenu;
1059 extern BM_MENU_OPTION DriverOptionMenu;
1060 extern BM_MENU_OPTION FsOptionMenu;
1061 extern BM_MENU_OPTION ConsoleInpMenu;
1062 extern BM_MENU_OPTION ConsoleOutMenu;
1063 extern BM_MENU_OPTION ConsoleErrMenu;
1064 extern BM_MENU_OPTION DirectoryMenu;
1065 extern BM_MENU_OPTION DriverMenu;
1066 extern BM_MENU_OPTION TerminalMenu;
1067 extern BM_MENU_OPTION LegacyFDMenu;
1068 extern BM_MENU_OPTION LegacyHDMenu;
1069 extern BM_MENU_OPTION LegacyCDMenu;
1070 extern BM_MENU_OPTION LegacyNETMenu;
1071 extern BM_MENU_OPTION LegacyBEVMenu;
1072 extern UINT16 TerminalType[];
1073 extern COM_ATTR BaudRateList[19];
1074 extern COM_ATTR DataBitsList[4];
1075 extern COM_ATTR ParityList[5];
1076 extern COM_ATTR StopBitsList[3];
1077 extern EFI_GUID Guid[4];
1078 extern EFI_HII_UPDATE_DATA gUpdateData;
1079 extern STRING_DEPOSITORY *FileOptionStrDepository;
1080 extern STRING_DEPOSITORY *ConsoleOptionStrDepository;
1081 extern STRING_DEPOSITORY *BootOptionStrDepository;
1082 extern STRING_DEPOSITORY *BootOptionHelpStrDepository;
1083 extern STRING_DEPOSITORY *DriverOptionStrDepository;
1084 extern STRING_DEPOSITORY *DriverOptionHelpStrDepository;
1085 extern STRING_DEPOSITORY *TerminalStrDepository;
1086 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];
1087 extern EFI_GUID EfiLegacyDevOrderGuid;
1088
1089 #endif