3 Copyright (c) 2004 - 2008, 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 "BBSsupport.h"
28 #include "FrontPage.h"
31 // Constants which are variable names used to access variables
33 #define VarLegacyDevOrder L"LegacyDevOrder"
35 #define VarConOutMode L"ConOutMode"
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 // Variable created with this flag will be "Efi:...."
63 #define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
66 // Define Maxmim characters that will be accepted
69 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
72 // Check to see if current build support option active feature of
75 #ifndef LOAD_OPTION_ACTIVE
76 #define LOAD_OPTION_ACTIVE 0x00000001
80 // Check to see if current build support force reconnect feature of
83 #ifndef LOAD_OPTION_FORCE_RECONNECT
84 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
87 extern EFI_GUID mBootMaintGuid
;
88 extern EFI_GUID mFileExplorerGuid
;
91 // These are the VFR compiler generated data representing our VFR data.
97 // Below are the number of options in Baudrate, Databits,
98 // Parity and Stopbits selection for serial ports.
100 #define BM_COM_ATTR_BUADRATE 19
101 #define BM_COM_ATTR_DATABITS 4
102 #define BM_COM_ATTR_PARITY 5
103 #define BM_COM_ATTR_STOPBITS 3
106 // Callback function helper
108 #define BMM_CALLBACK_DATA_SIGNATURE EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')
109 #define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
111 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
114 // Enumeration type definition
116 typedef UINT8 BBS_TYPE
;
151 } TYPE_OF_UPATE_MANNER
;
155 BOOT_FROM_FILE_STATE
,
156 ADD_BOOT_OPTION_STATE
,
157 ADD_DRIVER_OPTION_STATE
,
159 } FILE_EXPLORER_STATE
;
165 } FILE_EXPLORER_DISPLAY_CONTEXT
;
168 // All of the signatures that will be used in list structure
170 #define BM_MENU_OPTION_SIGNATURE EFI_SIGNATURE_32 ('m', 'e', 'n', 'u')
171 #define BM_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('l', 'o', 'a', 'd')
172 #define BM_CONSOLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('c', 'n', 's', 'l')
173 #define BM_FILE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('f', 'i', 'l', 'e')
174 #define BM_HANDLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('h', 'n', 'd', 'l')
175 #define BM_TERMINAL_OPTION_SIGNATURE EFI_SIGNATURE_32 ('t', 'r', 'm', 'l')
176 #define BM_MENU_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('e', 'n', 't', 'r')
178 #define BM_LOAD_CONTEXT_SELECT 0x0
179 #define BM_CONSOLE_CONTEXT_SELECT 0x1
180 #define BM_FILE_CONTEXT_SELECT 0x2
181 #define BM_HANDLE_CONTEXT_SELECT 0x3
182 #define BM_TERMINAL_CONTEXT_SELECT 0x5
184 #define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
185 #define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
186 #define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
187 #define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
190 // Buffer size for update data
192 #define UPDATE_DATA_SIZE 0x100000
195 // Namespace of callback keys used in display and file system navigation
197 #define MAX_BBS_OFFSET 0xE000
198 #define NET_OPTION_OFFSET 0xD800
199 #define BEV_OPTION_OFFSET 0xD000
200 #define FD_OPTION_OFFSET 0xC000
201 #define HD_OPTION_OFFSET 0xB000
202 #define CD_OPTION_OFFSET 0xA000
203 #define FILE_OPTION_OFFSET 0x8000
204 #define FILE_OPTION_MASK 0x7FFF
205 #define HANDLE_OPTION_OFFSET 0x7000
206 #define CONSOLE_OPTION_OFFSET 0x6000
207 #define TERMINAL_OPTION_OFFSET 0x5000
208 #define CONFIG_OPTION_OFFSET 0x1200
209 #define KEY_VALUE_OFFSET 0x1100
210 #define FORM_ID_OFFSET 0x1000
213 // VarOffset that will be used to create question
214 // all these values are computed from the structure
217 #define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field)))
220 // Question Id of Zero is invalid, so add an offset to it
222 #define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET)
224 #define BOOT_TIME_OUT_VAR_OFFSET VAR_OFFSET (BootTimeOut)
225 #define BOOT_NEXT_VAR_OFFSET VAR_OFFSET (BootNext)
226 #define COM1_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM1BaudRate)
227 #define COM1_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM1DataRate)
228 #define COM1_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM1StopBits)
229 #define COM1_PARITY_VAR_OFFSET VAR_OFFSET (COM1Parity)
230 #define COM1_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType)
231 #define COM2_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM2BaudRate)
232 #define COM2_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM2DataRate)
233 #define COM2_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM2StopBits)
234 #define COM2_PARITY_VAR_OFFSET VAR_OFFSET (COM2Parity)
235 #define COM2_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType)
236 #define DRV_ADD_HANDLE_DESC_VAR_OFFSET VAR_OFFSET (DriverAddHandleDesc)
237 #define DRV_ADD_ACTIVE_VAR_OFFSET VAR_OFFSET (DriverAddActive)
238 #define DRV_ADD_RECON_VAR_OFFSET VAR_OFFSET (DriverAddForceReconnect)
239 #define CON_IN_COM1_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM1)
240 #define CON_IN_COM2_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM2)
241 #define CON_OUT_COM1_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM1)
242 #define CON_OUT_COM2_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM2)
243 #define CON_ERR_COM1_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM1)
244 #define CON_ERR_COM2_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM2)
245 #define CON_MODE_VAR_OFFSET VAR_OFFSET (ConsoleOutMode)
246 #define CON_DEVICE_VAR_OFFSET VAR_OFFSET (ConsoleCheck)
247 #define OPTION_ORDER_VAR_OFFSET VAR_OFFSET (OptionOrder)
248 #define DRIVER_OPTION_ORDER_VAR_OFFSET VAR_OFFSET (DriverOptionToBeDeleted)
249 #define BOOT_OPTION_DEL_VAR_OFFSET VAR_OFFSET (BootOptionDel)
250 #define DRIVER_OPTION_DEL_VAR_OFFSET VAR_OFFSET (DriverOptionDel)
251 #define DRIVER_ADD_OPTION_VAR_OFFSET VAR_OFFSET (DriverAddHandleOptionalData)
252 #define COM_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COMBaudRate)
253 #define COM_DATA_RATE_VAR_OFFSET VAR_OFFSET (COMDataRate)
254 #define COM_STOP_BITS_VAR_OFFSET VAR_OFFSET (COMStopBits)
255 #define COM_PARITY_VAR_OFFSET VAR_OFFSET (COMParity)
256 #define COM_TERMINAL_VAR_OFFSET VAR_OFFSET (COMTerminalType)
257 #define LEGACY_FD_VAR_OFFSET VAR_OFFSET (LegacyFD)
258 #define LEGACY_HD_VAR_OFFSET VAR_OFFSET (LegacyHD)
259 #define LEGACY_CD_VAR_OFFSET VAR_OFFSET (LegacyCD)
260 #define LEGACY_NET_VAR_OFFSET VAR_OFFSET (LegacyNET)
261 #define LEGACY_BEV_VAR_OFFSET VAR_OFFSET (LegacyBEV)
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_MODE_QUESTION_ID QUESTION_ID (ConsoleOutMode)
285 #define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
286 #define OPTION_ORDER_QUESTION_ID QUESTION_ID (OptionOrder)
287 #define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
288 #define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
289 #define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
290 #define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
291 #define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
292 #define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
293 #define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
294 #define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
295 #define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
296 #define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD)
297 #define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD)
298 #define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD)
299 #define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET)
300 #define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV)
302 #define STRING_DEPOSITORY_NUMBER 8
307 // Serial Ports attributes, first one is the value for
308 // return from callback function, stringtoken is used to
309 // display the value properly
320 // Length = sizeof (UINT16) + SIZEOF (Data)
324 } BM_LEGACY_DEV_ORDER_CONTEXT
;
343 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
344 } BM_TERMINAL_CONTEXT
;
348 BOOLEAN LoadOptionModified
;
353 BOOLEAN ForceReconnect
;
354 UINTN OptionalDataSize
;
356 UINTN LoadOptionSize
;
360 UINT16 FilePathListLength
;
362 EFI_DEVICE_PATH_PROTOCOL
*FilePathList
;
373 } BM_LEGACY_DEVICE_CONTEXT
;
381 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
382 } BM_CONSOLE_CONTEXT
;
391 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
392 EFI_FILE_HANDLE FHandle
;
394 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*Info
;
398 BOOLEAN IsRemovableMedia
;
400 BOOLEAN IsBootLegacy
;
405 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
418 UINT16
*DisplayString
;
420 EFI_STRING_ID DisplayStringToken
;
421 EFI_STRING_ID HelpStringToken
;
422 UINTN ContextSelection
;
423 VOID
*VariableContext
;
428 // Shared callback data.
432 BM_MENU_ENTRY
*MenuEntry
;
433 BM_HANDLE_CONTEXT
*HandleContext
;
434 BM_FILE_CONTEXT
*FileContext
;
435 BM_LOAD_CONTEXT
*LoadContext
;
436 BM_TERMINAL_CONTEXT
*TerminalContext
;
437 UINTN CurrentTerminal
;
441 // BMM main formset callback data.
443 EFI_HII_HANDLE BmmHiiHandle
;
444 EFI_HANDLE BmmDriverHandle
;
445 EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess
;
446 EFI_FORM_ID BmmCurrentPageId
;
447 EFI_FORM_ID BmmPreviousPageId
;
448 BOOLEAN BmmAskSaveOrNot
;
449 BMM_FAKE_NV_DATA BmmFakeNvData
;
450 BMM_FAKE_NV_DATA BmmOldFakeNVData
;
453 // File explorer formset callback data.
455 EFI_HII_HANDLE FeHiiHandle
;
456 EFI_HANDLE FeDriverHandle
;
457 EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess
;
458 FILE_EXPLORER_STATE FeCurrentState
;
459 FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext
;
460 FILE_EXPLORER_NV_DATA FeFakeNvData
;
463 typedef struct _STRING_LIST_NODE
{
464 EFI_STRING_ID StringToken
;
465 struct _STRING_LIST_NODE
*Next
;
468 typedef struct _STRING_DEPOSITORY
{
469 UINTN TotalNodeNumber
;
470 STRING_LIST_NODE
*CurrentNode
;
471 STRING_LIST_NODE
*ListHead
;
477 // For initializing File System menu
480 BOpt_FindFileSystem (
481 IN BMM_CALLBACK_DATA
*CallbackData
486 // For cleaning up File System menu
489 BOpt_FreeFileSystem (
495 // For initializing File Navigation menu
499 IN BMM_CALLBACK_DATA
*CallbackData
,
500 IN BM_MENU_ENTRY
*MenuEntry
505 // For cleaning up File Navigation menu
514 // For Initializing handle navigation menu
523 // For Cleaning up handle navigation menu
526 BOpt_FreeDrivers(VOID
);
529 // For initializing Boot Option menu
532 BOpt_GetBootOptions (
533 IN BMM_CALLBACK_DATA
*CallbackData
537 // For Initializing Driver option menu
540 BOpt_GetDriverOptions (
541 IN BMM_CALLBACK_DATA
*CallbackData
545 // For Cleaning up boot option menu
548 BOpt_FreeBootOptions (VOID
);
551 // For cleaning up driver option menu
554 BOpt_FreeDriverOptions(VOID
);
557 // For Initializing HD/FD/CD/NET/BEV option menu
560 BOpt_GetLegacyOptions(VOID
);
563 // For cleaning up driver option menu
566 BOpt_FreeLegacyOptions(VOID
);
569 // this function is used to take place of all other free menu actions
573 BM_MENU_OPTION
*FreeMenu
578 // Following are the helper functions used
581 BOpt_AppendFileName (
587 BOpt_IsEfiImageName (
593 IN EFI_FILE_HANDLE Dir
,
598 // Get current unused boot option number
601 BOpt_GetBootOptionNumber (VOID
);
604 // Get current unused driver option number
607 BOpt_GetDriverOptionNumber (VOID
);
610 BOpt_CreateMenuEntry (
615 BOpt_DestroyMenuEntry (
616 BM_MENU_ENTRY
*MenuEntry
621 BM_MENU_OPTION
*MenuOption
,
626 // a helper function used to free pool type memory
634 // Locate all serial io devices for console
637 LocateSerialIo (VOID
);
640 // Initializing Console menu
643 GetAllConsoles(VOID
);
646 // Get current mode information
650 IN BMM_CALLBACK_DATA
*CallbackData
654 // Cleaning up console menu
657 FreeAllConsoles(VOID
);
660 ChangeVariableDevicePath (
661 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
665 ChangeTerminalDevicePath (
666 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
667 BOOLEAN ChangeTerminal
670 // Variable operation by menu selection
673 Var_UpdateBootOption (
674 IN BMM_CALLBACK_DATA
*CallbackData
,
675 IN FILE_EXPLORER_NV_DATA
*NvRamMap
679 Var_DelBootOption (VOID
);
682 Var_ChangeBootOrder (VOID
);
685 Var_UpdateDriverOption (
686 IN BMM_CALLBACK_DATA
*CallbackData
,
687 IN EFI_HII_HANDLE HiiHandle
,
688 IN UINT16
*DescriptionData
,
689 IN UINT16
*OptionalData
,
690 IN UINT8 ForceReconnect
694 Var_DelDriverOption (VOID
);
697 Var_ChangeDriverOrder (VOID
);
700 Var_UpdateConsoleInpOption (VOID
);
703 Var_UpdateConsoleOutOption (VOID
);
706 Var_UpdateErrorOutOption (VOID
);
709 Var_UpdateAllConsoleOption (VOID
);
713 IN BMM_CALLBACK_DATA
*CallbackData
717 Var_UpdateBootOrder (
718 IN BMM_CALLBACK_DATA
*CallbackData
722 Var_UpdateDriverOrder (
723 IN BMM_CALLBACK_DATA
*CallbackData
727 Var_UpdateBBSOption (
728 IN BMM_CALLBACK_DATA
*CallbackData
733 IN BMM_CALLBACK_DATA
*CallbackData
737 // Following are page create and refresh functions
747 IN BMM_CALLBACK_DATA
*CallbackData
752 IN BMM_CALLBACK_DATA
*CallbackData
,
753 IN BM_MENU_OPTION
*UpdatingMenu
,
754 IN UINT16 UpdatingPage
,
755 IN UINT16 UpdatingManner
,
756 IN UINT16 QuestionIdStart
,
758 IN UINT16 GotoAlternateForm
,
759 IN EFI_STRING_ID DisplayTokenStart
,
760 IN EFI_STRING_ID HelpTokenStart
,
761 IN UINT16 KeyValueStart
766 IN BMM_CALLBACK_DATA
*CallbackData
771 IN BMM_CALLBACK_DATA
*CallbackData
775 UpdateDrvAddFilePage (
776 IN BMM_CALLBACK_DATA
*CallbackData
780 UpdateDrvAddHandlePage (
781 IN BMM_CALLBACK_DATA
*CallbackData
786 IN BMM_CALLBACK_DATA
*CallbackData
790 UpdateDriverAddHandleDescPage (
791 IN BMM_CALLBACK_DATA
*CallbackData
796 IN BMM_CALLBACK_DATA
*CallbackData
801 IN BMM_CALLBACK_DATA
*CallbackData
806 IN BMM_CALLBACK_DATA
*CallbackData
811 IN BMM_CALLBACK_DATA
*CallbackData
816 IN UINT16 UpdatePageId
,
817 IN BMM_CALLBACK_DATA
*CallbackData
822 IN BMM_CALLBACK_DATA
*CallbackData
827 IN BMM_CALLBACK_DATA
*CallbackData
831 UpdateBootOrderPage (
832 IN BMM_CALLBACK_DATA
*CallbackData
836 UpdateDriverOrderPage (
837 IN BMM_CALLBACK_DATA
*CallbackData
842 IN BMM_CALLBACK_DATA
*CallbackData
847 IN BMM_CALLBACK_DATA
*CallbackData
852 IN BMM_CALLBACK_DATA
*CallbackData
857 IN BMM_CALLBACK_DATA
*CallbackData
862 IN BMM_CALLBACK_DATA
*CallbackData
866 UpdateSetLegacyDeviceOrderPage (
867 IN UINT16 UpdatePageId
,
868 IN BMM_CALLBACK_DATA
*CallbackData
884 IN EFI_HANDLE DeviceHandle
887 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*
888 EfiLibFileSystemVolumeLabelInfo (
889 IN EFI_FILE_HANDLE FHand
894 IN EFI_FILE_HANDLE FHand
906 EFI_DEVICE_PATH_PROTOCOL
*DevPath
910 EfiAllocateZeroPool (
915 EfiLibLocateProtocol (
916 IN EFI_GUID
*ProtocolGuid
,
929 EFI_DEVICE_PATH_PROTOCOL
*DevPath
933 BdsLibGetVariableAndSize (
935 IN EFI_GUID
*VendorGuid
,
940 EfiLibDeleteVariable (
951 EfiLibMatchDevicePaths (
952 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
953 IN EFI_DEVICE_PATH_PROTOCOL
*Single
957 EfiDevicePathInstanceCount (
958 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
962 CreateMenuStringToken (
963 IN BMM_CALLBACK_DATA
*CallbackData
,
964 IN EFI_HII_HANDLE HiiHandle
,
965 IN BM_MENU_OPTION
*MenuOption
969 EfiLibStrFromDatahub (
970 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
974 GetLegacyBootOptionVar (
976 OUT UINTN
*OptionIndex
,
977 OUT UINTN
*OptionSize
991 InitializeStringDepository (VOID
);
994 GetStringTokenFromDepository (
995 IN BMM_CALLBACK_DATA
*CallbackData
,
996 IN STRING_DEPOSITORY
*StringDepository
1000 ReclaimStringDepository (
1005 CleanUpStringDepository (
1010 ApplyChangeHandler (
1011 IN BMM_CALLBACK_DATA
*Private
,
1012 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
,
1013 IN EFI_FORM_ID FormId
1017 DiscardChangeHandler (
1018 IN BMM_CALLBACK_DATA
*Private
,
1019 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
1024 BMM_CALLBACK_DATA
*Private
,
1030 IN BM_FILE_CONTEXT
*FileContext
1034 UpdateFileExplorer (
1035 IN BMM_CALLBACK_DATA
*CallbackData
,
1041 FileExplorerCallback (
1042 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL
*This
,
1043 IN EFI_BROWSER_ACTION Action
,
1044 IN EFI_QUESTION_ID QuestionId
,
1046 IN EFI_IFR_TYPE_VALUE
*Value
,
1047 OUT EFI_BROWSER_ACTION_REQUEST
*ActionRequest
1052 IN BMM_CALLBACK_DATA
*CallbackData
1056 // Global variable in this program (defined in data.c)
1058 extern BM_MENU_OPTION BootOptionMenu
;
1059 extern BM_MENU_OPTION DriverOptionMenu
;
1060 extern BM_MENU_OPTION FsOptionMenu
;
1061 extern BM_MENU_OPTION ConsoleInpMenu
;
1062 extern BM_MENU_OPTION ConsoleOutMenu
;
1063 extern BM_MENU_OPTION ConsoleErrMenu
;
1064 extern BM_MENU_OPTION DirectoryMenu
;
1065 extern BM_MENU_OPTION DriverMenu
;
1066 extern BM_MENU_OPTION TerminalMenu
;
1067 extern BM_MENU_OPTION LegacyFDMenu
;
1068 extern BM_MENU_OPTION LegacyHDMenu
;
1069 extern BM_MENU_OPTION LegacyCDMenu
;
1070 extern BM_MENU_OPTION LegacyNETMenu
;
1071 extern BM_MENU_OPTION LegacyBEVMenu
;
1072 extern UINT16 TerminalType
[];
1073 extern COM_ATTR BaudRateList
[19];
1074 extern COM_ATTR DataBitsList
[4];
1075 extern COM_ATTR ParityList
[5];
1076 extern COM_ATTR StopBitsList
[3];
1077 extern EFI_GUID Guid
[4];
1078 extern EFI_HII_UPDATE_DATA gUpdateData
;
1079 extern STRING_DEPOSITORY
*FileOptionStrDepository
;
1080 extern STRING_DEPOSITORY
*ConsoleOptionStrDepository
;
1081 extern STRING_DEPOSITORY
*BootOptionStrDepository
;
1082 extern STRING_DEPOSITORY
*BootOptionHelpStrDepository
;
1083 extern STRING_DEPOSITORY
*DriverOptionStrDepository
;
1084 extern STRING_DEPOSITORY
*DriverOptionHelpStrDepository
;
1085 extern STRING_DEPOSITORY
*TerminalStrDepository
;
1086 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath
[];
1087 extern EFI_GUID EfiLegacyDevOrderGuid
;