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
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.
25 #include "BdsStrDefs.h"
26 #include "Generic/BootMaint/BBSsupport.h"
29 // Constants which are variable names used to access variables
31 #define VarLegacyDevOrder L"LegacyDevOrder"
34 // Guid of a NV Variable which store the information about the
35 // FD/HD/CD/NET/BEV order
37 #define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \
39 0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52 } \
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"
57 // Constant will be used in display and file system navigation
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
74 // Variable created with this flag will be "Efi:...."
76 #define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
79 // Define Maxmim characters that will be accepted
82 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
85 // Check to see if current build support option active feature of
88 #define LOAD_OPTION_ACTIVE 0x00000001
91 // Check to see if current build support force reconnect feature of
94 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
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.
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
143 #define MAXIMUM_FORM_ID 0x007F
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
159 #define MAXIMUM_NORMAL_KEY_VALUE NORMAL_GOTO_OFFSET
161 // Below are the number of options in Baudrate, Databits,
162 // Parity and Stopbits selection for serial ports.
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
170 // Callback function helper
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)
175 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
178 // Enumeration type definition
213 } TYPE_OF_UPATE_MANNER
;
217 BOOT_FROM_FILE_STATE
,
218 ADD_BOOT_OPTION_STATE
,
219 ADD_DRIVER_OPTION_STATE
,
221 } FILE_EXPLORER_STATE
;
227 } FILE_EXPLORER_DISPLAY_CONTEXT
;
230 // All of the signatures that will be used in list structure
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'
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
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
252 // Question Id that will be used to create question
253 // all these values are computed from the structure
256 #define QUESTION_ID(Field) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))
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)
296 #define STRING_DEPOSITORY_NUMBER 8
301 // Serial Ports attributes, first one is the value for
302 // return from callback function, stringtoken is used to
303 // display the value properly
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
320 // Three questions displayed at the main page
321 // for Timeout, BootNext Variables respectively
327 // This is the COM1 Attributes value storage
333 UINT8 COM1TerminalType
;
336 // This is the COM2 Attributes value storage
342 UINT8 COM2TerminalType
;
345 // Driver Option Add Handle page storage
347 UINT16 DriverAddHandleDesc
[100];
348 UINT16 DriverAddHandleOptionalData
[100];
349 UINT8 DriverAddActive
;
350 UINT8 DriverAddForceReconnect
;
353 // Console Input/Output/Errorout using COM port check storage
355 UINT8 ConsoleInputCOM1
;
356 UINT8 ConsoleInputCOM2
;
357 UINT8 ConsoleOutputCOM1
;
358 UINT8 ConsoleOutputCOM2
;
359 UINT8 ConsoleErrorCOM1
;
360 UINT8 ConsoleErrorCOM2
;
363 // At most 100 input/output/errorout device for console storage
365 UINT8 ConsoleCheck
[100];
368 // Boot or Driver Option Order storage
370 UINT8 OptionOrder
[100];
371 UINT8 DriverOptionToBeDeleted
[100];
374 // Boot Option Delete storage
376 UINT8 BootOptionDel
[100];
377 UINT8 DriverOptionDel
[100];
380 // This is the Terminal Attributes value storage
386 UINT8 COMTerminalType
;
389 // Legacy Device Order Selection Storage
394 UINT8 LegacyNET
[100];
395 UINT8 LegacyBEV
[100];
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.
403 UINT8 DisableMap
[32];
406 // UINT16 PadArea[10];
411 UINT16 DescriptionData
[75];
412 UINT16 OptionalData
[127];
414 UINT8 ForceReconnect
;
415 } FILE_EXPLORER_NV_DATA
;
420 // Length = sizeof (UINT16) + SIZEOF (Data)
424 } BM_LEGACY_DEV_ORDER_CONTEXT
;
442 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
443 } BM_TERMINAL_CONTEXT
;
447 BOOLEAN LoadOptionModified
;
452 BOOLEAN ForceReconnect
;
453 UINTN OptionalDataSize
;
455 UINTN LoadOptionSize
;
459 UINT16 FilePathListLength
;
461 EFI_DEVICE_PATH_PROTOCOL
*FilePathList
;
472 } BM_LEGACY_DEVICE_CONTEXT
;
480 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
481 } BM_CONSOLE_CONTEXT
;
485 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
486 EFI_FILE_HANDLE FHandle
;
488 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*Info
;
492 BOOLEAN IsRemovableMedia
;
494 BOOLEAN IsBootLegacy
;
499 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
512 UINT16
*DisplayString
;
514 STRING_REF DisplayStringToken
;
515 STRING_REF HelpStringToken
;
516 UINTN ContextSelection
;
517 VOID
*VariableContext
;
522 // Shared callback data.
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
;
535 // BMM main formset callback data.
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
;
547 // File explorer formset callback data.
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
;
556 typedef struct _STRING_LIST_NODE
{
557 STRING_REF StringToken
;
558 struct _STRING_LIST_NODE
*Next
;
561 typedef struct _STRING_DEPOSITORY
{
562 UINTN TotalNodeNumber
;
563 STRING_LIST_NODE
*CurrentNode
;
564 STRING_LIST_NODE
*ListHead
;
570 // For initializing File System menu
573 BOpt_FindFileSystem (
574 IN BMM_CALLBACK_DATA
*CallbackData
579 // For cleaning up File System menu
582 BOpt_FreeFileSystem (
588 // For initializing File Navigation menu
592 IN BMM_CALLBACK_DATA
*CallbackData
,
593 IN BM_MENU_ENTRY
*MenuEntry
598 // For cleaning up File Navigation menu
607 // For Initializing handle navigation menu
616 // For Cleaning up handle navigation menu
622 // For initializing Boot Option menu
625 BOpt_GetBootOptions (
626 IN BMM_CALLBACK_DATA
*CallbackData
630 // For Initializing Driver option menu
633 BOpt_GetDriverOptions (
634 IN BMM_CALLBACK_DATA
*CallbackData
638 // For Cleaning up boot option menu
641 BOpt_FreeBootOptions ();
644 // For cleaning up driver option menu
647 BOpt_FreeDriverOptions();
650 // For Initializing HD/FD/CD/NET/BEV option menu
653 BOpt_GetLegacyOptions();
656 // For cleaning up driver option menu
659 BOpt_FreeLegacyOptions();
662 // this function is used to take place of all other free menu actions
666 BM_MENU_OPTION
*FreeMenu
671 // Following are the helper functions used
674 BOpt_AppendFileName (
680 BOpt_IsEfiImageName (
686 IN EFI_FILE_HANDLE Dir
,
691 // Get current unused boot option number
694 BOpt_GetBootOptionNumber ();
697 // Get current unused driver option number
700 BOpt_GetDriverOptionNumber ();
703 BOpt_CreateMenuEntry (
708 BOpt_DestroyMenuEntry (
709 BM_MENU_ENTRY
*MenuEntry
714 BM_MENU_OPTION
*MenuOption
,
719 // a helper function used to free pool type memory
727 // Locate all serial io devices for console
733 // Initializing Console menu
739 // Cleaning up console menu
745 ChangeVariableDevicePath (
746 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
750 ChangeTerminalDevicePath (
751 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
752 BOOLEAN ChangeTerminal
755 // Variable operation by menu selection
758 Var_UpdateBootOption (
759 IN BMM_CALLBACK_DATA
*CallbackData
,
760 IN FILE_EXPLORER_NV_DATA
*NvRamMap
764 Var_DelBootOption ();
767 Var_ChangeBootOrder ();
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
779 Var_DelDriverOption ();
782 Var_ChangeDriverOrder ();
785 Var_UpdateConsoleInpOption ();
788 Var_UpdateConsoleOutOption ();
791 Var_UpdateErrorOutOption ();
794 Var_UpdateAllConsoleOption ();
798 IN BMM_CALLBACK_DATA
*CallbackData
802 Var_UpdateBootOrder (
803 IN BMM_CALLBACK_DATA
*CallbackData
807 Var_UpdateDriverOrder (
808 IN BMM_CALLBACK_DATA
*CallbackData
812 Var_UpdateBBSOption (
813 IN BMM_CALLBACK_DATA
*CallbackData
817 // Following are page create and refresh functions
821 IN BOOLEAN FormSetUpdate
,
822 IN EFI_PHYSICAL_ADDRESS FormCallbackHandle
,
823 IN BOOLEAN FormUpdate
,
824 IN STRING_REF FormTitle
,
830 IN EFI_FORM_LABEL LabelId
,
831 IN BMM_CALLBACK_DATA
*CallbackData
836 IN BMM_CALLBACK_DATA
*CallbackData
,
837 IN BM_MENU_OPTION
*UpdatingMenu
,
838 IN UINT16 UpdatingPage
,
839 IN UINT16 UpdatingManner
,
840 IN UINT16 QuestionIdStart
,
842 IN UINT16 GotoAlternateForm
,
843 IN STRING_REF DisplayTokenStart
,
844 IN STRING_REF HelpTokenStart
,
845 IN UINT16 KeyValueStart
850 IN BMM_CALLBACK_DATA
*CallbackData
855 IN BMM_CALLBACK_DATA
*CallbackData
859 UpdateDrvAddFilePage (
860 IN BMM_CALLBACK_DATA
*CallbackData
864 UpdateDrvAddHandlePage (
865 IN BMM_CALLBACK_DATA
*CallbackData
870 IN BMM_CALLBACK_DATA
*CallbackData
874 UpdateDriverAddHandleDescPage (
875 IN BMM_CALLBACK_DATA
*CallbackData
880 IN BMM_CALLBACK_DATA
*CallbackData
885 IN BMM_CALLBACK_DATA
*CallbackData
890 IN BMM_CALLBACK_DATA
*CallbackData
895 IN BMM_CALLBACK_DATA
*CallbackData
900 IN UINT16 UpdatePageId
,
901 IN BMM_CALLBACK_DATA
*CallbackData
906 IN BMM_CALLBACK_DATA
*CallbackData
911 IN BMM_CALLBACK_DATA
*CallbackData
915 UpdateBootOrderPage (
916 IN BMM_CALLBACK_DATA
*CallbackData
920 UpdateDriverOrderPage (
921 IN BMM_CALLBACK_DATA
*CallbackData
926 IN BMM_CALLBACK_DATA
*CallbackData
931 IN BMM_CALLBACK_DATA
*CallbackData
936 IN BMM_CALLBACK_DATA
*CallbackData
941 IN BMM_CALLBACK_DATA
*CallbackData
945 UpdateSetLegacyDeviceOrderPage (
946 IN UINT16 UpdatePageId
,
947 IN BMM_CALLBACK_DATA
*CallbackData
963 IN EFI_HANDLE DeviceHandle
966 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*
967 EfiLibFileSystemVolumeLabelInfo (
968 IN EFI_FILE_HANDLE FHand
973 IN EFI_FILE_HANDLE FHand
978 EFI_DEVICE_PATH_PROTOCOL
*DevPath
982 EfiLibLocateProtocol (
983 IN EFI_GUID
*ProtocolGuid
,
996 EFI_DEVICE_PATH_PROTOCOL
*DevPath
1000 BdsLibGetVariableAndSize (
1002 IN EFI_GUID
*VendorGuid
,
1007 EfiLibDeleteVariable (
1009 IN EFI_GUID
*VarGuid
1018 EfiLibMatchDevicePaths (
1019 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
1020 IN EFI_DEVICE_PATH_PROTOCOL
*Single
1024 EfiDevicePathInstanceCount (
1025 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
1029 CreateMenuStringToken (
1030 IN BMM_CALLBACK_DATA
*CallbackData
,
1031 IN EFI_HII_HANDLE HiiHandle
,
1032 IN BM_MENU_OPTION
*MenuOption
1036 EfiLibStrFromDatahub (
1037 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
1041 GetLegacyBootOptionVar (
1042 IN UINTN DeviceType
,
1043 OUT UINTN
*OptionIndex
,
1044 OUT UINTN
*OptionSize
1058 InitializeStringDepository ();
1061 GetStringTokenFromDepository (
1062 IN BMM_CALLBACK_DATA
*CallbackData
,
1063 IN STRING_DEPOSITORY
*StringDepository
1067 ReclaimStringDepository (
1072 CleanUpStringDepository (
1077 ApplyChangeHandler (
1078 IN BMM_CALLBACK_DATA
*Private
,
1079 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
,
1084 DiscardChangeHandler (
1085 IN BMM_CALLBACK_DATA
*Private
,
1086 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
1091 BMM_CALLBACK_DATA
*Private
,
1097 IN BM_FILE_CONTEXT
*FileContext
1101 UpdateFileExplorer (
1102 IN BMM_CALLBACK_DATA
*CallbackData
,
1108 FileExplorerCallback (
1109 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
1111 IN EFI_IFR_DATA_ARRAY
*Data
,
1112 OUT EFI_HII_CALLBACK_PACKET
**Packet
1117 IN BMM_CALLBACK_DATA
*CallbackData
1120 VOID
CreateCallbackPacket (
1121 OUT EFI_HII_CALLBACK_PACKET
**Packet
,
1126 // Global variable in this program (defined in data.c)
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
;