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 'menu'
171 #define BM_LOAD_OPTION_SIGNATURE 'load'
172 #define BM_CONSOLE_OPTION_SIGNATURE 'cnsl'
173 #define BM_FILE_OPTION_SIGNATURE 'file'
174 #define BM_HANDLE_OPTION_SIGNATURE 'hndl'
175 #define BM_TERMINAL_OPTION_SIGNATURE 'trml'
176 #define BM_MENU_ENTRY_SIGNATURE 'entr'
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
319 // Length = sizeof (UINT16) + SIZEOF (Data)
323 } BM_LEGACY_DEV_ORDER_CONTEXT
;
341 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
342 } BM_TERMINAL_CONTEXT
;
346 BOOLEAN LoadOptionModified
;
351 BOOLEAN ForceReconnect
;
352 UINTN OptionalDataSize
;
354 UINTN LoadOptionSize
;
358 UINT16 FilePathListLength
;
360 EFI_DEVICE_PATH_PROTOCOL
*FilePathList
;
371 } BM_LEGACY_DEVICE_CONTEXT
;
379 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
380 } BM_CONSOLE_CONTEXT
;
389 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
390 EFI_FILE_HANDLE FHandle
;
392 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*Info
;
396 BOOLEAN IsRemovableMedia
;
398 BOOLEAN IsBootLegacy
;
403 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
416 UINT16
*DisplayString
;
418 EFI_STRING_ID DisplayStringToken
;
419 EFI_STRING_ID HelpStringToken
;
420 UINTN ContextSelection
;
421 VOID
*VariableContext
;
426 // Shared callback data.
430 BM_MENU_ENTRY
*MenuEntry
;
431 BM_HANDLE_CONTEXT
*HandleContext
;
432 BM_FILE_CONTEXT
*FileContext
;
433 BM_LOAD_CONTEXT
*LoadContext
;
434 BM_TERMINAL_CONTEXT
*TerminalContext
;
435 UINTN CurrentTerminal
;
439 // BMM main formset callback data.
441 EFI_HII_HANDLE BmmHiiHandle
;
442 EFI_HANDLE BmmDriverHandle
;
443 EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess
;
444 EFI_FORM_ID BmmCurrentPageId
;
445 EFI_FORM_ID BmmPreviousPageId
;
446 BOOLEAN BmmAskSaveOrNot
;
447 BMM_FAKE_NV_DATA BmmFakeNvData
;
448 BMM_FAKE_NV_DATA BmmOldFakeNVData
;
451 // File explorer formset callback data.
453 EFI_HII_HANDLE FeHiiHandle
;
454 EFI_HANDLE FeDriverHandle
;
455 EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess
;
456 FILE_EXPLORER_STATE FeCurrentState
;
457 FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext
;
458 FILE_EXPLORER_NV_DATA FeFakeNvData
;
461 typedef struct _STRING_LIST_NODE
{
462 EFI_STRING_ID StringToken
;
463 struct _STRING_LIST_NODE
*Next
;
466 typedef struct _STRING_DEPOSITORY
{
467 UINTN TotalNodeNumber
;
468 STRING_LIST_NODE
*CurrentNode
;
469 STRING_LIST_NODE
*ListHead
;
475 // For initializing File System menu
478 BOpt_FindFileSystem (
479 IN BMM_CALLBACK_DATA
*CallbackData
484 // For cleaning up File System menu
487 BOpt_FreeFileSystem (
493 // For initializing File Navigation menu
497 IN BMM_CALLBACK_DATA
*CallbackData
,
498 IN BM_MENU_ENTRY
*MenuEntry
503 // For cleaning up File Navigation menu
512 // For Initializing handle navigation menu
521 // For Cleaning up handle navigation menu
524 BOpt_FreeDrivers(VOID
);
527 // For initializing Boot Option menu
530 BOpt_GetBootOptions (
531 IN BMM_CALLBACK_DATA
*CallbackData
535 // For Initializing Driver option menu
538 BOpt_GetDriverOptions (
539 IN BMM_CALLBACK_DATA
*CallbackData
543 // For Cleaning up boot option menu
546 BOpt_FreeBootOptions (VOID
);
549 // For cleaning up driver option menu
552 BOpt_FreeDriverOptions(VOID
);
555 // For Initializing HD/FD/CD/NET/BEV option menu
558 BOpt_GetLegacyOptions(VOID
);
561 // For cleaning up driver option menu
564 BOpt_FreeLegacyOptions(VOID
);
567 // this function is used to take place of all other free menu actions
571 BM_MENU_OPTION
*FreeMenu
576 // Following are the helper functions used
579 BOpt_AppendFileName (
585 BOpt_IsEfiImageName (
591 IN EFI_FILE_HANDLE Dir
,
596 // Get current unused boot option number
599 BOpt_GetBootOptionNumber (VOID
);
602 // Get current unused driver option number
605 BOpt_GetDriverOptionNumber (VOID
);
608 BOpt_CreateMenuEntry (
613 BOpt_DestroyMenuEntry (
614 BM_MENU_ENTRY
*MenuEntry
619 BM_MENU_OPTION
*MenuOption
,
624 // a helper function used to free pool type memory
632 // Locate all serial io devices for console
635 LocateSerialIo (VOID
);
638 // Initializing Console menu
641 GetAllConsoles(VOID
);
644 // Get current mode information
648 IN BMM_CALLBACK_DATA
*CallbackData
652 // Cleaning up console menu
655 FreeAllConsoles(VOID
);
658 ChangeVariableDevicePath (
659 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
663 ChangeTerminalDevicePath (
664 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
665 BOOLEAN ChangeTerminal
668 // Variable operation by menu selection
671 Var_UpdateBootOption (
672 IN BMM_CALLBACK_DATA
*CallbackData
,
673 IN FILE_EXPLORER_NV_DATA
*NvRamMap
677 Var_DelBootOption (VOID
);
680 Var_ChangeBootOrder (VOID
);
683 Var_UpdateDriverOption (
684 IN BMM_CALLBACK_DATA
*CallbackData
,
685 IN EFI_HII_HANDLE HiiHandle
,
686 IN UINT16
*DescriptionData
,
687 IN UINT16
*OptionalData
,
688 IN UINT8 ForceReconnect
692 Var_DelDriverOption (VOID
);
695 Var_ChangeDriverOrder (VOID
);
698 Var_UpdateConsoleInpOption (VOID
);
701 Var_UpdateConsoleOutOption (VOID
);
704 Var_UpdateErrorOutOption (VOID
);
707 Var_UpdateAllConsoleOption (VOID
);
711 IN BMM_CALLBACK_DATA
*CallbackData
715 Var_UpdateBootOrder (
716 IN BMM_CALLBACK_DATA
*CallbackData
720 Var_UpdateDriverOrder (
721 IN BMM_CALLBACK_DATA
*CallbackData
725 Var_UpdateBBSOption (
726 IN BMM_CALLBACK_DATA
*CallbackData
731 IN BMM_CALLBACK_DATA
*CallbackData
735 // Following are page create and refresh functions
745 IN BMM_CALLBACK_DATA
*CallbackData
750 IN BMM_CALLBACK_DATA
*CallbackData
,
751 IN BM_MENU_OPTION
*UpdatingMenu
,
752 IN UINT16 UpdatingPage
,
753 IN UINT16 UpdatingManner
,
754 IN UINT16 QuestionIdStart
,
756 IN UINT16 GotoAlternateForm
,
757 IN EFI_STRING_ID DisplayTokenStart
,
758 IN EFI_STRING_ID HelpTokenStart
,
759 IN UINT16 KeyValueStart
764 IN BMM_CALLBACK_DATA
*CallbackData
769 IN BMM_CALLBACK_DATA
*CallbackData
773 UpdateDrvAddFilePage (
774 IN BMM_CALLBACK_DATA
*CallbackData
778 UpdateDrvAddHandlePage (
779 IN BMM_CALLBACK_DATA
*CallbackData
784 IN BMM_CALLBACK_DATA
*CallbackData
788 UpdateDriverAddHandleDescPage (
789 IN BMM_CALLBACK_DATA
*CallbackData
794 IN BMM_CALLBACK_DATA
*CallbackData
799 IN BMM_CALLBACK_DATA
*CallbackData
804 IN BMM_CALLBACK_DATA
*CallbackData
809 IN BMM_CALLBACK_DATA
*CallbackData
814 IN UINT16 UpdatePageId
,
815 IN BMM_CALLBACK_DATA
*CallbackData
820 IN BMM_CALLBACK_DATA
*CallbackData
825 IN BMM_CALLBACK_DATA
*CallbackData
829 UpdateBootOrderPage (
830 IN BMM_CALLBACK_DATA
*CallbackData
834 UpdateDriverOrderPage (
835 IN BMM_CALLBACK_DATA
*CallbackData
840 IN BMM_CALLBACK_DATA
*CallbackData
845 IN BMM_CALLBACK_DATA
*CallbackData
850 IN BMM_CALLBACK_DATA
*CallbackData
855 IN BMM_CALLBACK_DATA
*CallbackData
860 IN BMM_CALLBACK_DATA
*CallbackData
864 UpdateSetLegacyDeviceOrderPage (
865 IN UINT16 UpdatePageId
,
866 IN BMM_CALLBACK_DATA
*CallbackData
882 IN EFI_HANDLE DeviceHandle
885 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*
886 EfiLibFileSystemVolumeLabelInfo (
887 IN EFI_FILE_HANDLE FHand
892 IN EFI_FILE_HANDLE FHand
904 EFI_DEVICE_PATH_PROTOCOL
*DevPath
908 EfiAllocateZeroPool (
913 EfiLibLocateProtocol (
914 IN EFI_GUID
*ProtocolGuid
,
927 EFI_DEVICE_PATH_PROTOCOL
*DevPath
931 BdsLibGetVariableAndSize (
933 IN EFI_GUID
*VendorGuid
,
938 EfiLibDeleteVariable (
949 EfiLibMatchDevicePaths (
950 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
951 IN EFI_DEVICE_PATH_PROTOCOL
*Single
955 EfiDevicePathInstanceCount (
956 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
960 CreateMenuStringToken (
961 IN BMM_CALLBACK_DATA
*CallbackData
,
962 IN EFI_HII_HANDLE HiiHandle
,
963 IN BM_MENU_OPTION
*MenuOption
967 EfiLibStrFromDatahub (
968 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
972 GetLegacyBootOptionVar (
974 OUT UINTN
*OptionIndex
,
975 OUT UINTN
*OptionSize
989 InitializeStringDepository (VOID
);
992 GetStringTokenFromDepository (
993 IN BMM_CALLBACK_DATA
*CallbackData
,
994 IN STRING_DEPOSITORY
*StringDepository
998 ReclaimStringDepository (
1003 CleanUpStringDepository (
1008 ApplyChangeHandler (
1009 IN BMM_CALLBACK_DATA
*Private
,
1010 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
,
1011 IN EFI_FORM_ID FormId
1015 DiscardChangeHandler (
1016 IN BMM_CALLBACK_DATA
*Private
,
1017 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
1022 BMM_CALLBACK_DATA
*Private
,
1028 IN BM_FILE_CONTEXT
*FileContext
1032 UpdateFileExplorer (
1033 IN BMM_CALLBACK_DATA
*CallbackData
,
1039 FileExplorerCallback (
1040 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL
*This
,
1041 IN EFI_BROWSER_ACTION Action
,
1042 IN EFI_QUESTION_ID QuestionId
,
1044 IN EFI_IFR_TYPE_VALUE
*Value
,
1045 OUT EFI_BROWSER_ACTION_REQUEST
*ActionRequest
1050 IN BMM_CALLBACK_DATA
*CallbackData
1054 // Global variable in this program (defined in data.c)
1056 extern BM_MENU_OPTION BootOptionMenu
;
1057 extern BM_MENU_OPTION DriverOptionMenu
;
1058 extern BM_MENU_OPTION FsOptionMenu
;
1059 extern BM_MENU_OPTION ConsoleInpMenu
;
1060 extern BM_MENU_OPTION ConsoleOutMenu
;
1061 extern BM_MENU_OPTION ConsoleErrMenu
;
1062 extern BM_MENU_OPTION DirectoryMenu
;
1063 extern BM_MENU_OPTION DriverMenu
;
1064 extern BM_MENU_OPTION TerminalMenu
;
1065 extern BM_MENU_OPTION LegacyFDMenu
;
1066 extern BM_MENU_OPTION LegacyHDMenu
;
1067 extern BM_MENU_OPTION LegacyCDMenu
;
1068 extern BM_MENU_OPTION LegacyNETMenu
;
1069 extern BM_MENU_OPTION LegacyBEVMenu
;
1070 extern UINT16 TerminalType
[];
1071 extern COM_ATTR BaudRateList
[19];
1072 extern COM_ATTR DataBitsList
[4];
1073 extern COM_ATTR ParityList
[5];
1074 extern COM_ATTR StopBitsList
[3];
1075 extern EFI_GUID Guid
[4];
1076 extern EFI_HII_UPDATE_DATA gUpdateData
;
1077 extern STRING_DEPOSITORY
*FileOptionStrDepository
;
1078 extern STRING_DEPOSITORY
*ConsoleOptionStrDepository
;
1079 extern STRING_DEPOSITORY
*BootOptionStrDepository
;
1080 extern STRING_DEPOSITORY
*BootOptionHelpStrDepository
;
1081 extern STRING_DEPOSITORY
*DriverOptionStrDepository
;
1082 extern STRING_DEPOSITORY
*DriverOptionHelpStrDepository
;
1083 extern STRING_DEPOSITORY
*TerminalStrDepository
;
1084 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath
[];
1085 extern EFI_GUID EfiLegacyDevOrderGuid
;