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 "BdsStrDefs.h"
31 #include "Generic/BootMaint/BBSsupport.h"
34 // Constants which are variable names used to access variables
36 #define VarLegacyDevOrder L"LegacyDevOrder"
39 // Guid of a NV Variable which store the information about the
40 // FD/HD/CD/NET/BEV order
42 #define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \
44 0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52 } \
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"
62 // Constant will be used in display and file system navigation
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
79 // Variable created with this flag will be "Efi:...."
81 #define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
84 // Define Maxmim characters that will be accepted
87 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
90 // Check to see if current build support option active feature of
93 #define LOAD_OPTION_ACTIVE 0x00000001
96 // Check to see if current build support force reconnect feature of
99 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
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.
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
148 #define MAXIMUM_FORM_ID 0x007F
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
164 #define MAXIMUM_NORMAL_KEY_VALUE NORMAL_GOTO_OFFSET
166 // Below are the number of options in Baudrate, Databits,
167 // Parity and Stopbits selection for serial ports.
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
175 // Callback function helper
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)
180 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
183 // Enumeration type definition
218 } TYPE_OF_UPATE_MANNER
;
222 BOOT_FROM_FILE_STATE
,
223 ADD_BOOT_OPTION_STATE
,
224 ADD_DRIVER_OPTION_STATE
,
226 } FILE_EXPLORER_STATE
;
232 } FILE_EXPLORER_DISPLAY_CONTEXT
;
235 // All of the signatures that will be used in list structure
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'
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
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
257 // Question Id that will be used to create question
258 // all these values are computed from the structure
261 #define QUESTION_ID(Field) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))
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)
301 #define STRING_DEPOSITORY_NUMBER 8
306 // Serial Ports attributes, first one is the value for
307 // return from callback function, stringtoken is used to
308 // display the value properly
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
325 // Three questions displayed at the main page
326 // for Timeout, BootNext Variables respectively
332 // This is the COM1 Attributes value storage
338 UINT8 COM1TerminalType
;
341 // This is the COM2 Attributes value storage
347 UINT8 COM2TerminalType
;
350 // Driver Option Add Handle page storage
352 UINT16 DriverAddHandleDesc
[100];
353 UINT16 DriverAddHandleOptionalData
[100];
354 UINT8 DriverAddActive
;
355 UINT8 DriverAddForceReconnect
;
358 // Console Input/Output/Errorout using COM port check storage
360 UINT8 ConsoleInputCOM1
;
361 UINT8 ConsoleInputCOM2
;
362 UINT8 ConsoleOutputCOM1
;
363 UINT8 ConsoleOutputCOM2
;
364 UINT8 ConsoleErrorCOM1
;
365 UINT8 ConsoleErrorCOM2
;
368 // At most 100 input/output/errorout device for console storage
370 UINT8 ConsoleCheck
[100];
373 // Boot or Driver Option Order storage
375 UINT8 OptionOrder
[100];
376 UINT8 DriverOptionToBeDeleted
[100];
379 // Boot Option Delete storage
381 UINT8 BootOptionDel
[100];
382 UINT8 DriverOptionDel
[100];
385 // This is the Terminal Attributes value storage
391 UINT8 COMTerminalType
;
394 // Legacy Device Order Selection Storage
399 UINT8 LegacyNET
[100];
400 UINT8 LegacyBEV
[100];
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.
408 UINT8 DisableMap
[32];
411 // UINT16 PadArea[10];
416 UINT16 DescriptionData
[75];
417 UINT16 OptionalData
[127];
419 UINT8 ForceReconnect
;
420 } FILE_EXPLORER_NV_DATA
;
425 // Length = sizeof (UINT16) + SIZEOF (Data)
429 } BM_LEGACY_DEV_ORDER_CONTEXT
;
447 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
448 } BM_TERMINAL_CONTEXT
;
452 BOOLEAN LoadOptionModified
;
457 BOOLEAN ForceReconnect
;
458 UINTN OptionalDataSize
;
460 UINTN LoadOptionSize
;
464 UINT16 FilePathListLength
;
466 EFI_DEVICE_PATH_PROTOCOL
*FilePathList
;
477 } BM_LEGACY_DEVICE_CONTEXT
;
485 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
486 } BM_CONSOLE_CONTEXT
;
490 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
491 EFI_FILE_HANDLE FHandle
;
493 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*Info
;
497 BOOLEAN IsRemovableMedia
;
499 BOOLEAN IsBootLegacy
;
504 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
517 UINT16
*DisplayString
;
519 STRING_REF DisplayStringToken
;
520 STRING_REF HelpStringToken
;
521 UINTN ContextSelection
;
522 VOID
*VariableContext
;
527 // Shared callback data.
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
;
540 // BMM main formset callback data.
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
;
552 // File explorer formset callback data.
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
;
561 typedef struct _STRING_LIST_NODE
{
562 STRING_REF StringToken
;
563 struct _STRING_LIST_NODE
*Next
;
566 typedef struct _STRING_DEPOSITORY
{
567 UINTN TotalNodeNumber
;
568 STRING_LIST_NODE
*CurrentNode
;
569 STRING_LIST_NODE
*ListHead
;
575 // For initializing File System menu
578 BOpt_FindFileSystem (
579 IN BMM_CALLBACK_DATA
*CallbackData
584 // For cleaning up File System menu
587 BOpt_FreeFileSystem (
593 // For initializing File Navigation menu
597 IN BMM_CALLBACK_DATA
*CallbackData
,
598 IN BM_MENU_ENTRY
*MenuEntry
603 // For cleaning up File Navigation menu
612 // For Initializing handle navigation menu
621 // For Cleaning up handle navigation menu
627 // For initializing Boot Option menu
630 BOpt_GetBootOptions (
631 IN BMM_CALLBACK_DATA
*CallbackData
635 // For Initializing Driver option menu
638 BOpt_GetDriverOptions (
639 IN BMM_CALLBACK_DATA
*CallbackData
643 // For Cleaning up boot option menu
646 BOpt_FreeBootOptions ();
649 // For cleaning up driver option menu
652 BOpt_FreeDriverOptions();
655 // For Initializing HD/FD/CD/NET/BEV option menu
658 BOpt_GetLegacyOptions();
661 // For cleaning up driver option menu
664 BOpt_FreeLegacyOptions();
667 // this function is used to take place of all other free menu actions
671 BM_MENU_OPTION
*FreeMenu
676 // Following are the helper functions used
679 BOpt_AppendFileName (
685 BOpt_IsEfiImageName (
691 IN EFI_FILE_HANDLE Dir
,
696 // Get current unused boot option number
699 BOpt_GetBootOptionNumber ();
702 // Get current unused driver option number
705 BOpt_GetDriverOptionNumber ();
708 BOpt_CreateMenuEntry (
713 BOpt_DestroyMenuEntry (
714 BM_MENU_ENTRY
*MenuEntry
719 BM_MENU_OPTION
*MenuOption
,
724 // a helper function used to free pool type memory
732 // Locate all serial io devices for console
738 // Initializing Console menu
744 // Cleaning up console menu
750 ChangeVariableDevicePath (
751 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
755 ChangeTerminalDevicePath (
756 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
757 BOOLEAN ChangeTerminal
760 // Variable operation by menu selection
763 Var_UpdateBootOption (
764 IN BMM_CALLBACK_DATA
*CallbackData
,
765 IN FILE_EXPLORER_NV_DATA
*NvRamMap
769 Var_DelBootOption ();
772 Var_ChangeBootOrder ();
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
784 Var_DelDriverOption ();
787 Var_ChangeDriverOrder ();
790 Var_UpdateConsoleInpOption ();
793 Var_UpdateConsoleOutOption ();
796 Var_UpdateErrorOutOption ();
799 Var_UpdateAllConsoleOption ();
803 IN BMM_CALLBACK_DATA
*CallbackData
807 Var_UpdateBootOrder (
808 IN BMM_CALLBACK_DATA
*CallbackData
812 Var_UpdateDriverOrder (
813 IN BMM_CALLBACK_DATA
*CallbackData
817 Var_UpdateBBSOption (
818 IN BMM_CALLBACK_DATA
*CallbackData
822 // Following are page create and refresh functions
826 IN BOOLEAN FormSetUpdate
,
827 IN EFI_PHYSICAL_ADDRESS FormCallbackHandle
,
828 IN BOOLEAN FormUpdate
,
829 IN STRING_REF FormTitle
,
835 IN EFI_FORM_LABEL LabelId
,
836 IN BMM_CALLBACK_DATA
*CallbackData
841 IN BMM_CALLBACK_DATA
*CallbackData
,
842 IN BM_MENU_OPTION
*UpdatingMenu
,
843 IN UINT16 UpdatingPage
,
844 IN UINT16 UpdatingManner
,
845 IN UINT16 QuestionIdStart
,
847 IN UINT16 GotoAlternateForm
,
848 IN STRING_REF DisplayTokenStart
,
849 IN STRING_REF HelpTokenStart
,
850 IN UINT16 KeyValueStart
855 IN BMM_CALLBACK_DATA
*CallbackData
860 IN BMM_CALLBACK_DATA
*CallbackData
864 UpdateDrvAddFilePage (
865 IN BMM_CALLBACK_DATA
*CallbackData
869 UpdateDrvAddHandlePage (
870 IN BMM_CALLBACK_DATA
*CallbackData
875 IN BMM_CALLBACK_DATA
*CallbackData
879 UpdateDriverAddHandleDescPage (
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 BMM_CALLBACK_DATA
*CallbackData
905 IN UINT16 UpdatePageId
,
906 IN BMM_CALLBACK_DATA
*CallbackData
911 IN BMM_CALLBACK_DATA
*CallbackData
916 IN BMM_CALLBACK_DATA
*CallbackData
920 UpdateBootOrderPage (
921 IN BMM_CALLBACK_DATA
*CallbackData
925 UpdateDriverOrderPage (
926 IN BMM_CALLBACK_DATA
*CallbackData
931 IN BMM_CALLBACK_DATA
*CallbackData
936 IN BMM_CALLBACK_DATA
*CallbackData
941 IN BMM_CALLBACK_DATA
*CallbackData
946 IN BMM_CALLBACK_DATA
*CallbackData
950 UpdateSetLegacyDeviceOrderPage (
951 IN UINT16 UpdatePageId
,
952 IN BMM_CALLBACK_DATA
*CallbackData
968 IN EFI_HANDLE DeviceHandle
971 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*
972 EfiLibFileSystemVolumeLabelInfo (
973 IN EFI_FILE_HANDLE FHand
978 IN EFI_FILE_HANDLE FHand
983 EFI_DEVICE_PATH_PROTOCOL
*DevPath
987 EfiLibLocateProtocol (
988 IN EFI_GUID
*ProtocolGuid
,
1001 EFI_DEVICE_PATH_PROTOCOL
*DevPath
1005 BdsLibGetVariableAndSize (
1007 IN EFI_GUID
*VendorGuid
,
1012 EfiLibDeleteVariable (
1014 IN EFI_GUID
*VarGuid
1023 EfiLibMatchDevicePaths (
1024 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
1025 IN EFI_DEVICE_PATH_PROTOCOL
*Single
1029 EfiDevicePathInstanceCount (
1030 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
1034 CreateMenuStringToken (
1035 IN BMM_CALLBACK_DATA
*CallbackData
,
1036 IN EFI_HII_HANDLE HiiHandle
,
1037 IN BM_MENU_OPTION
*MenuOption
1041 EfiLibStrFromDatahub (
1042 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
1046 GetLegacyBootOptionVar (
1047 IN UINTN DeviceType
,
1048 OUT UINTN
*OptionIndex
,
1049 OUT UINTN
*OptionSize
1063 InitializeStringDepository ();
1066 GetStringTokenFromDepository (
1067 IN BMM_CALLBACK_DATA
*CallbackData
,
1068 IN STRING_DEPOSITORY
*StringDepository
1072 ReclaimStringDepository (
1077 CleanUpStringDepository (
1082 ApplyChangeHandler (
1083 IN BMM_CALLBACK_DATA
*Private
,
1084 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
,
1089 DiscardChangeHandler (
1090 IN BMM_CALLBACK_DATA
*Private
,
1091 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
1096 BMM_CALLBACK_DATA
*Private
,
1102 IN BM_FILE_CONTEXT
*FileContext
1106 UpdateFileExplorer (
1107 IN BMM_CALLBACK_DATA
*CallbackData
,
1113 FileExplorerCallback (
1114 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
1116 IN EFI_IFR_DATA_ARRAY
*Data
,
1117 OUT EFI_HII_CALLBACK_PACKET
**Packet
1122 IN BMM_CALLBACK_DATA
*CallbackData
1125 VOID
CreateCallbackPacket (
1126 OUT EFI_HII_CALLBACK_PACKET
**Packet
,
1131 // Global variable in this program (defined in data.c)
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
;