]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/BdsDxe/BootMaint/BootMaint.h
fix doxygen function comments.
[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 VAR_LEGACY_DEV_ORDER L"LegacyDevOrder"
27
28 #define VAR_CON_OUT_MODE 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 STR_FLOPPY L"Floppy Drive #%02x"
43 #define STR_HARDDISK L"HardDisk Drive #%02x"
44 #define STR_CDROM L"ATAPI CDROM Drive #%02x"
45 #define STR_NET L"NET Drive #%02x"
46 #define STR_BEV L"BEV Drive #%02x"
47 #define STR_FLOPPY_HELP L"Select Floppy Drive #%02x"
48 #define STR_HARDDISK_HELP L"Select HardDisk Drive #%02x"
49 #define STR_CDROM_HELP L"Select ATAPI CDROM Drive #%02x"
50 #define STR_NET_HELP L"NET Drive #%02x"
51 #define STR_BEV_HELP 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 extern EFI_GUID mBootMaintGuid;
65 extern EFI_GUID mFileExplorerGuid;
66
67 //
68 // These are the VFR compiler generated data representing our VFR data.
69 //
70 extern UINT8 BmBin[];
71 extern UINT8 FEBin[];
72
73 //
74 // Below are the number of options in Baudrate, Databits,
75 // Parity and Stopbits selection for serial ports.
76 //
77 #define BM_COM_ATTR_BUADRATE 19
78 #define BM_COM_ATTR_DATABITS 4
79 #define BM_COM_ATTR_PARITY 5
80 #define BM_COM_ATTR_STOPBITS 3
81
82 //
83 // Callback function helper
84 //
85 #define BMM_CALLBACK_DATA_SIGNATURE EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')
86 #define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
87
88 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
89
90 //
91 // Enumeration type definition
92 //
93 typedef UINT8 BBS_TYPE;
94
95 typedef enum {
96 PC_ANSI = 0,
97 VT_100,
98 VT_100_PLUS,
99 VT_UTF8
100 } TYPE_OF_TERMINAL;
101
102 typedef enum {
103 COM1 = 0,
104 COM2,
105 UNKNOW_COM
106 } TYPE_OF_COM;
107
108 typedef enum {
109 CONIN = 0,
110 CONOUT,
111 CONERR,
112 UNKNOWN_CON
113 } TYPE_OF_CON;
114
115 typedef enum {
116 BAUDRATE = 0,
117 DATABITS,
118 PARITY,
119 STOPBITS,
120 UNKNOW_ATTR
121 } TYPE_OF_ATTRIBUTE;
122
123 typedef enum {
124 MANNER_GOTO = 0,
125 MANNER_CHECK,
126 MANNER_ONEOF,
127 MANNER_USER_DEFINE
128 } TYPE_OF_UPATE_MANNER;
129
130 typedef enum {
131 INACTIVE_STATE = 0,
132 BOOT_FROM_FILE_STATE,
133 ADD_BOOT_OPTION_STATE,
134 ADD_DRIVER_OPTION_STATE,
135 UNKNOWN_STATE
136 } FILE_EXPLORER_STATE;
137
138 typedef enum {
139 FILE_SYSTEM,
140 DIRECTORY,
141 UNKNOWN_CONTEXT
142 } FILE_EXPLORER_DISPLAY_CONTEXT;
143
144 //
145 // All of the signatures that will be used in list structure
146 //
147 #define BM_MENU_OPTION_SIGNATURE EFI_SIGNATURE_32 ('m', 'e', 'n', 'u')
148 #define BM_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('l', 'o', 'a', 'd')
149 #define BM_CONSOLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('c', 'n', 's', 'l')
150 #define BM_FILE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('f', 'i', 'l', 'e')
151 #define BM_HANDLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('h', 'n', 'd', 'l')
152 #define BM_TERMINAL_OPTION_SIGNATURE EFI_SIGNATURE_32 ('t', 'r', 'm', 'l')
153 #define BM_MENU_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('e', 'n', 't', 'r')
154
155 #define BM_LOAD_CONTEXT_SELECT 0x0
156 #define BM_CONSOLE_CONTEXT_SELECT 0x1
157 #define BM_FILE_CONTEXT_SELECT 0x2
158 #define BM_HANDLE_CONTEXT_SELECT 0x3
159 #define BM_TERMINAL_CONTEXT_SELECT 0x5
160
161 #define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
162 #define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
163 #define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
164 #define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
165
166 //
167 // Buffer size for update data
168 //
169 #define UPDATE_DATA_SIZE 0x100000
170
171 //
172 // Namespace of callback keys used in display and file system navigation
173 //
174 #define MAX_BBS_OFFSET 0xE000
175 #define NET_OPTION_OFFSET 0xD800
176 #define BEV_OPTION_OFFSET 0xD000
177 #define FD_OPTION_OFFSET 0xC000
178 #define HD_OPTION_OFFSET 0xB000
179 #define CD_OPTION_OFFSET 0xA000
180 #define FILE_OPTION_OFFSET 0x8000
181 #define FILE_OPTION_MASK 0x7FFF
182 #define HANDLE_OPTION_OFFSET 0x7000
183 #define CONSOLE_OPTION_OFFSET 0x6000
184 #define TERMINAL_OPTION_OFFSET 0x5000
185 #define CONFIG_OPTION_OFFSET 0x1200
186 #define KEY_VALUE_OFFSET 0x1100
187 #define FORM_ID_OFFSET 0x1000
188
189 //
190 // VarOffset that will be used to create question
191 // all these values are computed from the structure
192 // defined below
193 //
194 #define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field)))
195
196 //
197 // Question Id of Zero is invalid, so add an offset to it
198 //
199 #define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET)
200
201 #define BOOT_TIME_OUT_VAR_OFFSET VAR_OFFSET (BootTimeOut)
202 #define BOOT_NEXT_VAR_OFFSET VAR_OFFSET (BootNext)
203 #define COM1_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM1BaudRate)
204 #define COM1_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM1DataRate)
205 #define COM1_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM1StopBits)
206 #define COM1_PARITY_VAR_OFFSET VAR_OFFSET (COM1Parity)
207 #define COM1_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType)
208 #define COM2_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM2BaudRate)
209 #define COM2_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM2DataRate)
210 #define COM2_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM2StopBits)
211 #define COM2_PARITY_VAR_OFFSET VAR_OFFSET (COM2Parity)
212 #define COM2_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType)
213 #define DRV_ADD_HANDLE_DESC_VAR_OFFSET VAR_OFFSET (DriverAddHandleDesc)
214 #define DRV_ADD_ACTIVE_VAR_OFFSET VAR_OFFSET (DriverAddActive)
215 #define DRV_ADD_RECON_VAR_OFFSET VAR_OFFSET (DriverAddForceReconnect)
216 #define CON_IN_COM1_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM1)
217 #define CON_IN_COM2_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM2)
218 #define CON_OUT_COM1_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM1)
219 #define CON_OUT_COM2_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM2)
220 #define CON_ERR_COM1_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM1)
221 #define CON_ERR_COM2_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM2)
222 #define CON_MODE_VAR_OFFSET VAR_OFFSET (ConsoleOutMode)
223 #define CON_DEVICE_VAR_OFFSET VAR_OFFSET (ConsoleCheck)
224 #define OPTION_ORDER_VAR_OFFSET VAR_OFFSET (OptionOrder)
225 #define DRIVER_OPTION_ORDER_VAR_OFFSET VAR_OFFSET (DriverOptionToBeDeleted)
226 #define BOOT_OPTION_DEL_VAR_OFFSET VAR_OFFSET (BootOptionDel)
227 #define DRIVER_OPTION_DEL_VAR_OFFSET VAR_OFFSET (DriverOptionDel)
228 #define DRIVER_ADD_OPTION_VAR_OFFSET VAR_OFFSET (DriverAddHandleOptionalData)
229 #define COM_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COMBaudRate)
230 #define COM_DATA_RATE_VAR_OFFSET VAR_OFFSET (COMDataRate)
231 #define COM_STOP_BITS_VAR_OFFSET VAR_OFFSET (COMStopBits)
232 #define COM_PARITY_VAR_OFFSET VAR_OFFSET (COMParity)
233 #define COM_TERMINAL_VAR_OFFSET VAR_OFFSET (COMTerminalType)
234 #define LEGACY_FD_VAR_OFFSET VAR_OFFSET (LegacyFD)
235 #define LEGACY_HD_VAR_OFFSET VAR_OFFSET (LegacyHD)
236 #define LEGACY_CD_VAR_OFFSET VAR_OFFSET (LegacyCD)
237 #define LEGACY_NET_VAR_OFFSET VAR_OFFSET (LegacyNET)
238 #define LEGACY_BEV_VAR_OFFSET VAR_OFFSET (LegacyBEV)
239
240 #define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
241 #define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
242 #define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
243 #define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
244 #define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
245 #define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
246 #define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
247 #define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
248 #define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
249 #define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
250 #define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
251 #define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
252 #define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
253 #define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
254 #define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
255 #define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
256 #define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
257 #define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
258 #define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
259 #define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
260 #define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
261 #define CON_MODE_QUESTION_ID QUESTION_ID (ConsoleOutMode)
262 #define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
263 #define OPTION_ORDER_QUESTION_ID QUESTION_ID (OptionOrder)
264 #define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
265 #define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
266 #define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
267 #define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
268 #define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
269 #define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
270 #define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
271 #define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
272 #define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
273 #define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD)
274 #define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD)
275 #define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD)
276 #define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET)
277 #define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV)
278
279 #define STRING_DEPOSITORY_NUMBER 8
280
281 ///
282 /// Serial Ports attributes, first one is the value for
283 /// return from callback function, stringtoken is used to
284 /// display the value properly
285 ///
286 typedef struct {
287 UINTN Value;
288 UINT16 StringToken;
289 } COM_ATTR;
290
291 #pragma pack(1)
292 typedef struct {
293 BBS_TYPE BbsType;
294 //
295 // Length = sizeof (UINT16) + SIZEOF (Data)
296 //
297 UINT16 Length;
298 UINT16 *Data;
299 } BM_LEGACY_DEV_ORDER_CONTEXT;
300 #pragma pack()
301
302 typedef struct {
303 UINT64 BaudRate;
304 UINT8 DataBits;
305 UINT8 Parity;
306 UINT8 StopBits;
307
308 UINT8 BaudRateIndex;
309 UINT8 DataBitsIndex;
310 UINT8 ParityIndex;
311 UINT8 StopBitsIndex;
312
313 UINT8 IsConIn;
314 UINT8 IsConOut;
315 UINT8 IsStdErr;
316 UINT8 TerminalType;
317
318 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
319 } BM_TERMINAL_CONTEXT;
320
321 typedef struct {
322 BOOLEAN IsBootNext;
323 BOOLEAN LoadOptionModified;
324 BOOLEAN Deleted;
325
326 BOOLEAN IsLegacy;
327 BOOLEAN IsActive;
328 BOOLEAN ForceReconnect;
329 UINTN OptionalDataSize;
330
331 UINTN LoadOptionSize;
332 UINT8 *LoadOption;
333
334 UINT32 Attributes;
335 UINT16 FilePathListLength;
336 UINT16 *Description;
337 EFI_DEVICE_PATH_PROTOCOL *FilePathList;
338 UINT8 *OptionalData;
339
340 UINT16 BbsIndex;
341 } BM_LOAD_CONTEXT;
342
343 typedef struct {
344 BBS_TABLE *BbsTable;
345 UINTN Index;
346 UINTN BbsCount;
347 UINT16 *Description;
348 } BM_LEGACY_DEVICE_CONTEXT;
349
350 typedef struct {
351
352 BOOLEAN IsActive;
353
354 BOOLEAN IsTerminal;
355
356 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
357 } BM_CONSOLE_CONTEXT;
358
359 typedef struct {
360 UINTN Column;
361 UINTN Row;
362 } CONSOLE_OUT_MODE;
363
364 typedef struct {
365 EFI_HANDLE Handle;
366 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
367 EFI_FILE_HANDLE FHandle;
368 UINT16 *FileName;
369 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *Info;
370
371 BOOLEAN IsRoot;
372 BOOLEAN IsDir;
373 BOOLEAN IsRemovableMedia;
374 BOOLEAN IsLoadFile;
375 BOOLEAN IsBootLegacy;
376 } BM_FILE_CONTEXT;
377
378 typedef struct {
379 EFI_HANDLE Handle;
380 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
381 } BM_HANDLE_CONTEXT;
382
383 typedef struct {
384 UINTN Signature;
385 LIST_ENTRY Head;
386 UINTN MenuNumber;
387 } BM_MENU_OPTION;
388
389 typedef struct {
390 UINTN Signature;
391 LIST_ENTRY Link;
392 UINTN OptionNumber;
393 UINT16 *DisplayString;
394 UINT16 *HelpString;
395 EFI_STRING_ID DisplayStringToken;
396 EFI_STRING_ID HelpStringToken;
397 UINTN ContextSelection;
398 VOID *VariableContext;
399 } BM_MENU_ENTRY;
400
401 typedef struct {
402 //
403 // Shared callback data.
404 //
405 UINTN Signature;
406
407 BM_MENU_ENTRY *MenuEntry;
408 BM_HANDLE_CONTEXT *HandleContext;
409 BM_FILE_CONTEXT *FileContext;
410 BM_LOAD_CONTEXT *LoadContext;
411 BM_TERMINAL_CONTEXT *TerminalContext;
412 UINTN CurrentTerminal;
413 BBS_TYPE BbsType;
414
415 //
416 // BMM main formset callback data.
417 //
418 EFI_HII_HANDLE BmmHiiHandle;
419 EFI_HANDLE BmmDriverHandle;
420 EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess;
421 EFI_FORM_ID BmmCurrentPageId;
422 EFI_FORM_ID BmmPreviousPageId;
423 BOOLEAN BmmAskSaveOrNot;
424 BMM_FAKE_NV_DATA BmmFakeNvData;
425 BMM_FAKE_NV_DATA BmmOldFakeNVData;
426
427 //
428 // File explorer formset callback data.
429 //
430 EFI_HII_HANDLE FeHiiHandle;
431 EFI_HANDLE FeDriverHandle;
432 EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
433 FILE_EXPLORER_STATE FeCurrentState;
434 FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext;
435 FILE_EXPLORER_NV_DATA FeFakeNvData;
436 } BMM_CALLBACK_DATA;
437
438 typedef struct _STRING_LIST_NODE {
439 EFI_STRING_ID StringToken;
440 struct _STRING_LIST_NODE *Next;
441 } STRING_LIST_NODE;
442
443 typedef struct _STRING_DEPOSITORY {
444 UINTN TotalNodeNumber;
445 STRING_LIST_NODE *CurrentNode;
446 STRING_LIST_NODE *ListHead;
447 } STRING_DEPOSITORY;
448
449 //
450 // #pragma pack()
451 //
452 // For initializing File System menu
453 //
454
455 /**
456 This function build the FsOptionMenu list which records all
457 available file system in the system. They includes all instances
458 of EFI_SIMPLE_FILE_SYSTEM_PROTOCOL, all instances of EFI_LOAD_FILE_SYSTEM
459 and all type of legacy boot device.
460
461 @param CallbackData BMM context data
462
463 @retval EFI_SUCCESS Success find the file system
464 @retval EFI_OUT_OF_RESOURCES Can not create menu entry
465
466 **/
467 EFI_STATUS
468 BOpt_FindFileSystem (
469 IN BMM_CALLBACK_DATA *CallbackData
470 )
471 ;
472
473 /**
474 Find files under current directory
475 All files and sub-directories in current directory
476 will be stored in DirectoryMenu for future use.
477
478 @param CallbackData The BMM context data.
479 @param MenuEntry The Menu Entry.
480
481 @retval EFI_SUCCESS Get files from current dir successfully.
482 @return Other value if can't get files from current dir.
483
484 **/
485 EFI_STATUS
486 BOpt_FindFiles (
487 IN BMM_CALLBACK_DATA *CallbackData,
488 IN BM_MENU_ENTRY *MenuEntry
489 )
490 ;
491
492 /**
493
494 Find drivers that will be added as Driver#### variables from handles
495 in current system environment
496 All valid handles in the system except those consume SimpleFs, LoadFile
497 are stored in DriverMenu for future use.
498
499 @retval EFI_SUCCESS The function complets successfully.
500 @return Other value if failed to build the DriverMenu.
501
502 **/
503 EFI_STATUS
504 BOpt_FindDrivers (
505 VOID
506 )
507 ;
508
509 /**
510
511 Build the BootOptionMenu according to BootOrder Variable.
512 This Routine will access the Boot#### to get EFI_LOAD_OPTION.
513
514 @param CallbackData The BMM context data.
515
516 @return The number of the Var Boot####.
517
518 **/
519 EFI_STATUS
520 BOpt_GetBootOptions (
521 IN BMM_CALLBACK_DATA *CallbackData
522 );
523
524 /**
525
526 Build up all DriverOptionMenu
527
528 @param CallbackData The BMM context data.
529
530 @return EFI_SUCESS The functin completes successfully.
531 @retval EFI_OUT_OF_RESOURCES Not enough memory to compete the operation.
532
533
534 **/
535 EFI_STATUS
536 BOpt_GetDriverOptions (
537 IN BMM_CALLBACK_DATA *CallbackData
538 );
539
540
541 /**
542 Build the LegacyFDMenu LegacyHDMenu LegacyCDMenu according to LegacyBios.GetBbsInfo().
543
544
545
546 @retval EFI_SUCCESS The function complete successfully.
547 @retval EFI_OUT_OF_RESOURCES No enough memory to complete this function.
548
549 **/
550 EFI_STATUS
551 BOpt_GetLegacyOptions (
552 VOID
553 );
554
555 /**
556 Free out resouce allocated from Legacy Boot Options.
557
558 .
559
560 .
561
562 **/
563 VOID
564 BOpt_FreeLegacyOptions (
565 VOID
566 );
567
568 /**
569 Free resources allocated in Allocate Rountine.
570
571 @param FreeMenu Menu to be freed
572
573
574
575 **/
576 VOID
577 BOpt_FreeMenu (
578 BM_MENU_OPTION *FreeMenu
579 );
580
581
582 /**
583
584 Append file name to existing file name.
585
586 @param Str1 The existing file name
587 @param Str2 The file name to be appended
588
589 @return Allocate a new string to hold the appended result.
590 Caller is responsible to free the returned string.
591
592 **/
593 CHAR16 *
594 BOpt_AppendFileName (
595 IN CHAR16 *Str1,
596 IN CHAR16 *Str2
597 );
598
599 /**
600
601 Check whether current FileName point to a valid
602 Efi Image File.
603
604 @param FileName File need to be checked.
605
606 @retval TRUE Is Efi Image
607 @retval FALSE Not a valid Efi Image
608
609 **/
610 BOOLEAN
611 BOpt_IsEfiImageName (
612 IN UINT16 *FileName
613 );
614
615 /**
616
617 Check whether current FileName point to a valid Efi Application
618
619 @param Dir Pointer to current Directory
620 @param FileName Pointer to current File name.
621
622 @retval TRUE Is a valid Efi Application
623 @retval FALSE not a valid Efi Application
624
625 **/
626 BOOLEAN
627 BOpt_IsEfiApp (
628 IN EFI_FILE_HANDLE Dir,
629 IN UINT16 *FileName
630 );
631
632 /**
633
634 Get the Option Number that has not been allocated for use.
635
636 @return The available Option Number.
637
638 **/
639 UINT16
640 BOpt_GetBootOptionNumber (
641 VOID
642 );
643
644 /**
645
646 Get the Option Number that is not in use.
647
648 @return The unused Option Number.
649
650 **/
651 UINT16
652 BOpt_GetDriverOptionNumber (
653 VOID
654 );
655
656 /**
657 Create a menu entry give a Menu type.
658
659 @param MenuType The Menu type to be created.
660
661
662 @retval NULL If failed to create the menu.
663 @return The menu.
664
665 **/
666 BM_MENU_ENTRY *
667 BOpt_CreateMenuEntry (
668 UINTN MenuType
669 );
670
671 /**
672 Free up all resource allocated for a BM_MENU_ENTRY.
673
674 @param MenuEntry A pointer to BM_MENU_ENTRY.
675
676 **/
677 VOID
678 BOpt_DestroyMenuEntry (
679 BM_MENU_ENTRY *MenuEntry
680 );
681
682 /**
683 Get the Menu Entry from the list in Menu Entry List.
684
685 If MenuNumber is great or equal to the number of Menu
686 Entry in the list, then ASSERT.
687
688 @param MenuOption The Menu Entry List to read the menu entry.
689 @param MenuNumber The index of Menu Entry.
690
691 @return The Menu Entry.
692
693 **/
694 BM_MENU_ENTRY *
695 BOpt_GetMenuEntry (
696 BM_MENU_OPTION *MenuOption,
697 UINTN MenuNumber
698 );
699
700 //
701 // Locate all serial io devices for console
702 //
703 /**
704 Build a list containing all serial devices.
705
706
707 @retval EFI_SUCCESS The function complete successfully.
708 @retval EFI_UNSUPPORTED No serial ports present.
709
710 **/
711 EFI_STATUS
712 LocateSerialIo (
713 VOID
714 );
715
716 //
717 // Initializing Console menu
718 //
719 /**
720 Build up ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
721
722
723
724
725 @retval EFI_SUCCESS The function always complete successfully.
726
727 **/
728 EFI_STATUS
729 GetAllConsoles(
730 VOID
731 );
732
733 //
734 // Get current mode information
735 //
736 /**
737 Get mode number according to column and row
738
739
740 @param CallbackData The BMM context data.
741
742
743
744 **/
745 VOID
746 GetConsoleOutMode (
747 IN BMM_CALLBACK_DATA *CallbackData
748 );
749
750 //
751 // Cleaning up console menu
752 //
753 /**
754 Free ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
755
756
757 EDES_TODO: Add parameter description
758
759 @retval EFI_SUCCESS The function always complete successfully.
760 **/
761 EFI_STATUS
762 FreeAllConsoles (
763 VOID
764 );
765
766 /**
767 Update the device path that describing a terminal device
768 based on the new BaudRate, Data Bits, parity and Stop Bits
769 set.
770
771 @param DevicePath
772
773
774
775 **/
776 VOID
777 ChangeVariableDevicePath (
778 IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath
779 )
780 ;
781
782 /**
783 Update the multi-instance device path of Terminal Device based on
784 the global TerminalMenu. If ChangeTernimal is TRUE, the terminal
785 device path in the Terminal Device in TerminalMenu is also updated.
786
787 @param DevicePath The multi-instance device path.
788 @param ChangeTerminal TRUE, then device path in the Terminal Device
789 in TerminalMenu is also updated; FALSE, no update.
790
791 @return EFI_SUCCESS The function completes successfully.
792
793 **/
794 EFI_STATUS
795 ChangeTerminalDevicePath (
796 IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath,
797 IN BOOLEAN ChangeTerminal
798 );
799 //
800 // Variable operation by menu selection
801 //
802 /**
803 This function create a currently loaded Boot Option from
804 the BMM. It then appends this Boot Option to the end of
805 the "BootOrder" list. It also append this Boot Opotion to the end
806 of BootOptionMenu.
807
808 @param CallbackData The BMM context data.
809 @param NvRamMap The file explorer formset internal state.
810
811 @retval EFI_OUT_OF_RESOURCES If not enought memory to complete the operation.
812 @retval EFI_SUCCESS If function completes successfully.
813
814 **/
815 EFI_STATUS
816 Var_UpdateBootOption (
817 IN BMM_CALLBACK_DATA *CallbackData,
818 IN FILE_EXPLORER_NV_DATA *NvRamMap
819 );
820
821 /**
822 Delete Boot Option that represent a Deleted state in BootOptionMenu.
823 After deleting this boot option, call Var_ChangeBootOrder to
824 make sure BootOrder is in valid state.
825
826
827 EDES_TODO: Add parameter description
828
829 @retval EFI_SUCCESS If all boot load option EFI Variables corresponding to
830 BM_LOAD_CONTEXT marked for deletion is deleted
831 @return Others If failed to update the "BootOrder" variable after deletion.
832
833 **/
834 EFI_STATUS
835 Var_DelBootOption (
836 VOID
837 );
838
839 /**
840 After any operation on Boot####, there will be a discrepancy in BootOrder.
841 Since some are missing but in BootOrder, while some are present but are
842 not reflected by BootOrder. Then a function rebuild BootOrder from
843 scratch by content from BootOptionMenu is needed.
844
845
846
847
848 @retval EFI_SUCCESS The boot order is updated successfully.
849 @return EFI_STATUS other than EFI_SUCCESS if failed to
850 Set the "BootOrder" EFI Variable.
851
852 **/
853 EFI_STATUS
854 Var_ChangeBootOrder (
855 VOID
856 );
857
858 /**
859 This function create a currently loaded Drive Option from
860 the BMM. It then appends this Driver Option to the end of
861 the "DriverOrder" list. It append this Driver Opotion to the end
862 of DriverOptionMenu.
863
864 @param CallbackData The BMM context data.
865 @param HiiHandle The HII handle associated with the BMM formset.
866 @param DescriptionData The description of this driver option.
867 @param OptionalData The optional load option.
868 @param ForceReconnect EDES_TODO: Add parameter description
869
870 @retval EFI_OUT_OF_RESOURCES If not enought memory to complete the operation.
871 @retval EFI_SUCCESS If function completes successfully.
872
873 **/
874 EFI_STATUS
875 Var_UpdateDriverOption (
876 IN BMM_CALLBACK_DATA *CallbackData,
877 IN EFI_HII_HANDLE HiiHandle,
878 IN UINT16 *DescriptionData,
879 IN UINT16 *OptionalData,
880 IN UINT8 ForceReconnect
881 );
882
883 /**
884 Delete Load Option that represent a Deleted state in BootOptionMenu.
885 After deleting this Driver option, call Var_ChangeDriverOrder to
886 make sure DriverOrder is in valid state.
887
888
889
890
891 @retval EFI_SUCCESS Load Option is successfully updated.
892 @return Other value than EFI_SUCCESS if failed to update "Driver Order" EFI
893 Variable.
894
895 **/
896 EFI_STATUS
897 Var_DelDriverOption (
898 VOID
899 );
900
901 /**
902 After any operation on Driver####, there will be a discrepancy in
903 DriverOrder. Since some are missing but in DriverOrder, while some
904 are present but are not reflected by DriverOrder. Then a function
905 rebuild DriverOrder from scratch by content from DriverOptionMenu is
906 needed.
907
908
909
910
911 @retval EFI_SUCCESS The driver order is updated successfully.
912 @return EFI_STATUS other than EFI_SUCCESS if failed to
913 Set the "DriverOrder" EFI Variable.
914
915 **/
916 EFI_STATUS
917 Var_ChangeDriverOrder (
918 VOID
919 );
920
921 /**
922 This function delete and build multi-instance device path ConIn
923 console device.
924
925
926
927
928 @retval EFI_SUCCESS The function complete successfully.
929 @return The EFI variable can be saved. See gRT->SetVariable
930 for detail return information.
931 **/
932 EFI_STATUS
933 Var_UpdateConsoleInpOption (
934 VOID
935 );
936
937 /**
938 This function delete and build multi-instance device path ConOut
939 console device.
940
941
942
943
944 @retval EFI_SUCCESS The function complete successfully.
945 @return The EFI variable can be saved. See gRT->SetVariable
946 for detail return information.
947 **/
948 EFI_STATUS
949 Var_UpdateConsoleOutOption (
950 VOID
951 );
952
953 /**
954 This function delete and build multi-instance device path ErrOut
955 console device.
956
957
958
959
960 @retval EFI_SUCCESS The function complete successfully.
961 @return The EFI variable can be saved. See gRT->SetVariable
962 for detail return information.
963 **/
964 EFI_STATUS
965 Var_UpdateErrorOutOption (
966 VOID
967 );
968
969 /**
970 Update the device path of "ConOut", "ConIn" and "ErrOut"
971 based on the new BaudRate, Data Bits, parity and Stop Bits
972 set.
973
974
975
976
977
978 **/
979 VOID
980 Var_UpdateAllConsoleOption (
981 VOID
982 );
983
984 /**
985 This function update the "BootNext" EFI Variable. If there is
986 no "BootNex" specified in BMM, this EFI Variable is deleted.
987 It also update the BMM context data specified the "BootNext"
988 vaule.
989
990 @param CallbackData The BMM context data.
991
992 @retval EFI_SUCCESS The function complete successfully.
993 @return The EFI variable can be saved. See gRT->SetVariable
994 for detail return information.
995
996 **/
997 EFI_STATUS
998 Var_UpdateBootNext (
999 IN BMM_CALLBACK_DATA *CallbackData
1000 );
1001
1002 /**
1003 This function update the "BootOrder" EFI Variable based on
1004 BMM Formset's NV map. It then refresh BootOptionMenu
1005 with the new "BootOrder" list.
1006
1007 @param CallbackData The BMM context data.
1008
1009 @retval EFI_SUCCESS The function complete successfully.
1010 @retval EFI_SUCCESS Not enough memory to complete the function.
1011 @return The EFI variable can be saved. See gRT->SetVariable
1012 for detail return information.
1013
1014 **/
1015 EFI_STATUS
1016 Var_UpdateBootOrder (
1017 IN BMM_CALLBACK_DATA *CallbackData
1018 );
1019
1020 /**
1021 This function update the "DriverOrder" EFI Variable based on
1022 BMM Formset's NV map. It then refresh DriverOptionMenu
1023 with the new "DriverOrder" list.
1024
1025 @param CallbackData The BMM context data.
1026
1027 @retval EFI_SUCCESS The function complete successfully.
1028 @retval EFI_SUCCESS Not enough memory to complete the function.
1029 @return The EFI variable can be saved. See gRT->SetVariable
1030 for detail return information.
1031
1032 **/
1033 EFI_STATUS
1034 Var_UpdateDriverOrder (
1035 IN BMM_CALLBACK_DATA *CallbackData
1036 );
1037
1038 /**
1039 Update the legacy BBS boot option. L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable
1040 is udpated with the new Legacy Boot order. The EFI Variable of "Boot####" and gEfiGlobalVariableGuid
1041 is also updated.
1042
1043 @param CallbackData The context data for BMM.
1044
1045 @return EFI_SUCCESS The function completed successfully.
1046 @retval EFI_NOT_FOUND If L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable can be found.
1047
1048 **/
1049 EFI_STATUS
1050 Var_UpdateBBSOption (
1051 IN BMM_CALLBACK_DATA *CallbackData
1052 );
1053
1054 /**
1055 Update the Text Mode of Console.
1056
1057 @param CallbackData The context data for BMM.
1058
1059 @retval EFI_SUCCSS If the Text Mode of Console is updated.
1060 @return Other value if the Text Mode of Console is not updated.
1061
1062 **/
1063 EFI_STATUS
1064 Var_UpdateConMode (
1065 IN BMM_CALLBACK_DATA *CallbackData
1066 );
1067
1068 //
1069 // Following are page create and refresh functions
1070 //
1071 /**
1072 Refresh the global UpdateData structure.
1073
1074
1075
1076
1077
1078 **/
1079 VOID
1080 RefreshUpdateData (
1081 VOID
1082 );
1083
1084 /**
1085 Clean up the dynamic opcode at label and form specified by
1086 both LabelId.
1087
1088 @param LabelId It is both the Form ID and Label ID for
1089 opcode deletion.
1090 @param CallbackData The BMM context data.
1091
1092
1093
1094 **/
1095 VOID
1096 CleanUpPage (
1097 IN UINT16 LabelId,
1098 IN BMM_CALLBACK_DATA *CallbackData
1099 );
1100
1101 /**
1102 Create a lit of boot option from global BootOptionMenu. It
1103 allow user to delete the boot option.
1104
1105 @param CallbackData The BMM context data.
1106
1107
1108
1109 **/
1110 VOID
1111 UpdateBootDelPage (
1112 IN BMM_CALLBACK_DATA *CallbackData
1113 );
1114
1115 /**
1116 Create a lit of driver option from global DriverMenu.
1117
1118 @param CallbackData The BMM context data.
1119
1120
1121
1122 **/
1123 VOID
1124 UpdateDrvAddHandlePage (
1125 IN BMM_CALLBACK_DATA *CallbackData
1126 );
1127
1128 /**
1129 Create a lit of driver option from global DriverOptionMenu. It
1130 allow user to delete the driver option.
1131
1132
1133 @param CallbackData The BMM context data.
1134
1135
1136
1137 **/
1138 VOID
1139 UpdateDrvDelPage (
1140 IN BMM_CALLBACK_DATA *CallbackData
1141 );
1142
1143 /**
1144 Prepare the page to allow user to add description for
1145 a Driver Option.
1146
1147 @param CallbackData The BMM context data.
1148
1149
1150
1151 **/
1152 VOID
1153 UpdateDriverAddHandleDescPage (
1154 IN BMM_CALLBACK_DATA *CallbackData
1155 );
1156
1157 /**
1158 Dispatch the correct update page function to call based on
1159 the UpdatePageId.
1160
1161 @param UpdatePageId The form ID.
1162 @param CallbackData The BMM context data.
1163
1164
1165
1166 **/
1167 VOID
1168 UpdatePageBody (
1169 IN UINT16 UpdatePageId,
1170 IN BMM_CALLBACK_DATA *CallbackData
1171 );
1172
1173 /**
1174 Create the dynamic page to allow user to set
1175 the "BootNext" vaule.
1176
1177 @param CallbackData The BMM context data.
1178
1179
1180
1181 **/
1182 VOID
1183 UpdateBootNextPage (
1184 IN BMM_CALLBACK_DATA *CallbackData
1185 );
1186
1187 /**
1188 Create the dynamic page to allow user to set
1189 the "TimeOut" vaule.
1190
1191 @param CallbackData The BMM context data.
1192
1193
1194
1195 **/
1196 VOID
1197 UpdateTimeOutPage (
1198 IN BMM_CALLBACK_DATA *CallbackData
1199 );
1200
1201 /**
1202 Create the dynamic page which allows user to
1203 set the property such as Baud Rate, Data Bits,
1204 Parity, Stop Bits, Terminal Type.
1205
1206 @param CallbackData The BMM context data.
1207
1208
1209
1210 **/
1211 VOID
1212 UpdateTerminalPage (
1213 IN BMM_CALLBACK_DATA *CallbackData
1214 );
1215
1216 /**
1217 Refresh the text mode page
1218
1219
1220 @param CallbackData The BMM context data.
1221
1222
1223
1224 **/
1225 VOID
1226 UpdateConModePage (
1227 IN BMM_CALLBACK_DATA *CallbackData
1228 );
1229
1230 /**
1231 Create a list of Goto Opcode for all terminal devices logged
1232 by TerminaMenu. This list will be inserted to form FORM_CON_COM_SETUP_ID.
1233
1234 @param CallbackData The BMM context data.
1235
1236
1237
1238 **/
1239 VOID
1240 UpdateConCOMPage (
1241 IN BMM_CALLBACK_DATA *CallbackData
1242 );
1243
1244 /**
1245 Create a dynamic page so that Legacy Device boot order
1246 can be set for specified device type.
1247
1248 @param UpdatePageId The form ID. It also spefies the legacy device type.
1249 @param CallbackData The BMM context data.
1250
1251
1252
1253 **/
1254 VOID
1255 UpdateSetLegacyDeviceOrderPage (
1256 IN UINT16 UpdatePageId,
1257 IN BMM_CALLBACK_DATA *CallbackData
1258 );
1259
1260
1261 /**
1262
1263 Function opens and returns a file handle to the root directory of a volume.
1264
1265
1266 @param DeviceHandle - A handle for a device
1267
1268 @return A valid file handle or NULL is returned
1269
1270 **/
1271 EFI_FILE_HANDLE
1272 EfiLibOpenRoot (
1273 IN EFI_HANDLE DeviceHandle
1274 );
1275
1276 /**
1277
1278 Function gets the file system information from an open file descriptor,
1279 and stores it in a buffer allocated from pool.
1280
1281
1282 @param FHand The file handle.
1283
1284 @return A pointer to a buffer with file information.
1285 @retval NULL is returned if failed to get Vaolume Label Info.
1286
1287 **/
1288 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
1289 EfiLibFileSystemVolumeLabelInfo (
1290 IN EFI_FILE_HANDLE FHand
1291 );
1292
1293 /**
1294
1295 Function gets the file information from an open file descriptor, and stores it
1296 in a buffer allocated from pool.
1297
1298 @param FHand File Handle.
1299
1300 @return A pointer to a buffer with file information or NULL is returned
1301
1302 **/
1303 EFI_FILE_INFO *
1304 EfiLibFileInfo (
1305 IN EFI_FILE_HANDLE FHand
1306 );
1307
1308 /**
1309 This function converts an input device structure to a Unicode string.
1310
1311 @param DevPath A pointer to the device path structure.
1312
1313 @return A new allocated Unicode string that represents the device path.
1314
1315 **/
1316 CHAR16 *
1317 DevicePathToStr (
1318 EFI_DEVICE_PATH_PROTOCOL *DevPath
1319 );
1320
1321 /**
1322
1323 Find the first instance of this Protocol
1324 in the system and return it's interface.
1325
1326
1327 @param ProtocolGuid Provides the protocol to search for
1328 @param Interface On return, a pointer to the first interface
1329 that matches ProtocolGuid
1330
1331 @retval EFI_SUCCESS A protocol instance matching ProtocolGuid was found
1332 @retval EFI_NOT_FOUND No protocol instances were found that match ProtocolGuid
1333
1334 **/
1335 EFI_STATUS
1336 EfiLibLocateProtocol (
1337 IN EFI_GUID *ProtocolGuid,
1338 OUT VOID **Interface
1339 );
1340
1341 /**
1342 Adjusts the size of a previously allocated buffer.
1343
1344
1345 @param OldPool - A pointer to the buffer whose size is being adjusted.
1346 @param OldSize - The size of the current buffer.
1347 @param NewSize - The size of the new buffer.
1348
1349 @return The newly allocated buffer.
1350 @retval NULL Allocation failed.
1351
1352 **/
1353 VOID *
1354 EfiReallocatePool (
1355 IN VOID *OldPool,
1356 IN UINTN OldSize,
1357 IN UINTN NewSize
1358 );
1359
1360 /**
1361 Read the EFI variable (VendorGuid/Name) and return a dynamically allocated
1362 buffer, and the size of the buffer. If failure return NULL.
1363
1364 @param Name String part of EFI variable name
1365 @param VendorGuid GUID part of EFI variable name
1366 @param VarSize Returns the size of the EFI variable that was read
1367
1368 @return Dynamically allocated memory that contains a copy of the EFI variable.
1369 @return Caller is responsible freeing the buffer.
1370 @retval NULL Variable was not read
1371
1372 **/
1373 VOID *
1374 BdsLibGetVariableAndSize (
1375 IN CHAR16 *Name,
1376 IN EFI_GUID *VendorGuid,
1377 OUT UINTN *VarSize
1378 );
1379
1380 /**
1381 Function deletes the variable specified by VarName and VarGuid.
1382
1383
1384 @param VarName - A Null-terminated Unicode string that is
1385 the name of the vendor's variable.
1386
1387 @param VarGuid - A unique identifier for the vendor.
1388
1389 @retval EFI_SUCCESS The variable was found and removed
1390 @retval EFI_UNSUPPORTED The variable store was inaccessible
1391 @retval EFI_OUT_OF_RESOURCES The temporary buffer was not available
1392 @retval EFI_NOT_FOUND The variable was not found
1393
1394 **/
1395 EFI_STATUS
1396 EfiLibDeleteVariable (
1397 IN CHAR16 *VarName,
1398 IN EFI_GUID *VarGuid
1399 );
1400
1401 /**
1402 Duplicate a string.
1403
1404 @param Src The source.
1405
1406 @return A new string which is duplicated copy of the source.
1407 @retval NULL If there is not enough memory.
1408
1409 **/
1410 CHAR16 *
1411 EfiStrDuplicate (
1412 IN CHAR16 *Src
1413 );
1414
1415 /**
1416 Function is used to determine the number of device path instances
1417 that exist in a device path.
1418
1419
1420 @param DevicePath A pointer to a device path data structure.
1421
1422 @return This function counts and returns the number of device path instances
1423 in DevicePath.
1424
1425 **/
1426 UINTN
1427 EfiDevicePathInstanceCount (
1428 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
1429 );
1430
1431 /**
1432 Create string tokens for a menu from its help strings and display strings
1433
1434
1435 @param CallbackData The BMM context data.
1436 @param HiiHandle Hii Handle of the package to be updated.
1437 @param MenuOption The Menu whose string tokens need to be created
1438
1439 @retval EFI_SUCCESS string tokens created successfully
1440 @retval others contain some errors
1441
1442 **/
1443 EFI_STATUS
1444 CreateMenuStringToken (
1445 IN BMM_CALLBACK_DATA *CallbackData,
1446 IN EFI_HII_HANDLE HiiHandle,
1447 IN BM_MENU_OPTION *MenuOption
1448 );
1449
1450 /**
1451 Get a string from the Data Hub record based on
1452 a device path.
1453
1454 @param DevPath The device Path.
1455
1456 @return A string located from the Data Hub records based on
1457 the device path.
1458 @retval NULL If failed to get the String from Data Hub.
1459
1460 **/
1461 UINT16 *
1462 EfiLibStrFromDatahub (
1463 IN EFI_DEVICE_PATH_PROTOCOL *DevPath
1464 );
1465
1466 /**
1467 Get the index number (#### in Boot####) for the boot option pointed to a BBS legacy device type
1468 specified by DeviceType.
1469
1470 @param DeviceType The legacy device type. It can be floppy, network, harddisk, cdrom,
1471 etc.
1472 @param OptionIndex Returns the index number (#### in Boot####).
1473 @param OptionSize Return the size of the Boot### variable.
1474
1475
1476
1477 **/
1478 VOID *
1479 GetLegacyBootOptionVar (
1480 IN UINTN DeviceType,
1481 OUT UINTN *OptionIndex,
1482 OUT UINTN *OptionSize
1483 );
1484
1485 /**
1486 Initialize the Boot Maintenance Utitliy.
1487
1488 @retval EFI_SUCCESS utility ended successfully.
1489 @retval others contain some errors.
1490
1491 **/
1492 EFI_STATUS
1493 InitializeBM (
1494 VOID
1495 );
1496
1497 /**
1498 Start boot maintenance manager
1499
1500
1501
1502
1503 @retval EFI_SUCCESS If BMM is invoked successfully.
1504 @return Other value if BMM return unsuccessfully.
1505
1506 **/
1507 EFI_STATUS
1508 BdsStartBootMaint (
1509 VOID
1510 );
1511
1512 /**
1513 Intialize all the string depositories.
1514
1515 **/
1516 VOID
1517 InitializeStringDepository (
1518 VOID
1519 );
1520
1521 /**
1522 Fetch a usable string node from the string depository and return the string token.
1523
1524
1525 @param CallbackData EDES_TODO: Add parameter description
1526 @param StringDepository - Pointer of the string depository.
1527
1528 @retval EFI_STRING_ID String token.
1529
1530 **/
1531 EFI_STRING_ID
1532 GetStringTokenFromDepository (
1533 IN BMM_CALLBACK_DATA *CallbackData,
1534 IN STRING_DEPOSITORY *StringDepository
1535 );
1536
1537 /**
1538 Reclaim string depositories by moving the current node pointer to list head..
1539 **/
1540 VOID
1541 ReclaimStringDepository (
1542 VOID
1543 );
1544
1545 /**
1546 Release resource for all the string depositories.
1547
1548 **/
1549 VOID
1550 CleanUpStringDepository (
1551 VOID
1552 );
1553
1554 /**
1555 Function handling request to apply changes for BMM pages.
1556
1557
1558 @param Private - Pointer to callback data buffer.
1559 @param CurrentFakeNVMap - Pointer to buffer holding data of various values used by BMM
1560 @param FormId - ID of the form which has sent the request to apply change.
1561
1562 @retval EFI_SUCCESS Change successfully applied.
1563 @retval Other Error occurs while trying to apply changes.
1564
1565 **/
1566 EFI_STATUS
1567 ApplyChangeHandler (
1568 IN BMM_CALLBACK_DATA *Private,
1569 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap,
1570 IN EFI_FORM_ID FormId
1571 );
1572
1573 /**
1574 Discard all changes done to the BMM pages such as Boot Order change,
1575 Driver order change.
1576
1577 @param Private The BMM context data.
1578 @param CurrentFakeNVMap The current Fack NV Map.
1579
1580 **/
1581 VOID
1582 DiscardChangeHandler (
1583 IN BMM_CALLBACK_DATA *Private,
1584 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
1585 );
1586
1587 /**
1588 Dispatch the display to the next page based on NewPageId.
1589
1590 @param Private The BMM context data.
1591 @param NewPageId The original page ID.
1592
1593 **/
1594 VOID
1595 UpdatePageId (
1596 BMM_CALLBACK_DATA *Private,
1597 UINT16 NewPageId
1598 );
1599
1600 /**
1601 Boot a file selected by user at File Expoloer of BMM.
1602
1603 @param FileContext The file context data, which contains the device path
1604 of the file to be boot from.
1605
1606 @retval EFI_SUCCESS The function completed successfull.
1607 @return Other value if the boot from the file fails.
1608
1609 **/
1610 EFI_STATUS
1611 BootThisFile (
1612 IN BM_FILE_CONTEXT *FileContext
1613 );
1614
1615 /**
1616 Update the file explower page with the refershed file system.
1617
1618
1619 @param CallbackData BMM context data
1620 @param KeyValue Key value to identify the type of data to expect.
1621
1622 @retval TRUE Inform the caller to create a callback packet to exit file explorer.
1623 @retval FALSE Indicate that there is no need to exit file explorer.
1624
1625 **/
1626 BOOLEAN
1627 UpdateFileExplorer (
1628 IN BMM_CALLBACK_DATA *CallbackData,
1629 IN UINT16 KeyValue
1630 );
1631
1632 /**
1633 This function processes the results of changes in configuration.
1634 When user select a interactive opcode, this callback will be triggered.
1635 Based on the Question(QuestionId) that triggers the callback, the corresponding
1636 actions is performed. It handles:
1637
1638 1) the addition of boot option.
1639 2) the addition of driver option.
1640 3) exit from file browser
1641 4) update of file content if a dir is selected.
1642 5) boot the file if a file is selected in "boot from file"
1643
1644
1645 @param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
1646 @param Action Specifies the type of action taken by the browser.
1647 @param QuestionId A unique value which is sent to the original exporting driver
1648 so that it can identify the type of data to expect.
1649 @param Type The type of value for the question.
1650 @param Value A pointer to the data being sent to the original exporting driver.
1651 @param ActionRequest On return, points to the action requested by the callback function.
1652
1653 @retval EFI_SUCCESS The callback successfully handled the action.
1654 @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
1655 @retval EFI_DEVICE_ERROR The variable could not be saved.
1656 @retval EFI_UNSUPPORTED The specified Action is not supported by the callback.
1657
1658 **/
1659 EFI_STATUS
1660 EFIAPI
1661 FileExplorerCallback (
1662 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
1663 IN EFI_BROWSER_ACTION Action,
1664 IN EFI_QUESTION_ID QuestionId,
1665 IN UINT8 Type,
1666 IN EFI_IFR_TYPE_VALUE *Value,
1667 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
1668 );
1669
1670 /**
1671 Dispatch BMM formset and FileExplorer formset.
1672
1673
1674 @param CallbackData The BMM context data.
1675
1676 @retval EFI_SUCCESS If function complete successfully.
1677 @return Other value if the Setup Browser process BMM's pages and
1678 return unsuccessfully.
1679
1680 **/
1681 EFI_STATUS
1682 FormSetDispatcher (
1683 IN BMM_CALLBACK_DATA *CallbackData
1684 );
1685
1686 /**
1687 Function returns the value of the specified variable.
1688
1689 @param Name A Null-terminated Unicode string that is
1690 the name of the vendor's variable.
1691 @param VendorGuid A unique identifier for the vendor.
1692
1693 @return The payload of the variable.
1694 @retval NULL If the variable can't be read.
1695
1696 **/
1697 VOID *
1698 EfiLibGetVariable (
1699 IN CHAR16 *Name,
1700 IN EFI_GUID *VendorGuid
1701 );
1702
1703 //
1704 // Global variable in this program (defined in data.c)
1705 //
1706 extern BM_MENU_OPTION BootOptionMenu;
1707 extern BM_MENU_OPTION DriverOptionMenu;
1708 extern BM_MENU_OPTION FsOptionMenu;
1709 extern BM_MENU_OPTION ConsoleInpMenu;
1710 extern BM_MENU_OPTION ConsoleOutMenu;
1711 extern BM_MENU_OPTION ConsoleErrMenu;
1712 extern BM_MENU_OPTION DirectoryMenu;
1713 extern BM_MENU_OPTION DriverMenu;
1714 extern BM_MENU_OPTION TerminalMenu;
1715 extern BM_MENU_OPTION LegacyFDMenu;
1716 extern BM_MENU_OPTION LegacyHDMenu;
1717 extern BM_MENU_OPTION LegacyCDMenu;
1718 extern BM_MENU_OPTION LegacyNETMenu;
1719 extern BM_MENU_OPTION LegacyBEVMenu;
1720 extern UINT16 TerminalType[];
1721 extern COM_ATTR BaudRateList[19];
1722 extern COM_ATTR DataBitsList[4];
1723 extern COM_ATTR ParityList[5];
1724 extern COM_ATTR StopBitsList[3];
1725 extern EFI_GUID TerminalTypeGuid[4];
1726 extern EFI_HII_UPDATE_DATA gUpdateData;
1727 extern STRING_DEPOSITORY *FileOptionStrDepository;
1728 extern STRING_DEPOSITORY *ConsoleOptionStrDepository;
1729 extern STRING_DEPOSITORY *BootOptionStrDepository;
1730 extern STRING_DEPOSITORY *BootOptionHelpStrDepository;
1731 extern STRING_DEPOSITORY *DriverOptionStrDepository;
1732 extern STRING_DEPOSITORY *DriverOptionHelpStrDepository;
1733 extern STRING_DEPOSITORY *TerminalStrDepository;
1734 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];
1735 extern EFI_GUID EfiLegacyDevOrderGuid;
1736
1737 #endif