]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/BdsDxe/BootMaint/BootMaint.h
clean up the un-suitable ';' location when declaring the functions.
[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 Find files under current directory
474 All files and sub-directories in current directory
475 will be stored in DirectoryMenu for future use.
476
477 @param CallbackData The BMM context data.
478 @param MenuEntry The Menu Entry.
479
480 @retval EFI_SUCCESS Get files from current dir successfully.
481 @return Other value if can't get files from current dir.
482
483 **/
484 EFI_STATUS
485 BOpt_FindFiles (
486 IN BMM_CALLBACK_DATA *CallbackData,
487 IN BM_MENU_ENTRY *MenuEntry
488 );
489
490 /**
491
492 Find drivers that will be added as Driver#### variables from handles
493 in current system environment
494 All valid handles in the system except those consume SimpleFs, LoadFile
495 are stored in DriverMenu for future use.
496
497 @retval EFI_SUCCESS The function complets successfully.
498 @return Other value if failed to build the DriverMenu.
499
500 **/
501 EFI_STATUS
502 BOpt_FindDrivers (
503 VOID
504 );
505
506 /**
507
508 Build the BootOptionMenu according to BootOrder Variable.
509 This Routine will access the Boot#### to get EFI_LOAD_OPTION.
510
511 @param CallbackData The BMM context data.
512
513 @return The number of the Var Boot####.
514
515 **/
516 EFI_STATUS
517 BOpt_GetBootOptions (
518 IN BMM_CALLBACK_DATA *CallbackData
519 );
520
521 /**
522
523 Build up all DriverOptionMenu
524
525 @param CallbackData The BMM context data.
526
527 @return EFI_SUCESS The functin completes successfully.
528 @retval EFI_OUT_OF_RESOURCES Not enough memory to compete the operation.
529
530
531 **/
532 EFI_STATUS
533 BOpt_GetDriverOptions (
534 IN BMM_CALLBACK_DATA *CallbackData
535 );
536
537
538 /**
539 Build the LegacyFDMenu LegacyHDMenu LegacyCDMenu according to LegacyBios.GetBbsInfo().
540
541
542
543 @retval EFI_SUCCESS The function complete successfully.
544 @retval EFI_OUT_OF_RESOURCES No enough memory to complete this function.
545
546 **/
547 EFI_STATUS
548 BOpt_GetLegacyOptions (
549 VOID
550 );
551
552 /**
553 Free out resouce allocated from Legacy Boot Options.
554
555 .
556
557 .
558
559 **/
560 VOID
561 BOpt_FreeLegacyOptions (
562 VOID
563 );
564
565 /**
566 Free resources allocated in Allocate Rountine.
567
568 @param FreeMenu Menu to be freed
569
570
571
572 **/
573 VOID
574 BOpt_FreeMenu (
575 BM_MENU_OPTION *FreeMenu
576 );
577
578
579 /**
580
581 Append file name to existing file name.
582
583 @param Str1 The existing file name
584 @param Str2 The file name to be appended
585
586 @return Allocate a new string to hold the appended result.
587 Caller is responsible to free the returned string.
588
589 **/
590 CHAR16 *
591 BOpt_AppendFileName (
592 IN CHAR16 *Str1,
593 IN CHAR16 *Str2
594 );
595
596 /**
597
598 Check whether current FileName point to a valid
599 Efi Image File.
600
601 @param FileName File need to be checked.
602
603 @retval TRUE Is Efi Image
604 @retval FALSE Not a valid Efi Image
605
606 **/
607 BOOLEAN
608 BOpt_IsEfiImageName (
609 IN UINT16 *FileName
610 );
611
612 /**
613
614 Check whether current FileName point to a valid Efi Application
615
616 @param Dir Pointer to current Directory
617 @param FileName Pointer to current File name.
618
619 @retval TRUE Is a valid Efi Application
620 @retval FALSE not a valid Efi Application
621
622 **/
623 BOOLEAN
624 BOpt_IsEfiApp (
625 IN EFI_FILE_HANDLE Dir,
626 IN UINT16 *FileName
627 );
628
629 /**
630
631 Get the Option Number that has not been allocated for use.
632
633 @return The available Option Number.
634
635 **/
636 UINT16
637 BOpt_GetBootOptionNumber (
638 VOID
639 );
640
641 /**
642
643 Get the Option Number that is not in use.
644
645 @return The unused Option Number.
646
647 **/
648 UINT16
649 BOpt_GetDriverOptionNumber (
650 VOID
651 );
652
653 /**
654 Create a menu entry give a Menu type.
655
656 @param MenuType The Menu type to be created.
657
658
659 @retval NULL If failed to create the menu.
660 @return The menu.
661
662 **/
663 BM_MENU_ENTRY *
664 BOpt_CreateMenuEntry (
665 UINTN MenuType
666 );
667
668 /**
669 Free up all resource allocated for a BM_MENU_ENTRY.
670
671 @param MenuEntry A pointer to BM_MENU_ENTRY.
672
673 **/
674 VOID
675 BOpt_DestroyMenuEntry (
676 BM_MENU_ENTRY *MenuEntry
677 );
678
679 /**
680 Get the Menu Entry from the list in Menu Entry List.
681
682 If MenuNumber is great or equal to the number of Menu
683 Entry in the list, then ASSERT.
684
685 @param MenuOption The Menu Entry List to read the menu entry.
686 @param MenuNumber The index of Menu Entry.
687
688 @return The Menu Entry.
689
690 **/
691 BM_MENU_ENTRY *
692 BOpt_GetMenuEntry (
693 BM_MENU_OPTION *MenuOption,
694 UINTN MenuNumber
695 );
696
697 //
698 // Locate all serial io devices for console
699 //
700 /**
701 Build a list containing all serial devices.
702
703
704 @retval EFI_SUCCESS The function complete successfully.
705 @retval EFI_UNSUPPORTED No serial ports present.
706
707 **/
708 EFI_STATUS
709 LocateSerialIo (
710 VOID
711 );
712
713 //
714 // Initializing Console menu
715 //
716 /**
717 Build up ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
718
719
720
721
722 @retval EFI_SUCCESS The function always complete successfully.
723
724 **/
725 EFI_STATUS
726 GetAllConsoles(
727 VOID
728 );
729
730 //
731 // Get current mode information
732 //
733 /**
734 Get mode number according to column and row
735
736
737 @param CallbackData The BMM context data.
738
739
740
741 **/
742 VOID
743 GetConsoleOutMode (
744 IN BMM_CALLBACK_DATA *CallbackData
745 );
746
747 //
748 // Cleaning up console menu
749 //
750 /**
751 Free ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
752
753
754 EDES_TODO: Add parameter description
755
756 @retval EFI_SUCCESS The function always complete successfully.
757 **/
758 EFI_STATUS
759 FreeAllConsoles (
760 VOID
761 );
762
763 /**
764 Update the device path that describing a terminal device
765 based on the new BaudRate, Data Bits, parity and Stop Bits
766 set.
767
768 @param DevicePath
769
770
771
772 **/
773 VOID
774 ChangeVariableDevicePath (
775 IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath
776 );
777
778 /**
779 Update the multi-instance device path of Terminal Device based on
780 the global TerminalMenu. If ChangeTernimal is TRUE, the terminal
781 device path in the Terminal Device in TerminalMenu is also updated.
782
783 @param DevicePath The multi-instance device path.
784 @param ChangeTerminal TRUE, then device path in the Terminal Device
785 in TerminalMenu is also updated; FALSE, no update.
786
787 @return EFI_SUCCESS The function completes successfully.
788
789 **/
790 EFI_STATUS
791 ChangeTerminalDevicePath (
792 IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath,
793 IN BOOLEAN ChangeTerminal
794 );
795 //
796 // Variable operation by menu selection
797 //
798 /**
799 This function create a currently loaded Boot Option from
800 the BMM. It then appends this Boot Option to the end of
801 the "BootOrder" list. It also append this Boot Opotion to the end
802 of BootOptionMenu.
803
804 @param CallbackData The BMM context data.
805 @param NvRamMap The file explorer formset internal state.
806
807 @retval EFI_OUT_OF_RESOURCES If not enought memory to complete the operation.
808 @retval EFI_SUCCESS If function completes successfully.
809
810 **/
811 EFI_STATUS
812 Var_UpdateBootOption (
813 IN BMM_CALLBACK_DATA *CallbackData,
814 IN FILE_EXPLORER_NV_DATA *NvRamMap
815 );
816
817 /**
818 Delete Boot Option that represent a Deleted state in BootOptionMenu.
819 After deleting this boot option, call Var_ChangeBootOrder to
820 make sure BootOrder is in valid state.
821
822
823 EDES_TODO: Add parameter description
824
825 @retval EFI_SUCCESS If all boot load option EFI Variables corresponding to
826 BM_LOAD_CONTEXT marked for deletion is deleted
827 @return Others If failed to update the "BootOrder" variable after deletion.
828
829 **/
830 EFI_STATUS
831 Var_DelBootOption (
832 VOID
833 );
834
835 /**
836 After any operation on Boot####, there will be a discrepancy in BootOrder.
837 Since some are missing but in BootOrder, while some are present but are
838 not reflected by BootOrder. Then a function rebuild BootOrder from
839 scratch by content from BootOptionMenu is needed.
840
841
842
843
844 @retval EFI_SUCCESS The boot order is updated successfully.
845 @return EFI_STATUS other than EFI_SUCCESS if failed to
846 Set the "BootOrder" EFI Variable.
847
848 **/
849 EFI_STATUS
850 Var_ChangeBootOrder (
851 VOID
852 );
853
854 /**
855 This function create a currently loaded Drive Option from
856 the BMM. It then appends this Driver Option to the end of
857 the "DriverOrder" list. It append this Driver Opotion to the end
858 of DriverOptionMenu.
859
860 @param CallbackData The BMM context data.
861 @param HiiHandle The HII handle associated with the BMM formset.
862 @param DescriptionData The description of this driver option.
863 @param OptionalData The optional load option.
864 @param ForceReconnect EDES_TODO: Add parameter description
865
866 @retval EFI_OUT_OF_RESOURCES If not enought memory to complete the operation.
867 @retval EFI_SUCCESS If function completes successfully.
868
869 **/
870 EFI_STATUS
871 Var_UpdateDriverOption (
872 IN BMM_CALLBACK_DATA *CallbackData,
873 IN EFI_HII_HANDLE HiiHandle,
874 IN UINT16 *DescriptionData,
875 IN UINT16 *OptionalData,
876 IN UINT8 ForceReconnect
877 );
878
879 /**
880 Delete Load Option that represent a Deleted state in BootOptionMenu.
881 After deleting this Driver option, call Var_ChangeDriverOrder to
882 make sure DriverOrder is in valid state.
883
884
885
886
887 @retval EFI_SUCCESS Load Option is successfully updated.
888 @return Other value than EFI_SUCCESS if failed to update "Driver Order" EFI
889 Variable.
890
891 **/
892 EFI_STATUS
893 Var_DelDriverOption (
894 VOID
895 );
896
897 /**
898 After any operation on Driver####, there will be a discrepancy in
899 DriverOrder. Since some are missing but in DriverOrder, while some
900 are present but are not reflected by DriverOrder. Then a function
901 rebuild DriverOrder from scratch by content from DriverOptionMenu is
902 needed.
903
904
905
906
907 @retval EFI_SUCCESS The driver order is updated successfully.
908 @return EFI_STATUS other than EFI_SUCCESS if failed to
909 Set the "DriverOrder" EFI Variable.
910
911 **/
912 EFI_STATUS
913 Var_ChangeDriverOrder (
914 VOID
915 );
916
917 /**
918 This function delete and build multi-instance device path ConIn
919 console device.
920
921
922
923
924 @retval EFI_SUCCESS The function complete successfully.
925 @return The EFI variable can be saved. See gRT->SetVariable
926 for detail return information.
927 **/
928 EFI_STATUS
929 Var_UpdateConsoleInpOption (
930 VOID
931 );
932
933 /**
934 This function delete and build multi-instance device path ConOut
935 console device.
936
937
938
939
940 @retval EFI_SUCCESS The function complete successfully.
941 @return The EFI variable can be saved. See gRT->SetVariable
942 for detail return information.
943 **/
944 EFI_STATUS
945 Var_UpdateConsoleOutOption (
946 VOID
947 );
948
949 /**
950 This function delete and build multi-instance device path ErrOut
951 console device.
952
953
954
955
956 @retval EFI_SUCCESS The function complete successfully.
957 @return The EFI variable can be saved. See gRT->SetVariable
958 for detail return information.
959 **/
960 EFI_STATUS
961 Var_UpdateErrorOutOption (
962 VOID
963 );
964
965 /**
966 Update the device path of "ConOut", "ConIn" and "ErrOut"
967 based on the new BaudRate, Data Bits, parity and Stop Bits
968 set.
969
970
971
972
973
974 **/
975 VOID
976 Var_UpdateAllConsoleOption (
977 VOID
978 );
979
980 /**
981 This function update the "BootNext" EFI Variable. If there is
982 no "BootNex" specified in BMM, this EFI Variable is deleted.
983 It also update the BMM context data specified the "BootNext"
984 vaule.
985
986 @param CallbackData The BMM context data.
987
988 @retval EFI_SUCCESS The function complete successfully.
989 @return The EFI variable can be saved. See gRT->SetVariable
990 for detail return information.
991
992 **/
993 EFI_STATUS
994 Var_UpdateBootNext (
995 IN BMM_CALLBACK_DATA *CallbackData
996 );
997
998 /**
999 This function update the "BootOrder" EFI Variable based on
1000 BMM Formset's NV map. It then refresh BootOptionMenu
1001 with the new "BootOrder" list.
1002
1003 @param CallbackData The BMM context data.
1004
1005 @retval EFI_SUCCESS The function complete successfully.
1006 @retval EFI_SUCCESS Not enough memory to complete the function.
1007 @return The EFI variable can be saved. See gRT->SetVariable
1008 for detail return information.
1009
1010 **/
1011 EFI_STATUS
1012 Var_UpdateBootOrder (
1013 IN BMM_CALLBACK_DATA *CallbackData
1014 );
1015
1016 /**
1017 This function update the "DriverOrder" EFI Variable based on
1018 BMM Formset's NV map. It then refresh DriverOptionMenu
1019 with the new "DriverOrder" list.
1020
1021 @param CallbackData The BMM context data.
1022
1023 @retval EFI_SUCCESS The function complete successfully.
1024 @retval EFI_SUCCESS Not enough memory to complete the function.
1025 @return The EFI variable can be saved. See gRT->SetVariable
1026 for detail return information.
1027
1028 **/
1029 EFI_STATUS
1030 Var_UpdateDriverOrder (
1031 IN BMM_CALLBACK_DATA *CallbackData
1032 );
1033
1034 /**
1035 Update the legacy BBS boot option. L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable
1036 is udpated with the new Legacy Boot order. The EFI Variable of "Boot####" and gEfiGlobalVariableGuid
1037 is also updated.
1038
1039 @param CallbackData The context data for BMM.
1040
1041 @return EFI_SUCCESS The function completed successfully.
1042 @retval EFI_NOT_FOUND If L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable can be found.
1043
1044 **/
1045 EFI_STATUS
1046 Var_UpdateBBSOption (
1047 IN BMM_CALLBACK_DATA *CallbackData
1048 );
1049
1050 /**
1051 Update the Text Mode of Console.
1052
1053 @param CallbackData The context data for BMM.
1054
1055 @retval EFI_SUCCSS If the Text Mode of Console is updated.
1056 @return Other value if the Text Mode of Console is not updated.
1057
1058 **/
1059 EFI_STATUS
1060 Var_UpdateConMode (
1061 IN BMM_CALLBACK_DATA *CallbackData
1062 );
1063
1064 //
1065 // Following are page create and refresh functions
1066 //
1067 /**
1068 Refresh the global UpdateData structure.
1069
1070
1071
1072
1073
1074 **/
1075 VOID
1076 RefreshUpdateData (
1077 VOID
1078 );
1079
1080 /**
1081 Clean up the dynamic opcode at label and form specified by
1082 both LabelId.
1083
1084 @param LabelId It is both the Form ID and Label ID for
1085 opcode deletion.
1086 @param CallbackData The BMM context data.
1087
1088
1089
1090 **/
1091 VOID
1092 CleanUpPage (
1093 IN UINT16 LabelId,
1094 IN BMM_CALLBACK_DATA *CallbackData
1095 );
1096
1097 /**
1098 Create a lit of boot option from global BootOptionMenu. It
1099 allow user to delete the boot option.
1100
1101 @param CallbackData The BMM context data.
1102
1103
1104
1105 **/
1106 VOID
1107 UpdateBootDelPage (
1108 IN BMM_CALLBACK_DATA *CallbackData
1109 );
1110
1111 /**
1112 Create a lit of driver option from global DriverMenu.
1113
1114 @param CallbackData The BMM context data.
1115
1116
1117
1118 **/
1119 VOID
1120 UpdateDrvAddHandlePage (
1121 IN BMM_CALLBACK_DATA *CallbackData
1122 );
1123
1124 /**
1125 Create a lit of driver option from global DriverOptionMenu. It
1126 allow user to delete the driver option.
1127
1128
1129 @param CallbackData The BMM context data.
1130
1131
1132
1133 **/
1134 VOID
1135 UpdateDrvDelPage (
1136 IN BMM_CALLBACK_DATA *CallbackData
1137 );
1138
1139 /**
1140 Prepare the page to allow user to add description for
1141 a Driver Option.
1142
1143 @param CallbackData The BMM context data.
1144
1145
1146
1147 **/
1148 VOID
1149 UpdateDriverAddHandleDescPage (
1150 IN BMM_CALLBACK_DATA *CallbackData
1151 );
1152
1153 /**
1154 Dispatch the correct update page function to call based on
1155 the UpdatePageId.
1156
1157 @param UpdatePageId The form ID.
1158 @param CallbackData The BMM context data.
1159
1160
1161
1162 **/
1163 VOID
1164 UpdatePageBody (
1165 IN UINT16 UpdatePageId,
1166 IN BMM_CALLBACK_DATA *CallbackData
1167 );
1168
1169 /**
1170 Create the dynamic page to allow user to set
1171 the "BootNext" vaule.
1172
1173 @param CallbackData The BMM context data.
1174
1175
1176
1177 **/
1178 VOID
1179 UpdateBootNextPage (
1180 IN BMM_CALLBACK_DATA *CallbackData
1181 );
1182
1183 /**
1184 Create the dynamic page to allow user to set
1185 the "TimeOut" vaule.
1186
1187 @param CallbackData The BMM context data.
1188
1189
1190
1191 **/
1192 VOID
1193 UpdateTimeOutPage (
1194 IN BMM_CALLBACK_DATA *CallbackData
1195 );
1196
1197 /**
1198 Create the dynamic page which allows user to
1199 set the property such as Baud Rate, Data Bits,
1200 Parity, Stop Bits, Terminal Type.
1201
1202 @param CallbackData The BMM context data.
1203
1204
1205
1206 **/
1207 VOID
1208 UpdateTerminalPage (
1209 IN BMM_CALLBACK_DATA *CallbackData
1210 );
1211
1212 /**
1213 Refresh the text mode page
1214
1215
1216 @param CallbackData The BMM context data.
1217
1218
1219
1220 **/
1221 VOID
1222 UpdateConModePage (
1223 IN BMM_CALLBACK_DATA *CallbackData
1224 );
1225
1226 /**
1227 Create a list of Goto Opcode for all terminal devices logged
1228 by TerminaMenu. This list will be inserted to form FORM_CON_COM_SETUP_ID.
1229
1230 @param CallbackData The BMM context data.
1231
1232
1233
1234 **/
1235 VOID
1236 UpdateConCOMPage (
1237 IN BMM_CALLBACK_DATA *CallbackData
1238 );
1239
1240 /**
1241 Create a dynamic page so that Legacy Device boot order
1242 can be set for specified device type.
1243
1244 @param UpdatePageId The form ID. It also spefies the legacy device type.
1245 @param CallbackData The BMM context data.
1246
1247
1248
1249 **/
1250 VOID
1251 UpdateSetLegacyDeviceOrderPage (
1252 IN UINT16 UpdatePageId,
1253 IN BMM_CALLBACK_DATA *CallbackData
1254 );
1255
1256
1257 /**
1258
1259 Function opens and returns a file handle to the root directory of a volume.
1260
1261
1262 @param DeviceHandle - A handle for a device
1263
1264 @return A valid file handle or NULL is returned
1265
1266 **/
1267 EFI_FILE_HANDLE
1268 EfiLibOpenRoot (
1269 IN EFI_HANDLE DeviceHandle
1270 );
1271
1272 /**
1273
1274 Function gets the file system information from an open file descriptor,
1275 and stores it in a buffer allocated from pool.
1276
1277
1278 @param FHand The file handle.
1279
1280 @return A pointer to a buffer with file information.
1281 @retval NULL is returned if failed to get Vaolume Label Info.
1282
1283 **/
1284 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
1285 EfiLibFileSystemVolumeLabelInfo (
1286 IN EFI_FILE_HANDLE FHand
1287 );
1288
1289 /**
1290
1291 Function gets the file information from an open file descriptor, and stores it
1292 in a buffer allocated from pool.
1293
1294 @param FHand File Handle.
1295
1296 @return A pointer to a buffer with file information or NULL is returned
1297
1298 **/
1299 EFI_FILE_INFO *
1300 EfiLibFileInfo (
1301 IN EFI_FILE_HANDLE FHand
1302 );
1303
1304 /**
1305 This function converts an input device structure to a Unicode string.
1306
1307 @param DevPath A pointer to the device path structure.
1308
1309 @return A new allocated Unicode string that represents the device path.
1310
1311 **/
1312 CHAR16 *
1313 DevicePathToStr (
1314 EFI_DEVICE_PATH_PROTOCOL *DevPath
1315 );
1316
1317 /**
1318
1319 Find the first instance of this Protocol
1320 in the system and return it's interface.
1321
1322
1323 @param ProtocolGuid Provides the protocol to search for
1324 @param Interface On return, a pointer to the first interface
1325 that matches ProtocolGuid
1326
1327 @retval EFI_SUCCESS A protocol instance matching ProtocolGuid was found
1328 @retval EFI_NOT_FOUND No protocol instances were found that match ProtocolGuid
1329
1330 **/
1331 EFI_STATUS
1332 EfiLibLocateProtocol (
1333 IN EFI_GUID *ProtocolGuid,
1334 OUT VOID **Interface
1335 );
1336
1337 /**
1338 Adjusts the size of a previously allocated buffer.
1339
1340
1341 @param OldPool - A pointer to the buffer whose size is being adjusted.
1342 @param OldSize - The size of the current buffer.
1343 @param NewSize - The size of the new buffer.
1344
1345 @return The newly allocated buffer.
1346 @retval NULL Allocation failed.
1347
1348 **/
1349 VOID *
1350 EfiReallocatePool (
1351 IN VOID *OldPool,
1352 IN UINTN OldSize,
1353 IN UINTN NewSize
1354 );
1355
1356 /**
1357 Read the EFI variable (VendorGuid/Name) and return a dynamically allocated
1358 buffer, and the size of the buffer. If failure return NULL.
1359
1360 @param Name String part of EFI variable name
1361 @param VendorGuid GUID part of EFI variable name
1362 @param VarSize Returns the size of the EFI variable that was read
1363
1364 @return Dynamically allocated memory that contains a copy of the EFI variable.
1365 @return Caller is responsible freeing the buffer.
1366 @retval NULL Variable was not read
1367
1368 **/
1369 VOID *
1370 BdsLibGetVariableAndSize (
1371 IN CHAR16 *Name,
1372 IN EFI_GUID *VendorGuid,
1373 OUT UINTN *VarSize
1374 );
1375
1376 /**
1377 Function deletes the variable specified by VarName and VarGuid.
1378
1379
1380 @param VarName - A Null-terminated Unicode string that is
1381 the name of the vendor's variable.
1382
1383 @param VarGuid - A unique identifier for the vendor.
1384
1385 @retval EFI_SUCCESS The variable was found and removed
1386 @retval EFI_UNSUPPORTED The variable store was inaccessible
1387 @retval EFI_OUT_OF_RESOURCES The temporary buffer was not available
1388 @retval EFI_NOT_FOUND The variable was not found
1389
1390 **/
1391 EFI_STATUS
1392 EfiLibDeleteVariable (
1393 IN CHAR16 *VarName,
1394 IN EFI_GUID *VarGuid
1395 );
1396
1397 /**
1398 Duplicate a string.
1399
1400 @param Src The source.
1401
1402 @return A new string which is duplicated copy of the source.
1403 @retval NULL If there is not enough memory.
1404
1405 **/
1406 CHAR16 *
1407 EfiStrDuplicate (
1408 IN CHAR16 *Src
1409 );
1410
1411 /**
1412 Function is used to determine the number of device path instances
1413 that exist in a device path.
1414
1415
1416 @param DevicePath A pointer to a device path data structure.
1417
1418 @return This function counts and returns the number of device path instances
1419 in DevicePath.
1420
1421 **/
1422 UINTN
1423 EfiDevicePathInstanceCount (
1424 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
1425 );
1426
1427 /**
1428 Create string tokens for a menu from its help strings and display strings
1429
1430
1431 @param CallbackData The BMM context data.
1432 @param HiiHandle Hii Handle of the package to be updated.
1433 @param MenuOption The Menu whose string tokens need to be created
1434
1435 @retval EFI_SUCCESS string tokens created successfully
1436 @retval others contain some errors
1437
1438 **/
1439 EFI_STATUS
1440 CreateMenuStringToken (
1441 IN BMM_CALLBACK_DATA *CallbackData,
1442 IN EFI_HII_HANDLE HiiHandle,
1443 IN BM_MENU_OPTION *MenuOption
1444 );
1445
1446 /**
1447 Get a string from the Data Hub record based on
1448 a device path.
1449
1450 @param DevPath The device Path.
1451
1452 @return A string located from the Data Hub records based on
1453 the device path.
1454 @retval NULL If failed to get the String from Data Hub.
1455
1456 **/
1457 UINT16 *
1458 EfiLibStrFromDatahub (
1459 IN EFI_DEVICE_PATH_PROTOCOL *DevPath
1460 );
1461
1462 /**
1463 Get the index number (#### in Boot####) for the boot option pointed to a BBS legacy device type
1464 specified by DeviceType.
1465
1466 @param DeviceType The legacy device type. It can be floppy, network, harddisk, cdrom,
1467 etc.
1468 @param OptionIndex Returns the index number (#### in Boot####).
1469 @param OptionSize Return the size of the Boot### variable.
1470
1471
1472
1473 **/
1474 VOID *
1475 GetLegacyBootOptionVar (
1476 IN UINTN DeviceType,
1477 OUT UINTN *OptionIndex,
1478 OUT UINTN *OptionSize
1479 );
1480
1481 /**
1482 Initialize the Boot Maintenance Utitliy.
1483
1484 @retval EFI_SUCCESS utility ended successfully.
1485 @retval others contain some errors.
1486
1487 **/
1488 EFI_STATUS
1489 InitializeBM (
1490 VOID
1491 );
1492
1493 /**
1494 Start boot maintenance manager
1495
1496
1497
1498
1499 @retval EFI_SUCCESS If BMM is invoked successfully.
1500 @return Other value if BMM return unsuccessfully.
1501
1502 **/
1503 EFI_STATUS
1504 BdsStartBootMaint (
1505 VOID
1506 );
1507
1508 /**
1509 Intialize all the string depositories.
1510
1511 **/
1512 VOID
1513 InitializeStringDepository (
1514 VOID
1515 );
1516
1517 /**
1518 Fetch a usable string node from the string depository and return the string token.
1519
1520
1521 @param CallbackData EDES_TODO: Add parameter description
1522 @param StringDepository - Pointer of the string depository.
1523
1524 @retval EFI_STRING_ID String token.
1525
1526 **/
1527 EFI_STRING_ID
1528 GetStringTokenFromDepository (
1529 IN BMM_CALLBACK_DATA *CallbackData,
1530 IN STRING_DEPOSITORY *StringDepository
1531 );
1532
1533 /**
1534 Reclaim string depositories by moving the current node pointer to list head..
1535 **/
1536 VOID
1537 ReclaimStringDepository (
1538 VOID
1539 );
1540
1541 /**
1542 Release resource for all the string depositories.
1543
1544 **/
1545 VOID
1546 CleanUpStringDepository (
1547 VOID
1548 );
1549
1550 /**
1551 Function handling request to apply changes for BMM pages.
1552
1553
1554 @param Private - Pointer to callback data buffer.
1555 @param CurrentFakeNVMap - Pointer to buffer holding data of various values used by BMM
1556 @param FormId - ID of the form which has sent the request to apply change.
1557
1558 @retval EFI_SUCCESS Change successfully applied.
1559 @retval Other Error occurs while trying to apply changes.
1560
1561 **/
1562 EFI_STATUS
1563 ApplyChangeHandler (
1564 IN BMM_CALLBACK_DATA *Private,
1565 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap,
1566 IN EFI_FORM_ID FormId
1567 );
1568
1569 /**
1570 Discard all changes done to the BMM pages such as Boot Order change,
1571 Driver order change.
1572
1573 @param Private The BMM context data.
1574 @param CurrentFakeNVMap The current Fack NV Map.
1575
1576 **/
1577 VOID
1578 DiscardChangeHandler (
1579 IN BMM_CALLBACK_DATA *Private,
1580 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
1581 );
1582
1583 /**
1584 Dispatch the display to the next page based on NewPageId.
1585
1586 @param Private The BMM context data.
1587 @param NewPageId The original page ID.
1588
1589 **/
1590 VOID
1591 UpdatePageId (
1592 BMM_CALLBACK_DATA *Private,
1593 UINT16 NewPageId
1594 );
1595
1596 /**
1597 Boot a file selected by user at File Expoloer of BMM.
1598
1599 @param FileContext The file context data, which contains the device path
1600 of the file to be boot from.
1601
1602 @retval EFI_SUCCESS The function completed successfull.
1603 @return Other value if the boot from the file fails.
1604
1605 **/
1606 EFI_STATUS
1607 BootThisFile (
1608 IN BM_FILE_CONTEXT *FileContext
1609 );
1610
1611 /**
1612 Update the file explower page with the refershed file system.
1613
1614
1615 @param CallbackData BMM context data
1616 @param KeyValue Key value to identify the type of data to expect.
1617
1618 @retval TRUE Inform the caller to create a callback packet to exit file explorer.
1619 @retval FALSE Indicate that there is no need to exit file explorer.
1620
1621 **/
1622 BOOLEAN
1623 UpdateFileExplorer (
1624 IN BMM_CALLBACK_DATA *CallbackData,
1625 IN UINT16 KeyValue
1626 );
1627
1628 /**
1629 This function processes the results of changes in configuration.
1630 When user select a interactive opcode, this callback will be triggered.
1631 Based on the Question(QuestionId) that triggers the callback, the corresponding
1632 actions is performed. It handles:
1633
1634 1) the addition of boot option.
1635 2) the addition of driver option.
1636 3) exit from file browser
1637 4) update of file content if a dir is selected.
1638 5) boot the file if a file is selected in "boot from file"
1639
1640
1641 @param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
1642 @param Action Specifies the type of action taken by the browser.
1643 @param QuestionId A unique value which is sent to the original exporting driver
1644 so that it can identify the type of data to expect.
1645 @param Type The type of value for the question.
1646 @param Value A pointer to the data being sent to the original exporting driver.
1647 @param ActionRequest On return, points to the action requested by the callback function.
1648
1649 @retval EFI_SUCCESS The callback successfully handled the action.
1650 @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
1651 @retval EFI_DEVICE_ERROR The variable could not be saved.
1652 @retval EFI_UNSUPPORTED The specified Action is not supported by the callback.
1653
1654 **/
1655 EFI_STATUS
1656 EFIAPI
1657 FileExplorerCallback (
1658 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
1659 IN EFI_BROWSER_ACTION Action,
1660 IN EFI_QUESTION_ID QuestionId,
1661 IN UINT8 Type,
1662 IN EFI_IFR_TYPE_VALUE *Value,
1663 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
1664 );
1665
1666 /**
1667 Dispatch BMM formset and FileExplorer formset.
1668
1669
1670 @param CallbackData The BMM context data.
1671
1672 @retval EFI_SUCCESS If function complete successfully.
1673 @return Other value if the Setup Browser process BMM's pages and
1674 return unsuccessfully.
1675
1676 **/
1677 EFI_STATUS
1678 FormSetDispatcher (
1679 IN BMM_CALLBACK_DATA *CallbackData
1680 );
1681
1682 /**
1683 Function returns the value of the specified variable.
1684
1685 @param Name A Null-terminated Unicode string that is
1686 the name of the vendor's variable.
1687 @param VendorGuid A unique identifier for the vendor.
1688
1689 @return The payload of the variable.
1690 @retval NULL If the variable can't be read.
1691
1692 **/
1693 VOID *
1694 EfiLibGetVariable (
1695 IN CHAR16 *Name,
1696 IN EFI_GUID *VendorGuid
1697 );
1698
1699 //
1700 // Global variable in this program (defined in data.c)
1701 //
1702 extern BM_MENU_OPTION BootOptionMenu;
1703 extern BM_MENU_OPTION DriverOptionMenu;
1704 extern BM_MENU_OPTION FsOptionMenu;
1705 extern BM_MENU_OPTION ConsoleInpMenu;
1706 extern BM_MENU_OPTION ConsoleOutMenu;
1707 extern BM_MENU_OPTION ConsoleErrMenu;
1708 extern BM_MENU_OPTION DirectoryMenu;
1709 extern BM_MENU_OPTION DriverMenu;
1710 extern BM_MENU_OPTION TerminalMenu;
1711 extern BM_MENU_OPTION LegacyFDMenu;
1712 extern BM_MENU_OPTION LegacyHDMenu;
1713 extern BM_MENU_OPTION LegacyCDMenu;
1714 extern BM_MENU_OPTION LegacyNETMenu;
1715 extern BM_MENU_OPTION LegacyBEVMenu;
1716 extern UINT16 TerminalType[];
1717 extern COM_ATTR BaudRateList[19];
1718 extern COM_ATTR DataBitsList[4];
1719 extern COM_ATTR ParityList[5];
1720 extern COM_ATTR StopBitsList[3];
1721 extern EFI_GUID TerminalTypeGuid[4];
1722 extern EFI_HII_UPDATE_DATA gUpdateData;
1723 extern STRING_DEPOSITORY *FileOptionStrDepository;
1724 extern STRING_DEPOSITORY *ConsoleOptionStrDepository;
1725 extern STRING_DEPOSITORY *BootOptionStrDepository;
1726 extern STRING_DEPOSITORY *BootOptionHelpStrDepository;
1727 extern STRING_DEPOSITORY *DriverOptionStrDepository;
1728 extern STRING_DEPOSITORY *DriverOptionHelpStrDepository;
1729 extern STRING_DEPOSITORY *TerminalStrDepository;
1730 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];
1731 extern EFI_GUID EfiLegacyDevOrderGuid;
1732
1733 #endif