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