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 "Generic/Bds.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)
86 // Below are the form ids for display, form id is used as callback key value,
87 // some key value definitions are also defined here. By defining this enum type,
88 // We can easy know where we are. The int to UINT16 convertion should be ok because
89 // there is a MAXIMUM_FORM_ID which in within the range of UINT16.
98 FORM_MAIN_ID
, // 0x0001
99 FORM_BOOT_ADD_ID
, // 0x0002
100 FORM_BOOT_DEL_ID
, // 0x0003
101 FORM_BOOT_CHG_ID
, // 0x0004
102 FORM_DRV_ADD_ID
, // 0x0005
103 FORM_DRV_DEL_ID
, // 0x0006
104 FORM_DRV_CHG_ID
, // 0x0007
105 FORM_CON_MAIN_ID
, // 0x0008
106 FORM_CON_IN_ID
, // 0x0009
107 FORM_CON_OUT_ID
, // 0x000A
108 FORM_CON_ERR_ID
, // 0x000B
109 FORM_FILE_SEEK_ID
, // 0x000C
110 FORM_FILE_NEW_SEEK_ID
, // 0x000D
111 FORM_DRV_ADD_FILE_ID
, // 0x000E
112 FORM_DRV_ADD_HANDLE_ID
, // 0x000F
113 FORM_DRV_ADD_HANDLE_DESC_ID
, // 0x0010
114 FORM_BOOT_NEXT_ID
, // 0x0011
115 FORM_TIME_OUT_ID
, // 0x0012
116 FORM_RESET
, // 0x0013
117 FORM_BOOT_SETUP_ID
, // 0x0014
118 FORM_DRIVER_SETUP_ID
, // 0x0015
119 FORM_BOOT_LEGACY_DEVICE_ID
, // 0x0016
120 FORM_CON_COM_ID
, // 0x0017
121 FORM_CON_COM_SETUP_ID
, // 0x0018
122 FORM_SET_FD_ORDER_ID
, // 0x0019
123 FORM_SET_HD_ORDER_ID
, // 0x001A
124 FORM_SET_CD_ORDER_ID
, // 0x001B
125 FORM_SET_NET_ORDER_ID
, // 0x001C
126 FORM_SET_BEV_ORDER_ID
, // 0x001D
127 FORM_FILE_EXPLORER_ID
, // 0x001E
128 FORM_BOOT_ADD_DESCRIPTION_ID
, // 0x001F
129 FORM_DRIVER_ADD_FILE_DESCRIPTION_ID
, // 0x0020
132 #define MAXIMUM_FORM_ID 0x007F
134 #define KEY_VALUE_COM_SET_BAUD_RATE 0x0080
135 #define KEY_VALUE_COM_SET_DATA_BITS 0x0081
136 #define KEY_VALUE_COM_SET_STOP_BITS 0x0082
137 #define KEY_VALUE_COM_SET_PARITY 0x0083
138 #define KEY_VALUE_COM_SET_TERMI_TYPE 0x0084
139 #define KEY_VALUE_MAIN_BOOT_NEXT 0x0085
140 #define KEY_VALUE_BOOT_ADD_DESC_DATA 0x0086
141 #define KEY_VALUE_BOOT_ADD_OPT_DATA 0x0087
142 #define KEY_VALUE_DRIVER_ADD_DESC_DATA 0x0088
143 #define KEY_VALUE_DRIVER_ADD_OPT_DATA 0x0089
144 #define KEY_VALUE_SAVE_AND_EXIT 0x0090
145 #define KEY_VALUE_NO_SAVE_AND_EXIT 0x0091
146 #define KEY_VALUE_BOOT_FROM_FILE 0x0092
148 #define MAXIMUM_NORMAL_KEY_VALUE NORMAL_GOTO_OFFSET
150 // Below are the number of options in Baudrate, Databits,
151 // Parity and Stopbits selection for serial ports.
153 #define BM_COM_ATTR_BUADRATE 19
154 #define BM_COM_ATTR_DATABITS 4
155 #define BM_COM_ATTR_PARITY 5
156 #define BM_COM_ATTR_STOPBITS 3
159 // Callback function helper
161 #define BMM_CALLBACK_DATA_SIGNATURE EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')
162 #define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
164 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
167 // Enumeration type definition
202 } TYPE_OF_UPATE_MANNER
;
206 BOOT_FROM_FILE_STATE
,
207 ADD_BOOT_OPTION_STATE
,
208 ADD_DRIVER_OPTION_STATE
,
210 } FILE_EXPLORER_STATE
;
216 } FILE_EXPLORER_DISPLAY_CONTEXT
;
219 // All of the signatures that will be used in list structure
221 #define BM_MENU_OPTION_SIGNATURE 'menu'
222 #define BM_LOAD_OPTION_SIGNATURE 'load'
223 #define BM_CONSOLE_OPTION_SIGNATURE 'cnsl'
224 #define BM_FILE_OPTION_SIGNATURE 'file'
225 #define BM_HANDLE_OPTION_SIGNATURE 'hndl'
226 #define BM_TERMINAL_OPTION_SIGNATURE 'trml'
227 #define BM_MENU_ENTRY_SIGNATURE 'entr'
229 #define BM_LOAD_CONTEXT_SELECT 0x0
230 #define BM_CONSOLE_CONTEXT_SELECT 0x1
231 #define BM_FILE_CONTEXT_SELECT 0x2
232 #define BM_HANDLE_CONTEXT_SELECT 0x3
233 #define BM_TERMINAL_CONTEXT_SELECT 0x5
235 #define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
236 #define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
237 #define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
238 #define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
241 // Question Id that will be used to create question
242 // all these values are computed from the structure
245 #define QUESTION_ID(Field) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))
247 #define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
248 #define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
249 #define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
250 #define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
251 #define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
252 #define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
253 #define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
254 #define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
255 #define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
256 #define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
257 #define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
258 #define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
259 #define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
260 #define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
261 #define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
262 #define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
263 #define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
264 #define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
265 #define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
266 #define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
267 #define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
268 #define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
269 #define OPTION_ORDER_QUESTION_ID QUESTION_ID (OptionOrder)
270 #define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
271 #define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
272 #define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
273 #define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
274 #define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
275 #define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
276 #define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
277 #define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
278 #define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
279 #define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD)
280 #define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD)
281 #define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD)
282 #define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET)
283 #define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV)
285 #define STRING_DEPOSITORY_NUMBER 8
290 // Serial Ports attributes, first one is the value for
291 // return from callback function, stringtoken is used to
292 // display the value properly
300 // This is the structure that will be used to store the
301 // question's current value. Use it at initialize time to
302 // set default value for each question. When using at run
303 // time, this map is returned by the callback function,
304 // so dynamically changing the question's value will be
305 // possible through this mechanism
309 // Three questions displayed at the main page
310 // for Timeout, BootNext Variables respectively
316 // This is the COM1 Attributes value storage
322 UINT8 COM1TerminalType
;
325 // This is the COM2 Attributes value storage
331 UINT8 COM2TerminalType
;
334 // Driver Option Add Handle page storage
336 UINT16 DriverAddHandleDesc
[100];
337 UINT16 DriverAddHandleOptionalData
[100];
338 UINT8 DriverAddActive
;
339 UINT8 DriverAddForceReconnect
;
342 // Console Input/Output/Errorout using COM port check storage
344 UINT8 ConsoleInputCOM1
;
345 UINT8 ConsoleInputCOM2
;
346 UINT8 ConsoleOutputCOM1
;
347 UINT8 ConsoleOutputCOM2
;
348 UINT8 ConsoleErrorCOM1
;
349 UINT8 ConsoleErrorCOM2
;
352 // At most 100 input/output/errorout device for console storage
354 UINT8 ConsoleCheck
[100];
357 // Boot or Driver Option Order storage
359 UINT8 OptionOrder
[100];
360 UINT8 DriverOptionToBeDeleted
[100];
363 // Boot Option Delete storage
365 UINT8 BootOptionDel
[100];
366 UINT8 DriverOptionDel
[100];
369 // This is the Terminal Attributes value storage
375 UINT8 COMTerminalType
;
378 // Legacy Device Order Selection Storage
383 UINT8 LegacyNET
[100];
384 UINT8 LegacyBEV
[100];
387 // We use DisableMap array to record the enable/disable state of each boot device
388 // It should be taken as a bit array, from left to right there are totally 256 bits
389 // the most left one stands for BBS table item 0, and the most right one stands for item 256
390 // If the bit is 1, it means the boot device has been disabled.
392 UINT8 DisableMap
[32];
395 // UINT16 PadArea[10];
400 UINT16 DescriptionData
[75];
401 UINT16 OptionalData
[127];
403 UINT8 ForceReconnect
;
404 } FILE_EXPLORER_NV_DATA
;
409 // Length = sizeof (UINT16) + SIZEOF (Data)
413 } BM_LEGACY_DEV_ORDER_CONTEXT
;
431 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
432 } BM_TERMINAL_CONTEXT
;
436 BOOLEAN LoadOptionModified
;
441 BOOLEAN ForceReconnect
;
442 UINTN OptionalDataSize
;
444 UINTN LoadOptionSize
;
448 UINT16 FilePathListLength
;
450 EFI_DEVICE_PATH_PROTOCOL
*FilePathList
;
461 } BM_LEGACY_DEVICE_CONTEXT
;
469 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
470 } BM_CONSOLE_CONTEXT
;
474 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
475 EFI_FILE_HANDLE FHandle
;
477 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*Info
;
481 BOOLEAN IsRemovableMedia
;
483 BOOLEAN IsBootLegacy
;
488 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
501 UINT16
*DisplayString
;
503 STRING_REF DisplayStringToken
;
504 STRING_REF HelpStringToken
;
505 UINTN ContextSelection
;
506 VOID
*VariableContext
;
511 // Shared callback data.
514 EFI_HII_PROTOCOL
*Hii
;
515 BM_MENU_ENTRY
*MenuEntry
;
516 BM_HANDLE_CONTEXT
*HandleContext
;
517 BM_FILE_CONTEXT
*FileContext
;
518 BM_LOAD_CONTEXT
*LoadContext
;
519 BM_TERMINAL_CONTEXT
*TerminalContext
;
520 UINTN CurrentTerminal
;
524 // BMM main formset callback data.
526 FRAMEWORK_EFI_HII_HANDLE BmmHiiHandle
;
527 EFI_HANDLE BmmCallbackHandle
;
528 EFI_FORM_CALLBACK_PROTOCOL BmmDriverCallback
;
529 FORM_ID BmmCurrentPageId
;
530 FORM_ID BmmPreviousPageId
;
531 BOOLEAN BmmAskSaveOrNot
;
532 BMM_FAKE_NV_DATA
*BmmFakeNvData
;
533 BMM_FAKE_NV_DATA BmmOldFakeNVData
;
536 // File explorer formset callback data.
538 FRAMEWORK_EFI_HII_HANDLE FeHiiHandle
;
539 EFI_HANDLE FeCallbackHandle
;
540 EFI_FORM_CALLBACK_PROTOCOL FeDriverCallback
;
541 FILE_EXPLORER_STATE FeCurrentState
;
542 FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext
;
545 typedef struct _STRING_LIST_NODE
{
546 STRING_REF StringToken
;
547 struct _STRING_LIST_NODE
*Next
;
550 typedef struct _STRING_DEPOSITORY
{
551 UINTN TotalNodeNumber
;
552 STRING_LIST_NODE
*CurrentNode
;
553 STRING_LIST_NODE
*ListHead
;
559 // For initializing File System menu
562 BOpt_FindFileSystem (
563 IN BMM_CALLBACK_DATA
*CallbackData
568 // For cleaning up File System menu
571 BOpt_FreeFileSystem (
577 // For initializing File Navigation menu
581 IN BMM_CALLBACK_DATA
*CallbackData
,
582 IN BM_MENU_ENTRY
*MenuEntry
587 // For cleaning up File Navigation menu
596 // For Initializing handle navigation menu
605 // For Cleaning up handle navigation menu
611 // For initializing Boot Option menu
614 BOpt_GetBootOptions (
615 IN BMM_CALLBACK_DATA
*CallbackData
619 // For Initializing Driver option menu
622 BOpt_GetDriverOptions (
623 IN BMM_CALLBACK_DATA
*CallbackData
627 // For Cleaning up boot option menu
630 BOpt_FreeBootOptions ();
633 // For cleaning up driver option menu
636 BOpt_FreeDriverOptions();
639 // For Initializing HD/FD/CD/NET/BEV option menu
642 BOpt_GetLegacyOptions();
645 // For cleaning up driver option menu
648 BOpt_FreeLegacyOptions();
651 // this function is used to take place of all other free menu actions
655 BM_MENU_OPTION
*FreeMenu
660 // Following are the helper functions used
663 BOpt_AppendFileName (
669 BOpt_IsEfiImageName (
675 IN EFI_FILE_HANDLE Dir
,
680 // Get current unused boot option number
683 BOpt_GetBootOptionNumber ();
686 // Get current unused driver option number
689 BOpt_GetDriverOptionNumber ();
692 BOpt_CreateMenuEntry (
697 BOpt_DestroyMenuEntry (
698 BM_MENU_ENTRY
*MenuEntry
703 BM_MENU_OPTION
*MenuOption
,
708 // a helper function used to free pool type memory
716 // Locate all serial io devices for console
722 // Initializing Console menu
728 // Cleaning up console menu
734 ChangeVariableDevicePath (
735 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
739 ChangeTerminalDevicePath (
740 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
741 BOOLEAN ChangeTerminal
744 // Variable operation by menu selection
747 Var_UpdateBootOption (
748 IN BMM_CALLBACK_DATA
*CallbackData
,
749 IN FILE_EXPLORER_NV_DATA
*NvRamMap
753 Var_DelBootOption ();
756 Var_ChangeBootOrder ();
759 Var_UpdateDriverOption (
760 IN BMM_CALLBACK_DATA
*CallbackData
,
761 IN FRAMEWORK_EFI_HII_HANDLE HiiHandle
,
762 IN UINT16
*DescriptionData
,
763 IN UINT16
*OptionalData
,
764 IN UINT8 ForceReconnect
768 Var_DelDriverOption ();
771 Var_ChangeDriverOrder ();
774 Var_UpdateConsoleInpOption ();
777 Var_UpdateConsoleOutOption ();
780 Var_UpdateErrorOutOption ();
783 Var_UpdateAllConsoleOption ();
787 IN BMM_CALLBACK_DATA
*CallbackData
791 Var_UpdateBootOrder (
792 IN BMM_CALLBACK_DATA
*CallbackData
796 Var_UpdateDriverOrder (
797 IN BMM_CALLBACK_DATA
*CallbackData
801 Var_UpdateBBSOption (
802 IN BMM_CALLBACK_DATA
*CallbackData
806 // Following are page create and refresh functions
810 IN BOOLEAN FormSetUpdate
,
811 IN EFI_PHYSICAL_ADDRESS FormCallbackHandle
,
812 IN BOOLEAN FormUpdate
,
813 IN STRING_REF FormTitle
,
819 IN EFI_FORM_LABEL LabelId
,
820 IN BMM_CALLBACK_DATA
*CallbackData
825 IN BMM_CALLBACK_DATA
*CallbackData
,
826 IN BM_MENU_OPTION
*UpdatingMenu
,
827 IN UINT16 UpdatingPage
,
828 IN UINT16 UpdatingManner
,
829 IN UINT16 QuestionIdStart
,
831 IN UINT16 GotoAlternateForm
,
832 IN STRING_REF DisplayTokenStart
,
833 IN STRING_REF HelpTokenStart
,
834 IN UINT16 KeyValueStart
839 IN BMM_CALLBACK_DATA
*CallbackData
844 IN BMM_CALLBACK_DATA
*CallbackData
848 UpdateDrvAddFilePage (
849 IN BMM_CALLBACK_DATA
*CallbackData
853 UpdateDrvAddHandlePage (
854 IN BMM_CALLBACK_DATA
*CallbackData
859 IN BMM_CALLBACK_DATA
*CallbackData
863 UpdateDriverAddHandleDescPage (
864 IN BMM_CALLBACK_DATA
*CallbackData
869 IN BMM_CALLBACK_DATA
*CallbackData
874 IN BMM_CALLBACK_DATA
*CallbackData
879 IN BMM_CALLBACK_DATA
*CallbackData
884 IN BMM_CALLBACK_DATA
*CallbackData
889 IN UINT16 UpdatePageId
,
890 IN BMM_CALLBACK_DATA
*CallbackData
895 IN BMM_CALLBACK_DATA
*CallbackData
900 IN BMM_CALLBACK_DATA
*CallbackData
904 UpdateBootOrderPage (
905 IN BMM_CALLBACK_DATA
*CallbackData
909 UpdateDriverOrderPage (
910 IN BMM_CALLBACK_DATA
*CallbackData
915 IN BMM_CALLBACK_DATA
*CallbackData
920 IN BMM_CALLBACK_DATA
*CallbackData
925 IN BMM_CALLBACK_DATA
*CallbackData
930 IN BMM_CALLBACK_DATA
*CallbackData
934 UpdateSetLegacyDeviceOrderPage (
935 IN UINT16 UpdatePageId
,
936 IN BMM_CALLBACK_DATA
*CallbackData
952 IN EFI_HANDLE DeviceHandle
955 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*
956 EfiLibFileSystemVolumeLabelInfo (
957 IN EFI_FILE_HANDLE FHand
962 IN EFI_FILE_HANDLE FHand
967 EFI_DEVICE_PATH_PROTOCOL
*DevPath
971 EfiLibLocateProtocol (
972 IN EFI_GUID
*ProtocolGuid
,
985 EFI_DEVICE_PATH_PROTOCOL
*DevPath
989 BdsLibGetVariableAndSize (
991 IN EFI_GUID
*VendorGuid
,
996 EfiLibDeleteVariable (
1007 EfiLibMatchDevicePaths (
1008 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
1009 IN EFI_DEVICE_PATH_PROTOCOL
*Single
1013 EfiDevicePathInstanceCount (
1014 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
1018 CreateMenuStringToken (
1019 IN BMM_CALLBACK_DATA
*CallbackData
,
1020 IN FRAMEWORK_EFI_HII_HANDLE HiiHandle
,
1021 IN BM_MENU_OPTION
*MenuOption
1025 EfiLibStrFromDatahub (
1026 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
1030 GetLegacyBootOptionVar (
1031 IN UINTN DeviceType
,
1032 OUT UINTN
*OptionIndex
,
1033 OUT UINTN
*OptionSize
1047 InitializeStringDepository ();
1050 GetStringTokenFromDepository (
1051 IN BMM_CALLBACK_DATA
*CallbackData
,
1052 IN STRING_DEPOSITORY
*StringDepository
1056 ReclaimStringDepository (
1061 CleanUpStringDepository (
1066 ApplyChangeHandler (
1067 IN BMM_CALLBACK_DATA
*Private
,
1068 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
,
1073 DiscardChangeHandler (
1074 IN BMM_CALLBACK_DATA
*Private
,
1075 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
1080 BMM_CALLBACK_DATA
*Private
,
1086 IN BM_FILE_CONTEXT
*FileContext
1090 UpdateFileExplorer (
1091 IN BMM_CALLBACK_DATA
*CallbackData
,
1097 FileExplorerCallback (
1098 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
1100 IN FRAMEWORK_EFI_IFR_DATA_ARRAY
*Data
,
1101 OUT EFI_HII_CALLBACK_PACKET
**Packet
1106 IN BMM_CALLBACK_DATA
*CallbackData
1109 VOID
CreateCallbackPacket (
1110 OUT EFI_HII_CALLBACK_PACKET
**Packet
,
1115 // Global variable in this program (defined in data.c)
1117 extern BM_MENU_OPTION BootOptionMenu
;
1118 extern BM_MENU_OPTION DriverOptionMenu
;
1119 extern BM_MENU_OPTION FsOptionMenu
;
1120 extern BM_MENU_OPTION ConsoleInpMenu
;
1121 extern BM_MENU_OPTION ConsoleOutMenu
;
1122 extern BM_MENU_OPTION ConsoleErrMenu
;
1123 extern BM_MENU_OPTION DirectoryMenu
;
1124 extern BM_MENU_OPTION DriverMenu
;
1125 extern BM_MENU_OPTION TerminalMenu
;
1126 extern BM_MENU_OPTION LegacyFDMenu
;
1127 extern BM_MENU_OPTION LegacyHDMenu
;
1128 extern BM_MENU_OPTION LegacyCDMenu
;
1129 extern BM_MENU_OPTION LegacyNETMenu
;
1130 extern BM_MENU_OPTION LegacyBEVMenu
;
1131 extern UINT16 TerminalType
[];
1132 extern COM_ATTR BaudRateList
[19];
1133 extern COM_ATTR DataBitsList
[4];
1134 extern COM_ATTR ParityList
[5];
1135 extern COM_ATTR StopBitsList
[3];
1136 extern EFI_GUID Guid
[4];
1137 extern EFI_HII_UPDATE_DATA
*UpdateData
;
1138 extern STRING_DEPOSITORY
*FileOptionStrDepository
;
1139 extern STRING_DEPOSITORY
*ConsoleOptionStrDepository
;
1140 extern STRING_DEPOSITORY
*BootOptionStrDepository
;
1141 extern STRING_DEPOSITORY
*BootOptionHelpStrDepository
;
1142 extern STRING_DEPOSITORY
*DriverOptionStrDepository
;
1143 extern STRING_DEPOSITORY
*DriverOptionHelpStrDepository
;
1144 extern STRING_DEPOSITORY
*TerminalStrDepository
;
1145 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath
[];
1146 extern EFI_GUID EfiLegacyDevOrderGuid
;