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