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