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 "EdkGenericPlatformBdsLibStrDefs.h"
26 #include "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)
85 // Check to see if current build support option active feature of
88 #ifndef LOAD_OPTION_ACTIVE
89 #define LOAD_OPTION_ACTIVE 0x00000001
92 // Check to see if current build support force reconnect feature of
95 #ifndef LOAD_OPTION_FORCE_RECONNECT
96 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
99 // Below are the form ids for display, form id is used as callback key value,
100 // some key value definitions are also defined here. By defining this enum type,
101 // We can easy know where we are. The int to UINT16 convertion should be ok because
102 // there is a MAXIMUM_FORM_ID which in within the range of UINT16.
110 FORM_RESERVED_ID
= 0,
111 FORM_MAIN_ID
, // 0x0001
112 FORM_BOOT_ADD_ID
, // 0x0002
113 FORM_BOOT_DEL_ID
, // 0x0003
114 FORM_BOOT_CHG_ID
, // 0x0004
115 FORM_DRV_ADD_ID
, // 0x0005
116 FORM_DRV_DEL_ID
, // 0x0006
117 FORM_DRV_CHG_ID
, // 0x0007
118 FORM_CON_MAIN_ID
, // 0x0008
119 FORM_CON_IN_ID
, // 0x0009
120 FORM_CON_OUT_ID
, // 0x000A
121 FORM_CON_ERR_ID
, // 0x000B
122 FORM_FILE_SEEK_ID
, // 0x000C
123 FORM_FILE_NEW_SEEK_ID
, // 0x000D
124 FORM_DRV_ADD_FILE_ID
, // 0x000E
125 FORM_DRV_ADD_HANDLE_ID
, // 0x000F
126 FORM_DRV_ADD_HANDLE_DESC_ID
, // 0x0010
127 FORM_BOOT_NEXT_ID
, // 0x0011
128 FORM_TIME_OUT_ID
, // 0x0012
129 FORM_RESET
, // 0x0013
130 FORM_BOOT_SETUP_ID
, // 0x0014
131 FORM_DRIVER_SETUP_ID
, // 0x0015
132 FORM_BOOT_LEGACY_DEVICE_ID
, // 0x0016
133 FORM_CON_COM_ID
, // 0x0017
134 FORM_CON_COM_SETUP_ID
, // 0x0018
135 FORM_SET_FD_ORDER_ID
, // 0x0019
136 FORM_SET_HD_ORDER_ID
, // 0x001A
137 FORM_SET_CD_ORDER_ID
, // 0x001B
138 FORM_SET_NET_ORDER_ID
, // 0x001C
139 FORM_SET_BEV_ORDER_ID
, // 0x001D
140 FORM_FILE_EXPLORER_ID
, // 0x001E
141 FORM_BOOT_ADD_DESCRIPTION_ID
, // 0x001F
142 FORM_DRIVER_ADD_FILE_DESCRIPTION_ID
, // 0x0020
145 #define MAXIMUM_FORM_ID 0x007F
147 #define KEY_VALUE_COM_SET_BAUD_RATE 0x0080
148 #define KEY_VALUE_COM_SET_DATA_BITS 0x0081
149 #define KEY_VALUE_COM_SET_STOP_BITS 0x0082
150 #define KEY_VALUE_COM_SET_PARITY 0x0083
151 #define KEY_VALUE_COM_SET_TERMI_TYPE 0x0084
152 #define KEY_VALUE_MAIN_BOOT_NEXT 0x0085
153 #define KEY_VALUE_BOOT_ADD_DESC_DATA 0x0086
154 #define KEY_VALUE_BOOT_ADD_OPT_DATA 0x0087
155 #define KEY_VALUE_DRIVER_ADD_DESC_DATA 0x0088
156 #define KEY_VALUE_DRIVER_ADD_OPT_DATA 0x0089
157 #define KEY_VALUE_SAVE_AND_EXIT 0x0090
158 #define KEY_VALUE_NO_SAVE_AND_EXIT 0x0091
159 #define KEY_VALUE_BOOT_FROM_FILE 0x0092
161 #define MAXIMUM_NORMAL_KEY_VALUE NORMAL_GOTO_OFFSET
163 // Below are the number of options in Baudrate, Databits,
164 // Parity and Stopbits selection for serial ports.
166 #define BM_COM_ATTR_BUADRATE 19
167 #define BM_COM_ATTR_DATABITS 4
168 #define BM_COM_ATTR_PARITY 5
169 #define BM_COM_ATTR_STOPBITS 3
172 // Callback function helper
174 #define BMM_CALLBACK_DATA_SIGNATURE EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')
175 #define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
177 #define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
180 // Enumeration type definition
215 } TYPE_OF_UPATE_MANNER
;
219 BOOT_FROM_FILE_STATE
,
220 ADD_BOOT_OPTION_STATE
,
221 ADD_DRIVER_OPTION_STATE
,
223 } FILE_EXPLORER_STATE
;
229 } FILE_EXPLORER_DISPLAY_CONTEXT
;
232 // All of the signatures that will be used in list structure
234 #define BM_MENU_OPTION_SIGNATURE EFI_SIGNATURE_32 ('m', 'e', 'n', 'u')
235 #define BM_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('l', 'o', 'a', 'd')
236 #define BM_CONSOLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('c', 'n', 's', 'l')
237 #define BM_FILE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('f', 'i', 'l', 'e')
238 #define BM_HANDLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('h', 'n', 'd', 'l')
239 #define BM_TERMINAL_OPTION_SIGNATURE EFI_SIGNATURE_32 ('t', 'r', 'm', 'l')
240 #define BM_MENU_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('e', 'n', 't', 'r')
242 #define BM_LOAD_CONTEXT_SELECT 0x0
243 #define BM_CONSOLE_CONTEXT_SELECT 0x1
244 #define BM_FILE_CONTEXT_SELECT 0x2
245 #define BM_HANDLE_CONTEXT_SELECT 0x3
246 #define BM_TERMINAL_CONTEXT_SELECT 0x5
248 #define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
249 #define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
250 #define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
251 #define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
254 // Question Id that will be used to create question
255 // all these values are computed from the structure
258 #define QUESTION_ID(Field) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))
260 #define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
261 #define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
262 #define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
263 #define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
264 #define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
265 #define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
266 #define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
267 #define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
268 #define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
269 #define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
270 #define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
271 #define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
272 #define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
273 #define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
274 #define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
275 #define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
276 #define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
277 #define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
278 #define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
279 #define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
280 #define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
281 #define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
282 #define OPTION_ORDER_QUESTION_ID QUESTION_ID (OptionOrder)
283 #define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
284 #define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
285 #define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
286 #define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
287 #define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
288 #define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
289 #define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
290 #define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
291 #define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
292 #define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD)
293 #define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD)
294 #define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD)
295 #define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET)
296 #define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV)
298 #define STRING_DEPOSITORY_NUMBER 8
303 // Serial Ports attributes, first one is the value for
304 // return from callback function, stringtoken is used to
305 // display the value properly
313 // This is the structure that will be used to store the
314 // question's current value. Use it at initialize time to
315 // set default value for each question. When using at run
316 // time, this map is returned by the callback function,
317 // so dynamically changing the question's value will be
318 // possible through this mechanism
322 // Three questions displayed at the main page
323 // for Timeout, BootNext Variables respectively
329 // This is the COM1 Attributes value storage
335 UINT8 COM1TerminalType
;
338 // This is the COM2 Attributes value storage
344 UINT8 COM2TerminalType
;
347 // Driver Option Add Handle page storage
349 UINT16 DriverAddHandleDesc
[100];
350 UINT16 DriverAddHandleOptionalData
[100];
351 UINT8 DriverAddActive
;
352 UINT8 DriverAddForceReconnect
;
355 // Console Input/Output/Errorout using COM port check storage
357 UINT8 ConsoleInputCOM1
;
358 UINT8 ConsoleInputCOM2
;
359 UINT8 ConsoleOutputCOM1
;
360 UINT8 ConsoleOutputCOM2
;
361 UINT8 ConsoleErrorCOM1
;
362 UINT8 ConsoleErrorCOM2
;
365 // At most 100 input/output/errorout device for console storage
367 UINT8 ConsoleCheck
[100];
370 // Boot or Driver Option Order storage
372 UINT8 OptionOrder
[100];
373 UINT8 DriverOptionToBeDeleted
[100];
376 // Boot Option Delete storage
378 UINT8 BootOptionDel
[100];
379 UINT8 DriverOptionDel
[100];
382 // This is the Terminal Attributes value storage
388 UINT8 COMTerminalType
;
391 // Legacy Device Order Selection Storage
396 UINT8 LegacyNET
[100];
397 UINT8 LegacyBEV
[100];
400 // We use DisableMap array to record the enable/disable state of each boot device
401 // It should be taken as a bit array, from left to right there are totally 256 bits
402 // the most left one stands for BBS table item 0, and the most right one stands for item 256
403 // If the bit is 1, it means the boot device has been disabled.
405 UINT8 DisableMap
[32];
408 // UINT16 PadArea[10];
413 UINT16 DescriptionData
[75];
414 UINT16 OptionalData
[127];
416 UINT8 ForceReconnect
;
417 } FILE_EXPLORER_NV_DATA
;
422 // Length = sizeof (UINT16) + SIZEOF (Data)
426 } BM_LEGACY_DEV_ORDER_CONTEXT
;
444 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
445 } BM_TERMINAL_CONTEXT
;
449 BOOLEAN LoadOptionModified
;
454 BOOLEAN ForceReconnect
;
455 UINTN OptionalDataSize
;
457 UINTN LoadOptionSize
;
461 UINT16 FilePathListLength
;
463 EFI_DEVICE_PATH_PROTOCOL
*FilePathList
;
474 } BM_LEGACY_DEVICE_CONTEXT
;
482 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
483 } BM_CONSOLE_CONTEXT
;
487 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
488 EFI_FILE_HANDLE FHandle
;
490 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*Info
;
494 BOOLEAN IsRemovableMedia
;
496 BOOLEAN IsBootLegacy
;
501 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
514 UINT16
*DisplayString
;
516 STRING_REF DisplayStringToken
;
517 STRING_REF HelpStringToken
;
518 UINTN ContextSelection
;
519 VOID
*VariableContext
;
524 // Shared callback data.
527 EFI_HII_PROTOCOL
*Hii
;
528 BM_MENU_ENTRY
*MenuEntry
;
529 BM_HANDLE_CONTEXT
*HandleContext
;
530 BM_FILE_CONTEXT
*FileContext
;
531 BM_LOAD_CONTEXT
*LoadContext
;
532 BM_TERMINAL_CONTEXT
*TerminalContext
;
533 UINTN CurrentTerminal
;
537 // BMM main formset callback data.
539 EFI_HII_HANDLE BmmHiiHandle
;
540 EFI_HANDLE BmmCallbackHandle
;
541 EFI_FORM_CALLBACK_PROTOCOL BmmDriverCallback
;
542 FORM_ID BmmCurrentPageId
;
543 FORM_ID BmmPreviousPageId
;
544 BOOLEAN BmmAskSaveOrNot
;
545 BMM_FAKE_NV_DATA
*BmmFakeNvData
;
546 BMM_FAKE_NV_DATA BmmOldFakeNVData
;
549 // File explorer formset callback data.
551 EFI_HII_HANDLE FeHiiHandle
;
552 EFI_HANDLE FeCallbackHandle
;
553 EFI_FORM_CALLBACK_PROTOCOL FeDriverCallback
;
554 FILE_EXPLORER_STATE FeCurrentState
;
555 FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext
;
558 typedef struct _STRING_LIST_NODE
{
559 STRING_REF StringToken
;
560 struct _STRING_LIST_NODE
*Next
;
563 typedef struct _STRING_DEPOSITORY
{
564 UINTN TotalNodeNumber
;
565 STRING_LIST_NODE
*CurrentNode
;
566 STRING_LIST_NODE
*ListHead
;
572 // For initializing File System menu
575 BOpt_FindFileSystem (
576 IN BMM_CALLBACK_DATA
*CallbackData
581 // For cleaning up File System menu
584 BOpt_FreeFileSystem (
590 // For initializing File Navigation menu
594 IN BMM_CALLBACK_DATA
*CallbackData
,
595 IN BM_MENU_ENTRY
*MenuEntry
600 // For cleaning up File Navigation menu
609 // For Initializing handle navigation menu
618 // For Cleaning up handle navigation menu
624 // For initializing Boot Option menu
627 BOpt_GetBootOptions (
628 IN BMM_CALLBACK_DATA
*CallbackData
632 // For Initializing Driver option menu
635 BOpt_GetDriverOptions (
636 IN BMM_CALLBACK_DATA
*CallbackData
640 // For Cleaning up boot option menu
643 BOpt_FreeBootOptions ();
646 // For cleaning up driver option menu
649 BOpt_FreeDriverOptions();
652 // For Initializing HD/FD/CD/NET/BEV option menu
655 BOpt_GetLegacyOptions();
658 // For cleaning up driver option menu
661 BOpt_FreeLegacyOptions();
664 // this function is used to take place of all other free menu actions
668 BM_MENU_OPTION
*FreeMenu
673 // Following are the helper functions used
676 BOpt_AppendFileName (
682 BOpt_IsEfiImageName (
688 IN EFI_FILE_HANDLE Dir
,
693 // Get current unused boot option number
696 BOpt_GetBootOptionNumber ();
699 // Get current unused driver option number
702 BOpt_GetDriverOptionNumber ();
705 BOpt_CreateMenuEntry (
710 BOpt_DestroyMenuEntry (
711 BM_MENU_ENTRY
*MenuEntry
716 BM_MENU_OPTION
*MenuOption
,
721 // a helper function used to free pool type memory
729 // Locate all serial io devices for console
735 // Initializing Console menu
741 // Cleaning up console menu
747 ChangeVariableDevicePath (
748 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
752 ChangeTerminalDevicePath (
753 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
754 BOOLEAN ChangeTerminal
757 // Variable operation by menu selection
760 Var_UpdateBootOption (
761 IN BMM_CALLBACK_DATA
*CallbackData
,
762 IN FILE_EXPLORER_NV_DATA
*NvRamMap
766 Var_DelBootOption ();
769 Var_ChangeBootOrder ();
772 Var_UpdateDriverOption (
773 IN BMM_CALLBACK_DATA
*CallbackData
,
774 IN EFI_HII_HANDLE HiiHandle
,
775 IN UINT16
*DescriptionData
,
776 IN UINT16
*OptionalData
,
777 IN UINT8 ForceReconnect
781 Var_DelDriverOption ();
784 Var_ChangeDriverOrder ();
787 Var_UpdateConsoleInpOption ();
790 Var_UpdateConsoleOutOption ();
793 Var_UpdateErrorOutOption ();
796 Var_UpdateAllConsoleOption ();
800 IN BMM_CALLBACK_DATA
*CallbackData
804 Var_UpdateBootOrder (
805 IN BMM_CALLBACK_DATA
*CallbackData
809 Var_UpdateDriverOrder (
810 IN BMM_CALLBACK_DATA
*CallbackData
814 Var_UpdateBBSOption (
815 IN BMM_CALLBACK_DATA
*CallbackData
819 // Following are page create and refresh functions
823 IN BOOLEAN FormSetUpdate
,
824 IN EFI_PHYSICAL_ADDRESS FormCallbackHandle
,
825 IN BOOLEAN FormUpdate
,
826 IN STRING_REF FormTitle
,
832 IN EFI_FORM_LABEL LabelId
,
833 IN BMM_CALLBACK_DATA
*CallbackData
838 IN BMM_CALLBACK_DATA
*CallbackData
,
839 IN BM_MENU_OPTION
*UpdatingMenu
,
840 IN UINT16 UpdatingPage
,
841 IN UINT16 UpdatingManner
,
842 IN UINT16 QuestionIdStart
,
844 IN UINT16 GotoAlternateForm
,
845 IN STRING_REF DisplayTokenStart
,
846 IN STRING_REF HelpTokenStart
,
847 IN UINT16 KeyValueStart
852 IN BMM_CALLBACK_DATA
*CallbackData
857 IN BMM_CALLBACK_DATA
*CallbackData
861 UpdateDrvAddFilePage (
862 IN BMM_CALLBACK_DATA
*CallbackData
866 UpdateDrvAddHandlePage (
867 IN BMM_CALLBACK_DATA
*CallbackData
872 IN BMM_CALLBACK_DATA
*CallbackData
876 UpdateDriverAddHandleDescPage (
877 IN BMM_CALLBACK_DATA
*CallbackData
882 IN BMM_CALLBACK_DATA
*CallbackData
887 IN BMM_CALLBACK_DATA
*CallbackData
892 IN BMM_CALLBACK_DATA
*CallbackData
897 IN BMM_CALLBACK_DATA
*CallbackData
902 IN UINT16 UpdatePageId
,
903 IN BMM_CALLBACK_DATA
*CallbackData
908 IN BMM_CALLBACK_DATA
*CallbackData
913 IN BMM_CALLBACK_DATA
*CallbackData
917 UpdateBootOrderPage (
918 IN BMM_CALLBACK_DATA
*CallbackData
922 UpdateDriverOrderPage (
923 IN BMM_CALLBACK_DATA
*CallbackData
928 IN BMM_CALLBACK_DATA
*CallbackData
933 IN BMM_CALLBACK_DATA
*CallbackData
938 IN BMM_CALLBACK_DATA
*CallbackData
943 IN BMM_CALLBACK_DATA
*CallbackData
947 UpdateSetLegacyDeviceOrderPage (
948 IN UINT16 UpdatePageId
,
949 IN BMM_CALLBACK_DATA
*CallbackData
965 IN EFI_HANDLE DeviceHandle
968 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO
*
969 EfiLibFileSystemVolumeLabelInfo (
970 IN EFI_FILE_HANDLE FHand
975 IN EFI_FILE_HANDLE FHand
980 EFI_DEVICE_PATH_PROTOCOL
*DevPath
984 EfiLibLocateProtocol (
985 IN EFI_GUID
*ProtocolGuid
,
998 EFI_DEVICE_PATH_PROTOCOL
*DevPath
1002 BdsLibGetVariableAndSize (
1004 IN EFI_GUID
*VendorGuid
,
1009 EfiLibDeleteVariable (
1011 IN EFI_GUID
*VarGuid
1020 EfiLibMatchDevicePaths (
1021 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
1022 IN EFI_DEVICE_PATH_PROTOCOL
*Single
1026 EfiDevicePathInstanceCount (
1027 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
1031 CreateMenuStringToken (
1032 IN BMM_CALLBACK_DATA
*CallbackData
,
1033 IN EFI_HII_HANDLE HiiHandle
,
1034 IN BM_MENU_OPTION
*MenuOption
1038 EfiLibStrFromDatahub (
1039 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
1043 GetLegacyBootOptionVar (
1044 IN UINTN DeviceType
,
1045 OUT UINTN
*OptionIndex
,
1046 OUT UINTN
*OptionSize
1060 InitializeStringDepository ();
1063 GetStringTokenFromDepository (
1064 IN BMM_CALLBACK_DATA
*CallbackData
,
1065 IN STRING_DEPOSITORY
*StringDepository
1069 ReclaimStringDepository (
1074 CleanUpStringDepository (
1079 ApplyChangeHandler (
1080 IN BMM_CALLBACK_DATA
*Private
,
1081 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
,
1086 DiscardChangeHandler (
1087 IN BMM_CALLBACK_DATA
*Private
,
1088 IN BMM_FAKE_NV_DATA
*CurrentFakeNVMap
1093 BMM_CALLBACK_DATA
*Private
,
1099 IN BM_FILE_CONTEXT
*FileContext
1103 UpdateFileExplorer (
1104 IN BMM_CALLBACK_DATA
*CallbackData
,
1110 FileExplorerCallback (
1111 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
1113 IN EFI_IFR_DATA_ARRAY
*Data
,
1114 OUT EFI_HII_CALLBACK_PACKET
**Packet
1119 IN BMM_CALLBACK_DATA
*CallbackData
1122 VOID
CreateCallbackPacket (
1123 OUT EFI_HII_CALLBACK_PACKET
**Packet
,
1128 // Global variable in this program (defined in data.c)
1130 extern BM_MENU_OPTION BootOptionMenu
;
1131 extern BM_MENU_OPTION DriverOptionMenu
;
1132 extern BM_MENU_OPTION FsOptionMenu
;
1133 extern BM_MENU_OPTION ConsoleInpMenu
;
1134 extern BM_MENU_OPTION ConsoleOutMenu
;
1135 extern BM_MENU_OPTION ConsoleErrMenu
;
1136 extern BM_MENU_OPTION DirectoryMenu
;
1137 extern BM_MENU_OPTION DriverMenu
;
1138 extern BM_MENU_OPTION TerminalMenu
;
1139 extern BM_MENU_OPTION LegacyFDMenu
;
1140 extern BM_MENU_OPTION LegacyHDMenu
;
1141 extern BM_MENU_OPTION LegacyCDMenu
;
1142 extern BM_MENU_OPTION LegacyNETMenu
;
1143 extern BM_MENU_OPTION LegacyBEVMenu
;
1144 extern UINT16 TerminalType
[];
1145 extern COM_ATTR BaudRateList
[19];
1146 extern COM_ATTR DataBitsList
[4];
1147 extern COM_ATTR ParityList
[5];
1148 extern COM_ATTR StopBitsList
[3];
1149 extern EFI_GUID Guid
[4];
1150 extern EFI_HII_UPDATE_DATA
*UpdateData
;
1151 extern STRING_DEPOSITORY
*FileOptionStrDepository
;
1152 extern STRING_DEPOSITORY
*ConsoleOptionStrDepository
;
1153 extern STRING_DEPOSITORY
*BootOptionStrDepository
;
1154 extern STRING_DEPOSITORY
*BootOptionHelpStrDepository
;
1155 extern STRING_DEPOSITORY
*DriverOptionStrDepository
;
1156 extern STRING_DEPOSITORY
*DriverOptionHelpStrDepository
;
1157 extern STRING_DEPOSITORY
*TerminalStrDepository
;
1158 extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath
[];
1159 extern EFI_GUID EfiLegacyDevOrderGuid
;