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