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