]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/PlatformBdsDxe/Generic/BootMaint/BootMaint.h
Added UEFI Boot Manager definitions to UEFISpec.h and removed from BDS
[mirror_edk2.git] / Nt32Pkg / PlatformBdsDxe / Generic / BootMaint / BootMaint.h
1 /*++
2
3 Copyright (c) 2006, 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 "Generic/Bds.h"
26 #include "Generic/BootMaint/BBSsupport.h"
27
28 //
29 // Constants which are variable names used to access variables
30 //
31 #define VarLegacyDevOrder L"LegacyDevOrder"
32
33 //
34 // Guid of a NV Variable which store the information about the
35 // FD/HD/CD/NET/BEV order
36 //
37 #define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \
38 { \
39 0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52 } \
40 }
41
42 //
43 // String Contant
44 //
45 #define StrFloppy L"Floppy Drive #%02x"
46 #define StrHardDisk L"HardDisk Drive #%02x"
47 #define StrCDROM L"ATAPI CDROM Drive #%02x"
48 #define StrNET L"NET Drive #%02x"
49 #define StrBEV L"BEV Drive #%02x"
50 #define StrFloppyHelp L"Select Floppy Drive #%02x"
51 #define StrHardDiskHelp L"Select HardDisk Drive #%02x"
52 #define StrCDROMHelp L"Select ATAPI CDROM Drive #%02x"
53 #define StrNETHelp L"NET Drive #%02x"
54 #define StrBEVHelp L"BEV Drive #%02x"
55
56 //
57 // Constant will be used in display and file system navigation
58 //
59 #define UPDATE_DATA_SIZE 0x100000
60 #define MAX_BBS_OFFSET 0xE000
61 #define NET_OPTION_OFFSET 0xD800
62 #define BEV_OPTION_OFFSET 0xD000
63 #define FD_OPTION_OFFSET 0xC000
64 #define HD_OPTION_OFFSET 0xB000
65 #define CD_OPTION_OFFSET 0xA000
66 #define FILE_OPTION_OFFSET 0x8000
67 #define FILE_OPTION_MASK 0x7FFF
68 #define HANDLE_OPTION_OFFSET 0x7000
69 #define CONSOLE_OPTION_OFFSET 0x0A00
70 #define TERMINAL_OPTION_OFFSET 0x0700
71 #define NORMAL_GOTO_OFFSET 0x0100
72 #define MAX_STRING_TOKEN_COUNT 0x00FF
73 //
74 // Variable created with this flag will be "Efi:...."
75 //
76 #define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
77
78 //
79 // Define Maxmim characters that will be accepted
80 //
81 #define MAX_CHAR 480
82 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
83
84
85 //
86 // Below are the form ids for display, form id is used as callback key value,
87 // some key value definitions are also defined here. By defining this enum type,
88 // We can easy know where we are. The int to UINT16 convertion should be ok because
89 // there is a MAXIMUM_FORM_ID which in within the range of UINT16.
90 //
91 typedef enum {
92 IplRelative,
93 BcvRelative
94 } BBS_TYPE;
95
96 typedef enum {
97 FORM_RESERVED_ID = 0,
98 FORM_MAIN_ID, // 0x0001
99 FORM_BOOT_ADD_ID, // 0x0002
100 FORM_BOOT_DEL_ID, // 0x0003
101 FORM_BOOT_CHG_ID, // 0x0004
102 FORM_DRV_ADD_ID, // 0x0005
103 FORM_DRV_DEL_ID, // 0x0006
104 FORM_DRV_CHG_ID, // 0x0007
105 FORM_CON_MAIN_ID, // 0x0008
106 FORM_CON_IN_ID, // 0x0009
107 FORM_CON_OUT_ID, // 0x000A
108 FORM_CON_ERR_ID, // 0x000B
109 FORM_FILE_SEEK_ID, // 0x000C
110 FORM_FILE_NEW_SEEK_ID, // 0x000D
111 FORM_DRV_ADD_FILE_ID, // 0x000E
112 FORM_DRV_ADD_HANDLE_ID, // 0x000F
113 FORM_DRV_ADD_HANDLE_DESC_ID, // 0x0010
114 FORM_BOOT_NEXT_ID, // 0x0011
115 FORM_TIME_OUT_ID, // 0x0012
116 FORM_RESET, // 0x0013
117 FORM_BOOT_SETUP_ID, // 0x0014
118 FORM_DRIVER_SETUP_ID, // 0x0015
119 FORM_BOOT_LEGACY_DEVICE_ID, // 0x0016
120 FORM_CON_COM_ID, // 0x0017
121 FORM_CON_COM_SETUP_ID, // 0x0018
122 FORM_SET_FD_ORDER_ID, // 0x0019
123 FORM_SET_HD_ORDER_ID, // 0x001A
124 FORM_SET_CD_ORDER_ID, // 0x001B
125 FORM_SET_NET_ORDER_ID, // 0x001C
126 FORM_SET_BEV_ORDER_ID, // 0x001D
127 FORM_FILE_EXPLORER_ID, // 0x001E
128 FORM_BOOT_ADD_DESCRIPTION_ID, // 0x001F
129 FORM_DRIVER_ADD_FILE_DESCRIPTION_ID, // 0x0020
130 } FORM_ID;
131
132 #define MAXIMUM_FORM_ID 0x007F
133
134 #define KEY_VALUE_COM_SET_BAUD_RATE 0x0080
135 #define KEY_VALUE_COM_SET_DATA_BITS 0x0081
136 #define KEY_VALUE_COM_SET_STOP_BITS 0x0082
137 #define KEY_VALUE_COM_SET_PARITY 0x0083
138 #define KEY_VALUE_COM_SET_TERMI_TYPE 0x0084
139 #define KEY_VALUE_MAIN_BOOT_NEXT 0x0085
140 #define KEY_VALUE_BOOT_ADD_DESC_DATA 0x0086
141 #define KEY_VALUE_BOOT_ADD_OPT_DATA 0x0087
142 #define KEY_VALUE_DRIVER_ADD_DESC_DATA 0x0088
143 #define KEY_VALUE_DRIVER_ADD_OPT_DATA 0x0089
144 #define KEY_VALUE_SAVE_AND_EXIT 0x0090
145 #define KEY_VALUE_NO_SAVE_AND_EXIT 0x0091
146 #define KEY_VALUE_BOOT_FROM_FILE 0x0092
147
148 #define MAXIMUM_NORMAL_KEY_VALUE NORMAL_GOTO_OFFSET
149 //
150 // Below are the number of options in Baudrate, Databits,
151 // Parity and Stopbits selection for serial ports.
152 //
153 #define BM_COM_ATTR_BUADRATE 19
154 #define BM_COM_ATTR_DATABITS 4
155 #define BM_COM_ATTR_PARITY 5
156 #define BM_COM_ATTR_STOPBITS 3
157
158 //
159 // Callback function helper
160 //
161 #define BMM_CALLBACK_DATA_SIGNATURE EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')
162 #define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
163
164 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
165
166 //
167 // Enumeration type definition
168 //
169 typedef enum {
170 PC_ANSI = 0,
171 VT_100,
172 VT_100_PLUS,
173 VT_UTF8
174 } TYPE_OF_TERMINAL;
175
176 typedef enum {
177 COM1 = 0,
178 COM2,
179 UNKNOW_COM
180 } TYPE_OF_COM;
181
182 typedef enum {
183 CONIN = 0,
184 CONOUT,
185 CONERR,
186 UNKNOWN_CON
187 } TYPE_OF_CON;
188
189 typedef enum {
190 BAUDRATE = 0,
191 DATABITS,
192 PARITY,
193 STOPBITS,
194 UNKNOW_ATTR
195 } TYPE_OF_ATTRIBUTE;
196
197 typedef enum {
198 MANNER_GOTO = 0,
199 MANNER_CHECK,
200 MANNER_ONEOF,
201 MANNER_USER_DEFINE
202 } TYPE_OF_UPATE_MANNER;
203
204 typedef enum {
205 INACTIVE_STATE = 0,
206 BOOT_FROM_FILE_STATE,
207 ADD_BOOT_OPTION_STATE,
208 ADD_DRIVER_OPTION_STATE,
209 UNKNOWN_STATE
210 } FILE_EXPLORER_STATE;
211
212 typedef enum {
213 FILE_SYSTEM,
214 DIRECTORY,
215 UNKNOWN_CONTEXT
216 } FILE_EXPLORER_DISPLAY_CONTEXT;
217
218 //
219 // All of the signatures that will be used in list structure
220 //
221 #define BM_MENU_OPTION_SIGNATURE 'menu'
222 #define BM_LOAD_OPTION_SIGNATURE 'load'
223 #define BM_CONSOLE_OPTION_SIGNATURE 'cnsl'
224 #define BM_FILE_OPTION_SIGNATURE 'file'
225 #define BM_HANDLE_OPTION_SIGNATURE 'hndl'
226 #define BM_TERMINAL_OPTION_SIGNATURE 'trml'
227 #define BM_MENU_ENTRY_SIGNATURE 'entr'
228
229 #define BM_LOAD_CONTEXT_SELECT 0x0
230 #define BM_CONSOLE_CONTEXT_SELECT 0x1
231 #define BM_FILE_CONTEXT_SELECT 0x2
232 #define BM_HANDLE_CONTEXT_SELECT 0x3
233 #define BM_TERMINAL_CONTEXT_SELECT 0x5
234
235 #define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
236 #define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
237 #define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
238 #define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
239
240 //
241 // Question Id that will be used to create question
242 // all these values are computed from the structure
243 // defined below
244 //
245 #define QUESTION_ID(Field) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))
246
247 #define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
248 #define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
249 #define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
250 #define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
251 #define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
252 #define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
253 #define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
254 #define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
255 #define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
256 #define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
257 #define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
258 #define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
259 #define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
260 #define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
261 #define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
262 #define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
263 #define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
264 #define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
265 #define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
266 #define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
267 #define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
268 #define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
269 #define OPTION_ORDER_QUESTION_ID QUESTION_ID (OptionOrder)
270 #define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
271 #define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
272 #define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
273 #define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
274 #define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
275 #define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
276 #define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
277 #define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
278 #define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
279 #define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD)
280 #define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD)
281 #define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD)
282 #define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET)
283 #define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV)
284
285 #define STRING_DEPOSITORY_NUMBER 8
286
287 //
288 // #pragma pack(1)
289 //
290 // Serial Ports attributes, first one is the value for
291 // return from callback function, stringtoken is used to
292 // display the value properly
293 //
294 typedef struct {
295 UINTN Value;
296 UINT16 StringToken;
297 } COM_ATTR;
298
299 //
300 // This is the structure that will be used to store the
301 // question's current value. Use it at initialize time to
302 // set default value for each question. When using at run
303 // time, this map is returned by the callback function,
304 // so dynamically changing the question's value will be
305 // possible through this mechanism
306 //
307 typedef struct {
308 //
309 // Three questions displayed at the main page
310 // for Timeout, BootNext Variables respectively
311 //
312 UINT16 BootTimeOut;
313 UINT16 BootNext;
314
315 //
316 // This is the COM1 Attributes value storage
317 //
318 UINT8 COM1BaudRate;
319 UINT8 COM1DataRate;
320 UINT8 COM1StopBits;
321 UINT8 COM1Parity;
322 UINT8 COM1TerminalType;
323
324 //
325 // This is the COM2 Attributes value storage
326 //
327 UINT8 COM2BaudRate;
328 UINT8 COM2DataRate;
329 UINT8 COM2StopBits;
330 UINT8 COM2Parity;
331 UINT8 COM2TerminalType;
332
333 //
334 // Driver Option Add Handle page storage
335 //
336 UINT16 DriverAddHandleDesc[100];
337 UINT16 DriverAddHandleOptionalData[100];
338 UINT8 DriverAddActive;
339 UINT8 DriverAddForceReconnect;
340
341 //
342 // Console Input/Output/Errorout using COM port check storage
343 //
344 UINT8 ConsoleInputCOM1;
345 UINT8 ConsoleInputCOM2;
346 UINT8 ConsoleOutputCOM1;
347 UINT8 ConsoleOutputCOM2;
348 UINT8 ConsoleErrorCOM1;
349 UINT8 ConsoleErrorCOM2;
350
351 //
352 // At most 100 input/output/errorout device for console storage
353 //
354 UINT8 ConsoleCheck[100];
355
356 //
357 // Boot or Driver Option Order storage
358 //
359 UINT8 OptionOrder[100];
360 UINT8 DriverOptionToBeDeleted[100];
361
362 //
363 // Boot Option Delete storage
364 //
365 UINT8 BootOptionDel[100];
366 UINT8 DriverOptionDel[100];
367
368 //
369 // This is the Terminal Attributes value storage
370 //
371 UINT8 COMBaudRate;
372 UINT8 COMDataRate;
373 UINT8 COMStopBits;
374 UINT8 COMParity;
375 UINT8 COMTerminalType;
376
377 //
378 // Legacy Device Order Selection Storage
379 //
380 UINT8 LegacyFD[100];
381 UINT8 LegacyHD[100];
382 UINT8 LegacyCD[100];
383 UINT8 LegacyNET[100];
384 UINT8 LegacyBEV[100];
385
386 //
387 // We use DisableMap array to record the enable/disable state of each boot device
388 // It should be taken as a bit array, from left to right there are totally 256 bits
389 // the most left one stands for BBS table item 0, and the most right one stands for item 256
390 // If the bit is 1, it means the boot device has been disabled.
391 //
392 UINT8 DisableMap[32];
393
394 //
395 // UINT16 PadArea[10];
396 //
397 } BMM_FAKE_NV_DATA;
398
399 typedef struct {
400 UINT16 DescriptionData[75];
401 UINT16 OptionalData[127];
402 UINT8 Active;
403 UINT8 ForceReconnect;
404 } FILE_EXPLORER_NV_DATA;
405
406 typedef struct {
407 BBS_TYPE BbsType;
408 //
409 // Length = sizeof (UINT16) + SIZEOF (Data)
410 //
411 UINT16 Length;
412 UINT16 *Data;
413 } BM_LEGACY_DEV_ORDER_CONTEXT;
414
415 typedef struct {
416 UINT64 BaudRate;
417 UINT8 DataBits;
418 UINT8 Parity;
419 UINT8 StopBits;
420
421 UINT8 BaudRateIndex;
422 UINT8 DataBitsIndex;
423 UINT8 ParityIndex;
424 UINT8 StopBitsIndex;
425
426 UINT8 IsConIn;
427 UINT8 IsConOut;
428 UINT8 IsStdErr;
429 UINT8 TerminalType;
430
431 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
432 } BM_TERMINAL_CONTEXT;
433
434 typedef struct {
435 BOOLEAN IsBootNext;
436 BOOLEAN LoadOptionModified;
437 BOOLEAN Deleted;
438
439 BOOLEAN IsLegacy;
440 BOOLEAN IsActive;
441 BOOLEAN ForceReconnect;
442 UINTN OptionalDataSize;
443
444 UINTN LoadOptionSize;
445 UINT8 *LoadOption;
446
447 UINT32 Attributes;
448 UINT16 FilePathListLength;
449 UINT16 *Description;
450 EFI_DEVICE_PATH_PROTOCOL *FilePathList;
451 UINT8 *OptionalData;
452
453 UINT16 BbsIndex;
454 } BM_LOAD_CONTEXT;
455
456 typedef struct {
457 BBS_TABLE *BbsTable;
458 UINTN Index;
459 UINTN BbsCount;
460 UINT16 *Description;
461 } BM_LEGACY_DEVICE_CONTEXT;
462
463 typedef struct {
464
465 BOOLEAN IsActive;
466
467 BOOLEAN IsTerminal;
468
469 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
470 } BM_CONSOLE_CONTEXT;
471
472 typedef struct {
473 EFI_HANDLE Handle;
474 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
475 EFI_FILE_HANDLE FHandle;
476 UINT16 *FileName;
477 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *Info;
478
479 BOOLEAN IsRoot;
480 BOOLEAN IsDir;
481 BOOLEAN IsRemovableMedia;
482 BOOLEAN IsLoadFile;
483 BOOLEAN IsBootLegacy;
484 } BM_FILE_CONTEXT;
485
486 typedef struct {
487 EFI_HANDLE Handle;
488 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
489 } BM_HANDLE_CONTEXT;
490
491 typedef struct {
492 UINTN Signature;
493 LIST_ENTRY Head;
494 UINTN MenuNumber;
495 } BM_MENU_OPTION;
496
497 typedef struct {
498 UINTN Signature;
499 LIST_ENTRY Link;
500 UINTN OptionNumber;
501 UINT16 *DisplayString;
502 UINT16 *HelpString;
503 STRING_REF DisplayStringToken;
504 STRING_REF HelpStringToken;
505 UINTN ContextSelection;
506 VOID *VariableContext;
507 } BM_MENU_ENTRY;
508
509 typedef struct {
510 //
511 // Shared callback data.
512 //
513 UINTN Signature;
514 EFI_HII_PROTOCOL *Hii;
515 BM_MENU_ENTRY *MenuEntry;
516 BM_HANDLE_CONTEXT *HandleContext;
517 BM_FILE_CONTEXT *FileContext;
518 BM_LOAD_CONTEXT *LoadContext;
519 BM_TERMINAL_CONTEXT *TerminalContext;
520 UINTN CurrentTerminal;
521 BBS_TYPE BbsType;
522
523 //
524 // BMM main formset callback data.
525 //
526 EFI_HII_HANDLE BmmHiiHandle;
527 EFI_HANDLE BmmCallbackHandle;
528 EFI_FORM_CALLBACK_PROTOCOL BmmDriverCallback;
529 FORM_ID BmmCurrentPageId;
530 FORM_ID BmmPreviousPageId;
531 BOOLEAN BmmAskSaveOrNot;
532 BMM_FAKE_NV_DATA *BmmFakeNvData;
533 BMM_FAKE_NV_DATA BmmOldFakeNVData;
534
535 //
536 // File explorer formset callback data.
537 //
538 EFI_HII_HANDLE FeHiiHandle;
539 EFI_HANDLE FeCallbackHandle;
540 EFI_FORM_CALLBACK_PROTOCOL FeDriverCallback;
541 FILE_EXPLORER_STATE FeCurrentState;
542 FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext;
543 } BMM_CALLBACK_DATA;
544
545 typedef struct _STRING_LIST_NODE {
546 STRING_REF StringToken;
547 struct _STRING_LIST_NODE *Next;
548 } STRING_LIST_NODE;
549
550 typedef struct _STRING_DEPOSITORY {
551 UINTN TotalNodeNumber;
552 STRING_LIST_NODE *CurrentNode;
553 STRING_LIST_NODE *ListHead;
554 } STRING_DEPOSITORY;
555
556 //
557 // #pragma pack()
558 //
559 // For initializing File System menu
560 //
561 EFI_STATUS
562 BOpt_FindFileSystem (
563 IN BMM_CALLBACK_DATA *CallbackData
564 )
565 ;
566
567 //
568 // For cleaning up File System menu
569 //
570 VOID
571 BOpt_FreeFileSystem (
572 VOID
573 )
574 ;
575
576 //
577 // For initializing File Navigation menu
578 //
579 EFI_STATUS
580 BOpt_FindFiles (
581 IN BMM_CALLBACK_DATA *CallbackData,
582 IN BM_MENU_ENTRY *MenuEntry
583 )
584 ;
585
586 //
587 // For cleaning up File Navigation menu
588 //
589 VOID
590 BOpt_FreeFiles (
591 VOID
592 )
593 ;
594
595 //
596 // For Initializing handle navigation menu
597 //
598 EFI_STATUS
599 BOpt_FindDrivers (
600 VOID
601 )
602 ;
603
604 //
605 // For Cleaning up handle navigation menu
606 //
607 VOID
608 BOpt_FreeDrivers();
609
610 //
611 // For initializing Boot Option menu
612 //
613 EFI_STATUS
614 BOpt_GetBootOptions (
615 IN BMM_CALLBACK_DATA *CallbackData
616 );
617
618 //
619 // For Initializing Driver option menu
620 //
621 EFI_STATUS
622 BOpt_GetDriverOptions (
623 IN BMM_CALLBACK_DATA *CallbackData
624 );
625
626 //
627 // For Cleaning up boot option menu
628 //
629 VOID
630 BOpt_FreeBootOptions ();
631
632 //
633 // For cleaning up driver option menu
634 //
635 VOID
636 BOpt_FreeDriverOptions();
637
638 //
639 // For Initializing HD/FD/CD/NET/BEV option menu
640 //
641 EFI_STATUS
642 BOpt_GetLegacyOptions();
643
644 //
645 // For cleaning up driver option menu
646 //
647 VOID
648 BOpt_FreeLegacyOptions();
649
650 //
651 // this function is used to take place of all other free menu actions
652 //
653 VOID
654 BOpt_FreeMenu (
655 BM_MENU_OPTION *FreeMenu
656 );
657
658
659 //
660 // Following are the helper functions used
661 //
662 CHAR16 *
663 BOpt_AppendFileName (
664 IN CHAR16 *Str1,
665 IN CHAR16 *Str2
666 );
667
668 BOOLEAN
669 BOpt_IsEfiImageName (
670 IN UINT16 *FileName
671 );
672
673 BOOLEAN
674 BOpt_IsEfiApp (
675 IN EFI_FILE_HANDLE Dir,
676 IN UINT16 *FileName
677 );
678
679 //
680 // Get current unused boot option number
681 //
682 UINT16
683 BOpt_GetBootOptionNumber ();
684
685 //
686 // Get current unused driver option number
687 //
688 UINT16
689 BOpt_GetDriverOptionNumber ();
690
691 BM_MENU_ENTRY *
692 BOpt_CreateMenuEntry (
693 UINTN MenuType
694 );
695
696 VOID
697 BOpt_DestroyMenuEntry (
698 BM_MENU_ENTRY *MenuEntry
699 );
700
701 BM_MENU_ENTRY *
702 BOpt_GetMenuEntry (
703 BM_MENU_OPTION *MenuOption,
704 UINTN MenuNumber
705 );
706
707 //
708 // a helper function used to free pool type memory
709 //
710 VOID
711 SafeFreePool (
712 IN VOID *Buffer
713 );
714
715 //
716 // Locate all serial io devices for console
717 //
718 EFI_STATUS
719 LocateSerialIo ();
720
721 //
722 // Initializing Console menu
723 //
724 EFI_STATUS
725 GetAllConsoles();
726
727 //
728 // Cleaning up console menu
729 //
730 EFI_STATUS
731 FreeAllConsoles();
732
733 VOID
734 ChangeVariableDevicePath (
735 EFI_DEVICE_PATH_PROTOCOL *DevicePath
736 );
737
738 EFI_STATUS
739 ChangeTerminalDevicePath (
740 EFI_DEVICE_PATH_PROTOCOL *DevicePath,
741 BOOLEAN ChangeTerminal
742 );
743 //
744 // Variable operation by menu selection
745 //
746 EFI_STATUS
747 Var_UpdateBootOption (
748 IN BMM_CALLBACK_DATA *CallbackData,
749 IN FILE_EXPLORER_NV_DATA *NvRamMap
750 );
751
752 EFI_STATUS
753 Var_DelBootOption ();
754
755 EFI_STATUS
756 Var_ChangeBootOrder ();
757
758 EFI_STATUS
759 Var_UpdateDriverOption (
760 IN BMM_CALLBACK_DATA *CallbackData,
761 IN EFI_HII_HANDLE HiiHandle,
762 IN UINT16 *DescriptionData,
763 IN UINT16 *OptionalData,
764 IN UINT8 ForceReconnect
765 );
766
767 EFI_STATUS
768 Var_DelDriverOption ();
769
770 EFI_STATUS
771 Var_ChangeDriverOrder ();
772
773 EFI_STATUS
774 Var_UpdateConsoleInpOption ();
775
776 EFI_STATUS
777 Var_UpdateConsoleOutOption ();
778
779 EFI_STATUS
780 Var_UpdateErrorOutOption ();
781
782 VOID
783 Var_UpdateAllConsoleOption ();
784
785 EFI_STATUS
786 Var_UpdateBootNext (
787 IN BMM_CALLBACK_DATA *CallbackData
788 );
789
790 EFI_STATUS
791 Var_UpdateBootOrder (
792 IN BMM_CALLBACK_DATA *CallbackData
793 );
794
795 EFI_STATUS
796 Var_UpdateDriverOrder (
797 IN BMM_CALLBACK_DATA *CallbackData
798 );
799
800 EFI_STATUS
801 Var_UpdateBBSOption (
802 IN BMM_CALLBACK_DATA *CallbackData
803 );
804
805 //
806 // Following are page create and refresh functions
807 //
808 VOID
809 RefreshUpdateData (
810 IN BOOLEAN FormSetUpdate,
811 IN EFI_PHYSICAL_ADDRESS FormCallbackHandle,
812 IN BOOLEAN FormUpdate,
813 IN STRING_REF FormTitle,
814 IN UINT16 DataCount
815 );
816
817 VOID
818 CleanUpPage (
819 IN EFI_FORM_LABEL LabelId,
820 IN BMM_CALLBACK_DATA *CallbackData
821 );
822
823 EFI_STATUS
824 UpdatePage (
825 IN BMM_CALLBACK_DATA *CallbackData,
826 IN BM_MENU_OPTION *UpdatingMenu,
827 IN UINT16 UpdatingPage,
828 IN UINT16 UpdatingManner,
829 IN UINT16 QuestionIdStart,
830 IN UINT16 GotoForm,
831 IN UINT16 GotoAlternateForm,
832 IN STRING_REF DisplayTokenStart,
833 IN STRING_REF HelpTokenStart,
834 IN UINT16 KeyValueStart
835 );
836
837 VOID
838 UpdateBootAddPage (
839 IN BMM_CALLBACK_DATA *CallbackData
840 );
841
842 VOID
843 UpdateBootDelPage (
844 IN BMM_CALLBACK_DATA *CallbackData
845 );
846
847 VOID
848 UpdateDrvAddFilePage (
849 IN BMM_CALLBACK_DATA *CallbackData
850 );
851
852 VOID
853 UpdateDrvAddHandlePage (
854 IN BMM_CALLBACK_DATA *CallbackData
855 );
856
857 VOID
858 UpdateDrvDelPage (
859 IN BMM_CALLBACK_DATA *CallbackData
860 );
861
862 VOID
863 UpdateDriverAddHandleDescPage (
864 IN BMM_CALLBACK_DATA *CallbackData
865 );
866
867 VOID
868 UpdateBootTimeOut (
869 IN BMM_CALLBACK_DATA *CallbackData
870 );
871
872 VOID
873 UpdateConInPage (
874 IN BMM_CALLBACK_DATA *CallbackData
875 );
876
877 VOID
878 UpdateConOutPage (
879 IN BMM_CALLBACK_DATA *CallbackData
880 );
881
882 VOID
883 UpdateStdErrPage (
884 IN BMM_CALLBACK_DATA *CallbackData
885 );
886
887 VOID
888 UpdatePageBody (
889 IN UINT16 UpdatePageId,
890 IN BMM_CALLBACK_DATA *CallbackData
891 );
892
893 VOID
894 UpdateCOM1Page (
895 IN BMM_CALLBACK_DATA *CallbackData
896 );
897
898 VOID
899 UpdateCOM2Page (
900 IN BMM_CALLBACK_DATA *CallbackData
901 );
902
903 VOID
904 UpdateBootOrderPage (
905 IN BMM_CALLBACK_DATA *CallbackData
906 );
907
908 VOID
909 UpdateDriverOrderPage (
910 IN BMM_CALLBACK_DATA *CallbackData
911 );
912
913 VOID
914 UpdateBootNextPage (
915 IN BMM_CALLBACK_DATA *CallbackData
916 );
917
918 VOID
919 UpdateTimeOutPage (
920 IN BMM_CALLBACK_DATA *CallbackData
921 );
922
923 VOID
924 UpdateTerminalPage (
925 IN BMM_CALLBACK_DATA *CallbackData
926 );
927
928 VOID
929 UpdateConCOMPage (
930 IN BMM_CALLBACK_DATA *CallbackData
931 );
932
933 VOID
934 UpdateSetLegacyDeviceOrderPage (
935 IN UINT16 UpdatePageId,
936 IN BMM_CALLBACK_DATA *CallbackData
937 );
938
939 EFI_STATUS
940 BootLegacy (
941 IN UINT16 BbsType,
942 IN UINT16 BbsFlag
943 );
944
945 BM_MENU_ENTRY *
946 GetCurrentTerminal (
947 UINTN TerminalNumber
948 );
949
950 EFI_FILE_HANDLE
951 EfiLibOpenRoot (
952 IN EFI_HANDLE DeviceHandle
953 );
954
955 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
956 EfiLibFileSystemVolumeLabelInfo (
957 IN EFI_FILE_HANDLE FHand
958 );
959
960 EFI_FILE_INFO *
961 EfiLibFileInfo (
962 IN EFI_FILE_HANDLE FHand
963 );
964
965 CHAR16 *
966 DevicePathToStr (
967 EFI_DEVICE_PATH_PROTOCOL *DevPath
968 );
969
970 EFI_STATUS
971 EfiLibLocateProtocol (
972 IN EFI_GUID *ProtocolGuid,
973 OUT VOID **Interface
974 );
975
976 VOID *
977 EfiReallocatePool (
978 IN VOID *OldPool,
979 IN UINTN OldSize,
980 IN UINTN NewSize
981 );
982
983 CHAR16 *
984 DevicePathToStr (
985 EFI_DEVICE_PATH_PROTOCOL *DevPath
986 );
987
988 VOID *
989 BdsLibGetVariableAndSize (
990 IN CHAR16 *Name,
991 IN EFI_GUID *VendorGuid,
992 OUT UINTN *VarSize
993 );
994
995 EFI_STATUS
996 EfiLibDeleteVariable (
997 IN CHAR16 *VarName,
998 IN EFI_GUID *VarGuid
999 );
1000
1001 CHAR16 *
1002 EfiStrDuplicate (
1003 IN CHAR16 *Src
1004 );
1005
1006 BOOLEAN
1007 EfiLibMatchDevicePaths (
1008 IN EFI_DEVICE_PATH_PROTOCOL *Multi,
1009 IN EFI_DEVICE_PATH_PROTOCOL *Single
1010 );
1011
1012 UINTN
1013 EfiDevicePathInstanceCount (
1014 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
1015 );
1016
1017 EFI_STATUS
1018 CreateMenuStringToken (
1019 IN BMM_CALLBACK_DATA *CallbackData,
1020 IN EFI_HII_HANDLE HiiHandle,
1021 IN BM_MENU_OPTION *MenuOption
1022 );
1023
1024 UINT16 *
1025 EfiLibStrFromDatahub (
1026 IN EFI_DEVICE_PATH_PROTOCOL *DevPath
1027 );
1028
1029 VOID *
1030 GetLegacyBootOptionVar (
1031 IN UINTN DeviceType,
1032 OUT UINTN *OptionIndex,
1033 OUT UINTN *OptionSize
1034 );
1035
1036 EFI_STATUS
1037 InitializeBM (
1038 VOID
1039 );
1040
1041 EFI_STATUS
1042 BdsStartBootMaint (
1043 VOID
1044 );
1045
1046 VOID
1047 InitializeStringDepository ();
1048
1049 STRING_REF
1050 GetStringTokenFromDepository (
1051 IN BMM_CALLBACK_DATA *CallbackData,
1052 IN STRING_DEPOSITORY *StringDepository
1053 ) ;
1054
1055 VOID
1056 ReclaimStringDepository (
1057 VOID
1058 );
1059
1060 VOID
1061 CleanUpStringDepository (
1062 VOID
1063 );
1064
1065 EFI_STATUS
1066 ApplyChangeHandler (
1067 IN BMM_CALLBACK_DATA *Private,
1068 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap,
1069 IN FORM_ID FormId
1070 );
1071
1072 VOID
1073 DiscardChangeHandler (
1074 IN BMM_CALLBACK_DATA *Private,
1075 IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
1076 );
1077
1078 VOID
1079 UpdatePageId (
1080 BMM_CALLBACK_DATA *Private,
1081 UINT16 NewPageId
1082 );
1083
1084 EFI_STATUS
1085 BootThisFile (
1086 IN BM_FILE_CONTEXT *FileContext
1087 );
1088
1089 BOOLEAN
1090 UpdateFileExplorer (
1091 IN BMM_CALLBACK_DATA *CallbackData,
1092 IN UINT16 KeyValue
1093 );
1094
1095 EFI_STATUS
1096 EFIAPI
1097 FileExplorerCallback (
1098 IN EFI_FORM_CALLBACK_PROTOCOL *This,
1099 IN UINT16 KeyValue,
1100 IN EFI_IFR_DATA_ARRAY *Data,
1101 OUT EFI_HII_CALLBACK_PACKET **Packet
1102 );
1103
1104 EFI_STATUS
1105 FormSetDispatcher (
1106 IN BMM_CALLBACK_DATA *CallbackData
1107 );
1108
1109 VOID CreateCallbackPacket (
1110 OUT EFI_HII_CALLBACK_PACKET **Packet,
1111 IN UINT16 Flags
1112 );
1113
1114 //
1115 // Global variable in this program (defined in data.c)
1116 //
1117 extern BM_MENU_OPTION BootOptionMenu;
1118 extern BM_MENU_OPTION DriverOptionMenu;
1119 extern BM_MENU_OPTION FsOptionMenu;
1120 extern BM_MENU_OPTION ConsoleInpMenu;
1121 extern BM_MENU_OPTION ConsoleOutMenu;
1122 extern BM_MENU_OPTION ConsoleErrMenu;
1123 extern BM_MENU_OPTION DirectoryMenu;
1124 extern BM_MENU_OPTION DriverMenu;
1125 extern BM_MENU_OPTION TerminalMenu;
1126 extern BM_MENU_OPTION LegacyFDMenu;
1127 extern BM_MENU_OPTION LegacyHDMenu;
1128 extern BM_MENU_OPTION LegacyCDMenu;
1129 extern BM_MENU_OPTION LegacyNETMenu;
1130 extern BM_MENU_OPTION LegacyBEVMenu;
1131 extern UINT16 TerminalType[];
1132 extern COM_ATTR BaudRateList[19];
1133 extern COM_ATTR DataBitsList[4];
1134 extern COM_ATTR ParityList[5];
1135 extern COM_ATTR StopBitsList[3];
1136 extern EFI_GUID Guid[4];
1137 extern EFI_HII_UPDATE_DATA *UpdateData;
1138 extern STRING_DEPOSITORY *FileOptionStrDepository;
1139 extern STRING_DEPOSITORY *ConsoleOptionStrDepository;
1140 extern STRING_DEPOSITORY *BootOptionStrDepository;
1141 extern STRING_DEPOSITORY *BootOptionHelpStrDepository;
1142 extern STRING_DEPOSITORY *DriverOptionStrDepository;
1143 extern STRING_DEPOSITORY *DriverOptionHelpStrDepository;
1144 extern STRING_DEPOSITORY *TerminalStrDepository;
1145 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];
1146 extern EFI_GUID EfiLegacyDevOrderGuid;
1147
1148 #endif