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.
26 // Include common header file for this module.
28 #include "CommonHeader.h"
30 #include "Generic/BootMaint/BBSsupport.h"
33 // Constants which are variable names used to access variables
35 #define VarLegacyDevOrder L"LegacyDevOrder"
38 // Guid of a NV Variable which store the information about the
39 // FD/HD/CD/NET/BEV order
41 #define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \
43 0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52 } \
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"
61 // Constant will be used in display and file system navigation
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
78 // Variable created with this flag will be "Efi:...."
80 #define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
83 // Define Maxmim characters that will be accepted
86 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
89 // Check to see if current build support option active feature of
92 #define LOAD_OPTION_ACTIVE 0x00000001
95 // Check to see if current build support force reconnect feature of
98 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
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.
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
147 #define MAXIMUM_FORM_ID 0x007F
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
163 #define MAXIMUM_NORMAL_KEY_VALUE NORMAL_GOTO_OFFSET
165 // Below are the number of options in Baudrate, Databits,
166 // Parity and Stopbits selection for serial ports.
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
174 // Callback function helper
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)
179 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
182 // Enumeration type definition
217 } TYPE_OF_UPATE_MANNER
;
221 BOOT_FROM_FILE_STATE
,
222 ADD_BOOT_OPTION_STATE
,
223 ADD_DRIVER_OPTION_STATE
,
225 } FILE_EXPLORER_STATE
;
231 } FILE_EXPLORER_DISPLAY_CONTEXT
;
234 // All of the signatures that will be used in list structure
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'
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
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
256 // Question Id that will be used to create question
257 // all these values are computed from the structure
260 #define QUESTION_ID(Field) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))
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)
300 #define STRING_DEPOSITORY_NUMBER 8
305 // Serial Ports attributes, first one is the value for
306 // return from callback function, stringtoken is used to
307 // display the value properly
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
324 // Three questions displayed at the main page
325 // for Timeout, BootNext Variables respectively
331 // This is the COM1 Attributes value storage
337 UINT8 COM1TerminalType
;
340 // This is the COM2 Attributes value storage
346 UINT8 COM2TerminalType
;
349 // Driver Option Add Handle page storage
351 UINT16 DriverAddHandleDesc
[100];
352 UINT16 DriverAddHandleOptionalData
[100];
353 UINT8 DriverAddActive
;
354 UINT8 DriverAddForceReconnect
;
357 // Console Input/Output/Errorout using COM port check storage
359 UINT8 ConsoleInputCOM1
;
360 UINT8 ConsoleInputCOM2
;
361 UINT8 ConsoleOutputCOM1
;
362 UINT8 ConsoleOutputCOM2
;
363 UINT8 ConsoleErrorCOM1
;
364 UINT8 ConsoleErrorCOM2
;
367 // At most 100 input/output/errorout device for console storage
369 UINT8 ConsoleCheck
[100];
372 // Boot or Driver Option Order storage
374 UINT8 OptionOrder
[100];
375 UINT8 DriverOptionToBeDeleted
[100];
378 // Boot Option Delete storage
380 UINT8 BootOptionDel
[100];
381 UINT8 DriverOptionDel
[100];
384 // This is the Terminal Attributes value storage
390 UINT8 COMTerminalType
;
393 // Legacy Device Order Selection Storage
398 UINT8 LegacyNET
[100];
399 UINT8 LegacyBEV
[100];
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.
407 UINT8 DisableMap
[32];
410 // UINT16 PadArea[10];
415 UINT16 DescriptionData
[75];
416 UINT16 OptionalData
[127];
418 UINT8 ForceReconnect
;
419 } FILE_EXPLORER_NV_DATA
;
424 // Length = sizeof (UINT16) + SIZEOF (Data)
428 } BM_LEGACY_DEV_ORDER_CONTEXT
;
446 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
447 } BM_TERMINAL_CONTEXT
;
451 BOOLEAN LoadOptionModified
;
456 BOOLEAN ForceReconnect
;
457 UINTN OptionalDataSize
;
459 UINTN LoadOptionSize
;
463 UINT16 FilePathListLength
;
465 EFI_DEVICE_PATH_PROTOCOL
*FilePathList
;
476 } BM_LEGACY_DEVICE_CONTEXT
;
484 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
485 } BM_CONSOLE_CONTEXT
;
489 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
490 EFI_FILE_HANDLE FHandle
;
492 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*Info
;
496 BOOLEAN IsRemovableMedia
;
498 BOOLEAN IsBootLegacy
;
503 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
516 UINT16
*DisplayString
;
518 STRING_REF DisplayStringToken
;
519 STRING_REF HelpStringToken
;
520 UINTN ContextSelection
;
521 VOID
*VariableContext
;
526 // Shared callback data.
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
;
539 // BMM main formset callback data.
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
;
551 // File explorer formset callback data.
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
;
560 typedef struct _STRING_LIST_NODE
{
561 STRING_REF StringToken
;
562 struct _STRING_LIST_NODE
*Next
;
565 typedef struct _STRING_DEPOSITORY
{
566 UINTN TotalNodeNumber
;
567 STRING_LIST_NODE
*CurrentNode
;
568 STRING_LIST_NODE
*ListHead
;
574 // For initializing File System menu
577 BOpt_FindFileSystem (
578 IN BMM_CALLBACK_DATA
*CallbackData
583 // For cleaning up File System menu
586 BOpt_FreeFileSystem (
592 // For initializing File Navigation menu
596 IN BMM_CALLBACK_DATA
*CallbackData
,
597 IN BM_MENU_ENTRY
*MenuEntry
602 // For cleaning up File Navigation menu
611 // For Initializing handle navigation menu
620 // For Cleaning up handle navigation menu
626 // For initializing Boot Option menu
629 BOpt_GetBootOptions (
630 IN BMM_CALLBACK_DATA
*CallbackData
634 // For Initializing Driver option menu
637 BOpt_GetDriverOptions (
638 IN BMM_CALLBACK_DATA
*CallbackData
642 // For Cleaning up boot option menu
645 BOpt_FreeBootOptions ();
648 // For cleaning up driver option menu
651 BOpt_FreeDriverOptions();
654 // For Initializing HD/FD/CD/NET/BEV option menu
657 BOpt_GetLegacyOptions();
660 // For cleaning up driver option menu
663 BOpt_FreeLegacyOptions();
666 // this function is used to take place of all other free menu actions
670 BM_MENU_OPTION
*FreeMenu
675 // Following are the helper functions used
678 BOpt_AppendFileName (
684 BOpt_IsEfiImageName (
690 IN EFI_FILE_HANDLE Dir
,
695 // Get current unused boot option number
698 BOpt_GetBootOptionNumber ();
701 // Get current unused driver option number
704 BOpt_GetDriverOptionNumber ();
707 BOpt_CreateMenuEntry (
712 BOpt_DestroyMenuEntry (
713 BM_MENU_ENTRY
*MenuEntry
718 BM_MENU_OPTION
*MenuOption
,
723 // a helper function used to free pool type memory
731 // Locate all serial io devices for console
737 // Initializing Console menu
743 // Cleaning up console menu
749 ChangeVariableDevicePath (
750 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
754 ChangeTerminalDevicePath (
755 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
756 BOOLEAN ChangeTerminal
759 // Variable operation by menu selection
762 Var_UpdateBootOption (
763 IN BMM_CALLBACK_DATA
*CallbackData
,
764 IN FILE_EXPLORER_NV_DATA
*NvRamMap
768 Var_DelBootOption ();
771 Var_ChangeBootOrder ();
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
783 Var_DelDriverOption ();
786 Var_ChangeDriverOrder ();
789 Var_UpdateConsoleInpOption ();
792 Var_UpdateConsoleOutOption ();
795 Var_UpdateErrorOutOption ();
798 Var_UpdateAllConsoleOption ();
802 IN BMM_CALLBACK_DATA
*CallbackData
806 Var_UpdateBootOrder (
807 IN BMM_CALLBACK_DATA
*CallbackData
811 Var_UpdateDriverOrder (
812 IN BMM_CALLBACK_DATA
*CallbackData
816 Var_UpdateBBSOption (
817 IN BMM_CALLBACK_DATA
*CallbackData
821 // Following are page create and refresh functions
825 IN BOOLEAN FormSetUpdate
,
826 IN EFI_PHYSICAL_ADDRESS FormCallbackHandle
,
827 IN BOOLEAN FormUpdate
,
828 IN STRING_REF FormTitle
,
834 IN EFI_FORM_LABEL LabelId
,
835 IN BMM_CALLBACK_DATA
*CallbackData
840 IN BMM_CALLBACK_DATA
*CallbackData
,
841 IN BM_MENU_OPTION
*UpdatingMenu
,
842 IN UINT16 UpdatingPage
,
843 IN UINT16 UpdatingManner
,
844 IN UINT16 QuestionIdStart
,
846 IN UINT16 GotoAlternateForm
,
847 IN STRING_REF DisplayTokenStart
,
848 IN STRING_REF HelpTokenStart
,
849 IN UINT16 KeyValueStart
854 IN BMM_CALLBACK_DATA
*CallbackData
859 IN BMM_CALLBACK_DATA
*CallbackData
863 UpdateDrvAddFilePage (
864 IN BMM_CALLBACK_DATA
*CallbackData
868 UpdateDrvAddHandlePage (
869 IN BMM_CALLBACK_DATA
*CallbackData
874 IN BMM_CALLBACK_DATA
*CallbackData
878 UpdateDriverAddHandleDescPage (
879 IN BMM_CALLBACK_DATA
*CallbackData
884 IN BMM_CALLBACK_DATA
*CallbackData
889 IN BMM_CALLBACK_DATA
*CallbackData
894 IN BMM_CALLBACK_DATA
*CallbackData
899 IN BMM_CALLBACK_DATA
*CallbackData
904 IN UINT16 UpdatePageId
,
905 IN BMM_CALLBACK_DATA
*CallbackData
910 IN BMM_CALLBACK_DATA
*CallbackData
915 IN BMM_CALLBACK_DATA
*CallbackData
919 UpdateBootOrderPage (
920 IN BMM_CALLBACK_DATA
*CallbackData
924 UpdateDriverOrderPage (
925 IN BMM_CALLBACK_DATA
*CallbackData
930 IN BMM_CALLBACK_DATA
*CallbackData
935 IN BMM_CALLBACK_DATA
*CallbackData
940 IN BMM_CALLBACK_DATA
*CallbackData
945 IN BMM_CALLBACK_DATA
*CallbackData
949 UpdateSetLegacyDeviceOrderPage (
950 IN UINT16 UpdatePageId
,
951 IN BMM_CALLBACK_DATA
*CallbackData
967 IN EFI_HANDLE DeviceHandle
970 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*
971 EfiLibFileSystemVolumeLabelInfo (
972 IN EFI_FILE_HANDLE FHand
977 IN EFI_FILE_HANDLE FHand
982 EFI_DEVICE_PATH_PROTOCOL
*DevPath
986 EfiLibLocateProtocol (
987 IN EFI_GUID
*ProtocolGuid
,
1000 EFI_DEVICE_PATH_PROTOCOL
*DevPath
1004 BdsLibGetVariableAndSize (
1006 IN EFI_GUID
*VendorGuid
,
1011 EfiLibDeleteVariable (
1013 IN EFI_GUID
*VarGuid
1022 EfiLibMatchDevicePaths (
1023 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
1024 IN EFI_DEVICE_PATH_PROTOCOL
*Single
1028 EfiDevicePathInstanceCount (
1029 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
1033 CreateMenuStringToken (
1034 IN BMM_CALLBACK_DATA
*CallbackData
,
1035 IN EFI_HII_HANDLE HiiHandle
,
1036 IN BM_MENU_OPTION
*MenuOption
1040 EfiLibStrFromDatahub (
1041 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
1045 GetLegacyBootOptionVar (
1046 IN UINTN DeviceType
,
1047 OUT UINTN
*OptionIndex
,
1048 OUT UINTN
*OptionSize
1062 InitializeStringDepository ();
1065 GetStringTokenFromDepository (
1066 IN BMM_CALLBACK_DATA
*CallbackData
,
1067 IN STRING_DEPOSITORY
*StringDepository
1071 ReclaimStringDepository (
1076 CleanUpStringDepository (
1081 ApplyChangeHandler (
1082 IN BMM_CALLBACK_DATA
*Private
,
1083 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
,
1088 DiscardChangeHandler (
1089 IN BMM_CALLBACK_DATA
*Private
,
1090 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
1095 BMM_CALLBACK_DATA
*Private
,
1101 IN BM_FILE_CONTEXT
*FileContext
1105 UpdateFileExplorer (
1106 IN BMM_CALLBACK_DATA
*CallbackData
,
1112 FileExplorerCallback (
1113 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
1115 IN EFI_IFR_DATA_ARRAY
*Data
,
1116 OUT EFI_HII_CALLBACK_PACKET
**Packet
1121 IN BMM_CALLBACK_DATA
*CallbackData
1124 VOID
CreateCallbackPacket (
1125 OUT EFI_HII_CALLBACK_PACKET
**Packet
,
1130 // Global variable in this program (defined in data.c)
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
;