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