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