summaryrefslogtreecommitdiff
path: root/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h
diff options
context:
space:
mode:
authortgingold <tgingold@6f19259b-4bc3-4df7-8a09-765794883524>2007-01-06 14:59:06 +0000
committertgingold <tgingold@6f19259b-4bc3-4df7-8a09-765794883524>2007-01-06 14:59:06 +0000
commitc9093a06e72ef16d2f3bd7ce0a2b9a172e9d048c (patch)
tree02dfc93be892697bf02f040b6c8429cecc8370ce /EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h
parent8ba7afaf2e9c682a5d17760e6dd5463b3a2b2d67 (diff)
downloadedk2-platforms-c9093a06e72ef16d2f3bd7ce0a2b9a172e9d048c.tar.xz
Unix version of EFI emulator
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2182 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h')
-rw-r--r--EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h1161
1 files changed, 1161 insertions, 0 deletions
diff --git a/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h
new file mode 100644
index 0000000000..d2a3e3d30e
--- /dev/null
+++ b/EdkUnixPkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.h
@@ -0,0 +1,1161 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootMaint.h
+
+Abstract:
+
+Revision History
+
+--*/
+
+#ifndef _BOOT_MAINT_H
+#define _BOOT_MAINT_H
+
+#include "BdsStrDefs.h"
+#include "Generic/BootMaint/BBSsupport.h"
+
+//
+// Constants which are variable names used to access variables
+//
+#define VarLegacyDevOrder L"LegacyDevOrder"
+
+//
+// Guid of a NV Variable which store the information about the
+// FD/HD/CD/NET/BEV order
+//
+#define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \
+ { \
+ 0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52 } \
+ }
+
+//
+// String Contant
+//
+#define StrFloppy L"Floppy Drive #%02x"
+#define StrHardDisk L"HardDisk Drive #%02x"
+#define StrCDROM L"ATAPI CDROM Drive #%02x"
+#define StrNET L"NET Drive #%02x"
+#define StrBEV L"BEV Drive #%02x"
+#define StrFloppyHelp L"Select Floppy Drive #%02x"
+#define StrHardDiskHelp L"Select HardDisk Drive #%02x"
+#define StrCDROMHelp L"Select ATAPI CDROM Drive #%02x"
+#define StrNETHelp L"NET Drive #%02x"
+#define StrBEVHelp L"BEV Drive #%02x"
+
+//
+// Constant will be used in display and file system navigation
+//
+#define UPDATE_DATA_SIZE 0x100000
+#define MAX_BBS_OFFSET 0xE000
+#define NET_OPTION_OFFSET 0xD800
+#define BEV_OPTION_OFFSET 0xD000
+#define FD_OPTION_OFFSET 0xC000
+#define HD_OPTION_OFFSET 0xB000
+#define CD_OPTION_OFFSET 0xA000
+#define FILE_OPTION_OFFSET 0x8000
+#define FILE_OPTION_MASK 0x7FFF
+#define HANDLE_OPTION_OFFSET 0x7000
+#define CONSOLE_OPTION_OFFSET 0x0A00
+#define TERMINAL_OPTION_OFFSET 0x0700
+#define NORMAL_GOTO_OFFSET 0x0100
+#define MAX_STRING_TOKEN_COUNT 0x00FF
+//
+// Variable created with this flag will be "Efi:...."
+//
+#define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
+
+//
+// Define Maxmim characters that will be accepted
+//
+#define MAX_CHAR 480
+#define MAX_CHAR_SIZE (MAX_CHAR * 2)
+
+//
+// Check to see if current build support option active feature of
+// some driver option
+//
+#ifndef LOAD_OPTION_ACTIVE
+#define LOAD_OPTION_ACTIVE 0x00000001
+#endif
+//
+// Check to see if current build support force reconnect feature of
+// some driver option
+//
+#ifndef LOAD_OPTION_FORCE_RECONNECT
+#define LOAD_OPTION_FORCE_RECONNECT 0x00000002
+#endif
+//
+// Below are the form ids for display, form id is used as callback key value,
+// some key value definitions are also defined here. By defining this enum type,
+// We can easy know where we are. The int to UINT16 convertion should be ok because
+// there is a MAXIMUM_FORM_ID which in within the range of UINT16.
+//
+typedef enum {
+ IplRelative,
+ BcvRelative
+} BBS_TYPE;
+
+typedef enum {
+ FORM_RESERVED_ID = 0,
+ FORM_MAIN_ID, // 0x0001
+ FORM_BOOT_ADD_ID, // 0x0002
+ FORM_BOOT_DEL_ID, // 0x0003
+ FORM_BOOT_CHG_ID, // 0x0004
+ FORM_DRV_ADD_ID, // 0x0005
+ FORM_DRV_DEL_ID, // 0x0006
+ FORM_DRV_CHG_ID, // 0x0007
+ FORM_CON_MAIN_ID, // 0x0008
+ FORM_CON_IN_ID, // 0x0009
+ FORM_CON_OUT_ID, // 0x000A
+ FORM_CON_ERR_ID, // 0x000B
+ FORM_FILE_SEEK_ID, // 0x000C
+ FORM_FILE_NEW_SEEK_ID, // 0x000D
+ FORM_DRV_ADD_FILE_ID, // 0x000E
+ FORM_DRV_ADD_HANDLE_ID, // 0x000F
+ FORM_DRV_ADD_HANDLE_DESC_ID, // 0x0010
+ FORM_BOOT_NEXT_ID, // 0x0011
+ FORM_TIME_OUT_ID, // 0x0012
+ FORM_RESET, // 0x0013
+ FORM_BOOT_SETUP_ID, // 0x0014
+ FORM_DRIVER_SETUP_ID, // 0x0015
+ FORM_BOOT_LEGACY_DEVICE_ID, // 0x0016
+ FORM_CON_COM_ID, // 0x0017
+ FORM_CON_COM_SETUP_ID, // 0x0018
+ FORM_SET_FD_ORDER_ID, // 0x0019
+ FORM_SET_HD_ORDER_ID, // 0x001A
+ FORM_SET_CD_ORDER_ID, // 0x001B
+ FORM_SET_NET_ORDER_ID, // 0x001C
+ FORM_SET_BEV_ORDER_ID, // 0x001D
+ FORM_FILE_EXPLORER_ID, // 0x001E
+ FORM_BOOT_ADD_DESCRIPTION_ID, // 0x001F
+ FORM_DRIVER_ADD_FILE_DESCRIPTION_ID, // 0x0020
+} FORM_ID;
+
+#define MAXIMUM_FORM_ID 0x007F
+
+#define KEY_VALUE_COM_SET_BAUD_RATE 0x0080
+#define KEY_VALUE_COM_SET_DATA_BITS 0x0081
+#define KEY_VALUE_COM_SET_STOP_BITS 0x0082
+#define KEY_VALUE_COM_SET_PARITY 0x0083
+#define KEY_VALUE_COM_SET_TERMI_TYPE 0x0084
+#define KEY_VALUE_MAIN_BOOT_NEXT 0x0085
+#define KEY_VALUE_BOOT_ADD_DESC_DATA 0x0086
+#define KEY_VALUE_BOOT_ADD_OPT_DATA 0x0087
+#define KEY_VALUE_DRIVER_ADD_DESC_DATA 0x0088
+#define KEY_VALUE_DRIVER_ADD_OPT_DATA 0x0089
+#define KEY_VALUE_SAVE_AND_EXIT 0x0090
+#define KEY_VALUE_NO_SAVE_AND_EXIT 0x0091
+#define KEY_VALUE_BOOT_FROM_FILE 0x0092
+
+#define MAXIMUM_NORMAL_KEY_VALUE NORMAL_GOTO_OFFSET
+//
+// Below are the number of options in Baudrate, Databits,
+// Parity and Stopbits selection for serial ports.
+//
+#define BM_COM_ATTR_BUADRATE 19
+#define BM_COM_ATTR_DATABITS 4
+#define BM_COM_ATTR_PARITY 5
+#define BM_COM_ATTR_STOPBITS 3
+
+//
+// Callback function helper
+//
+#define BMM_CALLBACK_DATA_SIGNATURE EFI_SIGNATURE_32 ('C', 'b', 'c', 'k')
+#define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
+
+#define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeDriverCallback, BMM_CALLBACK_DATA_SIGNATURE)
+
+//
+// Enumeration type definition
+//
+typedef enum {
+ PC_ANSI = 0,
+ VT_100,
+ VT_100_PLUS,
+ VT_UTF8
+} TYPE_OF_TERMINAL;
+
+typedef enum {
+ COM1 = 0,
+ COM2,
+ UNKNOW_COM
+} TYPE_OF_COM;
+
+typedef enum {
+ CONIN = 0,
+ CONOUT,
+ CONERR,
+ UNKNOWN_CON
+} TYPE_OF_CON;
+
+typedef enum {
+ BAUDRATE = 0,
+ DATABITS,
+ PARITY,
+ STOPBITS,
+ UNKNOW_ATTR
+} TYPE_OF_ATTRIBUTE;
+
+typedef enum {
+ MANNER_GOTO = 0,
+ MANNER_CHECK,
+ MANNER_ONEOF,
+ MANNER_USER_DEFINE
+} TYPE_OF_UPATE_MANNER;
+
+typedef enum {
+ INACTIVE_STATE = 0,
+ BOOT_FROM_FILE_STATE,
+ ADD_BOOT_OPTION_STATE,
+ ADD_DRIVER_OPTION_STATE,
+ UNKNOWN_STATE
+} FILE_EXPLORER_STATE;
+
+typedef enum {
+ FILE_SYSTEM,
+ DIRECTORY,
+ UNKNOWN_CONTEXT
+} FILE_EXPLORER_DISPLAY_CONTEXT;
+
+//
+// All of the signatures that will be used in list structure
+//
+#define BM_MENU_OPTION_SIGNATURE 'menu'
+#define BM_LOAD_OPTION_SIGNATURE 'load'
+#define BM_CONSOLE_OPTION_SIGNATURE 'cnsl'
+#define BM_FILE_OPTION_SIGNATURE 'file'
+#define BM_HANDLE_OPTION_SIGNATURE 'hndl'
+#define BM_TERMINAL_OPTION_SIGNATURE 'trml'
+#define BM_MENU_ENTRY_SIGNATURE 'entr'
+
+#define BM_LOAD_CONTEXT_SELECT 0x0
+#define BM_CONSOLE_CONTEXT_SELECT 0x1
+#define BM_FILE_CONTEXT_SELECT 0x2
+#define BM_HANDLE_CONTEXT_SELECT 0x3
+#define BM_TERMINAL_CONTEXT_SELECT 0x5
+
+#define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
+#define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
+#define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
+#define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
+
+//
+// Question Id that will be used to create question
+// all these values are computed from the structure
+// defined below
+//
+#define QUESTION_ID(Field) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))
+
+#define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
+#define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
+#define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
+#define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
+#define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
+#define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
+#define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
+#define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
+#define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
+#define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
+#define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
+#define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
+#define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
+#define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
+#define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
+#define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
+#define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
+#define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
+#define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
+#define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
+#define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
+#define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
+#define OPTION_ORDER_QUESTION_ID QUESTION_ID (OptionOrder)
+#define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
+#define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
+#define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
+#define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
+#define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
+#define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
+#define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
+#define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
+#define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
+#define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD)
+#define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD)
+#define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD)
+#define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET)
+#define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV)
+
+#define STRING_DEPOSITORY_NUMBER 8
+
+//
+// #pragma pack(1)
+//
+// Serial Ports attributes, first one is the value for
+// return from callback function, stringtoken is used to
+// display the value properly
+//
+typedef struct {
+ UINTN Value;
+ UINT16 StringToken;
+} COM_ATTR;
+
+//
+// This is the structure that will be used to store the
+// question's current value. Use it at initialize time to
+// set default value for each question. When using at run
+// time, this map is returned by the callback function,
+// so dynamically changing the question's value will be
+// possible through this mechanism
+//
+typedef struct {
+ //
+ // Three questions displayed at the main page
+ // for Timeout, BootNext Variables respectively
+ //
+ UINT16 BootTimeOut;
+ UINT16 BootNext;
+
+ //
+ // This is the COM1 Attributes value storage
+ //
+ UINT8 COM1BaudRate;
+ UINT8 COM1DataRate;
+ UINT8 COM1StopBits;
+ UINT8 COM1Parity;
+ UINT8 COM1TerminalType;
+
+ //
+ // This is the COM2 Attributes value storage
+ //
+ UINT8 COM2BaudRate;
+ UINT8 COM2DataRate;
+ UINT8 COM2StopBits;
+ UINT8 COM2Parity;
+ UINT8 COM2TerminalType;
+
+ //
+ // Driver Option Add Handle page storage
+ //
+ UINT16 DriverAddHandleDesc[100];
+ UINT16 DriverAddHandleOptionalData[100];
+ UINT8 DriverAddActive;
+ UINT8 DriverAddForceReconnect;
+
+ //
+ // Console Input/Output/Errorout using COM port check storage
+ //
+ UINT8 ConsoleInputCOM1;
+ UINT8 ConsoleInputCOM2;
+ UINT8 ConsoleOutputCOM1;
+ UINT8 ConsoleOutputCOM2;
+ UINT8 ConsoleErrorCOM1;
+ UINT8 ConsoleErrorCOM2;
+
+ //
+ // At most 100 input/output/errorout device for console storage
+ //
+ UINT8 ConsoleCheck[100];
+
+ //
+ // Boot or Driver Option Order storage
+ //
+ UINT8 OptionOrder[100];
+ UINT8 DriverOptionToBeDeleted[100];
+
+ //
+ // Boot Option Delete storage
+ //
+ UINT8 BootOptionDel[100];
+ UINT8 DriverOptionDel[100];
+
+ //
+ // This is the Terminal Attributes value storage
+ //
+ UINT8 COMBaudRate;
+ UINT8 COMDataRate;
+ UINT8 COMStopBits;
+ UINT8 COMParity;
+ UINT8 COMTerminalType;
+
+ //
+ // Legacy Device Order Selection Storage
+ //
+ UINT8 LegacyFD[100];
+ UINT8 LegacyHD[100];
+ UINT8 LegacyCD[100];
+ UINT8 LegacyNET[100];
+ UINT8 LegacyBEV[100];
+
+ //
+ // We use DisableMap array to record the enable/disable state of each boot device
+ // It should be taken as a bit array, from left to right there are totally 256 bits
+ // the most left one stands for BBS table item 0, and the most right one stands for item 256
+ // If the bit is 1, it means the boot device has been disabled.
+ //
+ UINT8 DisableMap[32];
+
+ //
+ // UINT16 PadArea[10];
+ //
+} BMM_FAKE_NV_DATA;
+
+typedef struct {
+ UINT16 DescriptionData[75];
+ UINT16 OptionalData[127];
+ UINT8 Active;
+ UINT8 ForceReconnect;
+} FILE_EXPLORER_NV_DATA;
+
+typedef struct {
+ BBS_TYPE BbsType;
+ //
+ // Length = sizeof (UINT16) + SIZEOF (Data)
+ //
+ UINT16 Length;
+ UINT16 *Data;
+} BM_LEGACY_DEV_ORDER_CONTEXT;
+
+typedef struct {
+ UINT64 BaudRate;
+ UINT8 DataBits;
+ UINT8 Parity;
+ UINT8 StopBits;
+
+ UINT8 BaudRateIndex;
+ UINT8 DataBitsIndex;
+ UINT8 ParityIndex;
+ UINT8 StopBitsIndex;
+
+ UINT8 IsConIn;
+ UINT8 IsConOut;
+ UINT8 IsStdErr;
+ UINT8 TerminalType;
+
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+} BM_TERMINAL_CONTEXT;
+
+typedef struct {
+ BOOLEAN IsBootNext;
+ BOOLEAN LoadOptionModified;
+ BOOLEAN Deleted;
+
+ BOOLEAN IsLegacy;
+ BOOLEAN IsActive;
+ BOOLEAN ForceReconnect;
+ UINTN OptionalDataSize;
+
+ UINTN LoadOptionSize;
+ UINT8 *LoadOption;
+
+ UINT32 Attributes;
+ UINT16 FilePathListLength;
+ UINT16 *Description;
+ EFI_DEVICE_PATH_PROTOCOL *FilePathList;
+ UINT8 *OptionalData;
+
+ UINT16 BbsIndex;
+} BM_LOAD_CONTEXT;
+
+typedef struct {
+ BBS_TABLE *BbsTable;
+ UINTN Index;
+ UINTN BbsCount;
+ UINT16 *Description;
+} BM_LEGACY_DEVICE_CONTEXT;
+
+typedef struct {
+
+ BOOLEAN IsActive;
+
+ BOOLEAN IsTerminal;
+
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+} BM_CONSOLE_CONTEXT;
+
+typedef struct {
+ EFI_HANDLE Handle;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_FILE_HANDLE FHandle;
+ UINT16 *FileName;
+ EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *Info;
+
+ BOOLEAN IsRoot;
+ BOOLEAN IsDir;
+ BOOLEAN IsRemovableMedia;
+ BOOLEAN IsLoadFile;
+ BOOLEAN IsBootLegacy;
+} BM_FILE_CONTEXT;
+
+typedef struct {
+ EFI_HANDLE Handle;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+} BM_HANDLE_CONTEXT;
+
+typedef struct {
+ UINTN Signature;
+ LIST_ENTRY Head;
+ UINTN MenuNumber;
+} BM_MENU_OPTION;
+
+typedef struct {
+ UINTN Signature;
+ LIST_ENTRY Link;
+ UINTN OptionNumber;
+ UINT16 *DisplayString;
+ UINT16 *HelpString;
+ STRING_REF DisplayStringToken;
+ STRING_REF HelpStringToken;
+ UINTN ContextSelection;
+ VOID *VariableContext;
+} BM_MENU_ENTRY;
+
+typedef struct {
+ //
+ // Shared callback data.
+ //
+ UINTN Signature;
+ EFI_HII_PROTOCOL *Hii;
+ BM_MENU_ENTRY *MenuEntry;
+ BM_HANDLE_CONTEXT *HandleContext;
+ BM_FILE_CONTEXT *FileContext;
+ BM_LOAD_CONTEXT *LoadContext;
+ BM_TERMINAL_CONTEXT *TerminalContext;
+ UINTN CurrentTerminal;
+ BBS_TYPE BbsType;
+
+ //
+ // BMM main formset callback data.
+ //
+ EFI_HII_HANDLE BmmHiiHandle;
+ EFI_HANDLE BmmCallbackHandle;
+ EFI_FORM_CALLBACK_PROTOCOL BmmDriverCallback;
+ FORM_ID BmmCurrentPageId;
+ FORM_ID BmmPreviousPageId;
+ BOOLEAN BmmAskSaveOrNot;
+ BMM_FAKE_NV_DATA *BmmFakeNvData;
+ BMM_FAKE_NV_DATA BmmOldFakeNVData;
+
+ //
+ // File explorer formset callback data.
+ //
+ EFI_HII_HANDLE FeHiiHandle;
+ EFI_HANDLE FeCallbackHandle;
+ EFI_FORM_CALLBACK_PROTOCOL FeDriverCallback;
+ FILE_EXPLORER_STATE FeCurrentState;
+ FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext;
+} BMM_CALLBACK_DATA;
+
+typedef struct _STRING_LIST_NODE {
+ STRING_REF StringToken;
+ struct _STRING_LIST_NODE *Next;
+} STRING_LIST_NODE;
+
+typedef struct _STRING_DEPOSITORY {
+ UINTN TotalNodeNumber;
+ STRING_LIST_NODE *CurrentNode;
+ STRING_LIST_NODE *ListHead;
+} STRING_DEPOSITORY;
+
+//
+// #pragma pack()
+//
+// For initializing File System menu
+//
+EFI_STATUS
+BOpt_FindFileSystem (
+ IN BMM_CALLBACK_DATA *CallbackData
+ )
+;
+
+//
+// For cleaning up File System menu
+//
+VOID
+BOpt_FreeFileSystem (
+ VOID
+ )
+;
+
+//
+// For initializing File Navigation menu
+//
+EFI_STATUS
+BOpt_FindFiles (
+ IN BMM_CALLBACK_DATA *CallbackData,
+ IN BM_MENU_ENTRY *MenuEntry
+ )
+;
+
+//
+// For cleaning up File Navigation menu
+//
+VOID
+BOpt_FreeFiles (
+ VOID
+ )
+;
+
+//
+// For Initializing handle navigation menu
+//
+EFI_STATUS
+BOpt_FindDrivers (
+ VOID
+ )
+;
+
+//
+// For Cleaning up handle navigation menu
+//
+VOID
+BOpt_FreeDrivers();
+
+//
+// For initializing Boot Option menu
+//
+EFI_STATUS
+BOpt_GetBootOptions (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+//
+// For Initializing Driver option menu
+//
+EFI_STATUS
+BOpt_GetDriverOptions (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+//
+// For Cleaning up boot option menu
+//
+VOID
+BOpt_FreeBootOptions ();
+
+//
+// For cleaning up driver option menu
+//
+VOID
+BOpt_FreeDriverOptions();
+
+//
+// For Initializing HD/FD/CD/NET/BEV option menu
+//
+EFI_STATUS
+BOpt_GetLegacyOptions();
+
+//
+// For cleaning up driver option menu
+//
+VOID
+BOpt_FreeLegacyOptions();
+
+//
+// this function is used to take place of all other free menu actions
+//
+VOID
+BOpt_FreeMenu (
+ BM_MENU_OPTION *FreeMenu
+ );
+
+
+//
+// Following are the helper functions used
+//
+CHAR16 *
+BOpt_AppendFileName (
+ IN CHAR16 *Str1,
+ IN CHAR16 *Str2
+ );
+
+BOOLEAN
+BOpt_IsEfiImageName (
+ IN UINT16 *FileName
+ );
+
+BOOLEAN
+BOpt_IsEfiApp (
+ IN EFI_FILE_HANDLE Dir,
+ IN UINT16 *FileName
+ );
+
+//
+// Get current unused boot option number
+//
+UINT16
+BOpt_GetBootOptionNumber ();
+
+//
+// Get current unused driver option number
+//
+UINT16
+BOpt_GetDriverOptionNumber ();
+
+BM_MENU_ENTRY *
+BOpt_CreateMenuEntry (
+ UINTN MenuType
+ );
+
+VOID
+BOpt_DestroyMenuEntry (
+ BM_MENU_ENTRY *MenuEntry
+ );
+
+BM_MENU_ENTRY *
+BOpt_GetMenuEntry (
+ BM_MENU_OPTION *MenuOption,
+ UINTN MenuNumber
+ );
+
+//
+// a helper function used to free pool type memory
+//
+VOID
+SafeFreePool (
+ IN VOID *Buffer
+ );
+
+//
+// Locate all serial io devices for console
+//
+EFI_STATUS
+LocateSerialIo ();
+
+//
+// Initializing Console menu
+//
+EFI_STATUS
+GetAllConsoles();
+
+//
+// Cleaning up console menu
+//
+EFI_STATUS
+FreeAllConsoles();
+
+VOID
+ChangeVariableDevicePath (
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath
+);
+
+EFI_STATUS
+ChangeTerminalDevicePath (
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath,
+ BOOLEAN ChangeTerminal
+);
+//
+// Variable operation by menu selection
+//
+EFI_STATUS
+Var_UpdateBootOption (
+ IN BMM_CALLBACK_DATA *CallbackData,
+ IN FILE_EXPLORER_NV_DATA *NvRamMap
+ );
+
+EFI_STATUS
+Var_DelBootOption ();
+
+EFI_STATUS
+Var_ChangeBootOrder ();
+
+EFI_STATUS
+Var_UpdateDriverOption (
+ IN BMM_CALLBACK_DATA *CallbackData,
+ IN EFI_HII_HANDLE HiiHandle,
+ IN UINT16 *DescriptionData,
+ IN UINT16 *OptionalData,
+ IN UINT8 ForceReconnect
+ );
+
+EFI_STATUS
+Var_DelDriverOption ();
+
+EFI_STATUS
+Var_ChangeDriverOrder ();
+
+EFI_STATUS
+Var_UpdateConsoleInpOption ();
+
+EFI_STATUS
+Var_UpdateConsoleOutOption ();
+
+EFI_STATUS
+Var_UpdateErrorOutOption ();
+
+VOID
+Var_UpdateAllConsoleOption ();
+
+EFI_STATUS
+Var_UpdateBootNext (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+EFI_STATUS
+Var_UpdateBootOrder (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+EFI_STATUS
+Var_UpdateDriverOrder (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+EFI_STATUS
+Var_UpdateBBSOption (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+//
+// Following are page create and refresh functions
+//
+VOID
+RefreshUpdateData (
+ IN BOOLEAN FormSetUpdate,
+ IN EFI_PHYSICAL_ADDRESS FormCallbackHandle,
+ IN BOOLEAN FormUpdate,
+ IN STRING_REF FormTitle,
+ IN UINT16 DataCount
+ );
+
+VOID
+CleanUpPage (
+ IN EFI_FORM_LABEL LabelId,
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+EFI_STATUS
+UpdatePage (
+ IN BMM_CALLBACK_DATA *CallbackData,
+ IN BM_MENU_OPTION *UpdatingMenu,
+ IN UINT16 UpdatingPage,
+ IN UINT16 UpdatingManner,
+ IN UINT16 QuestionIdStart,
+ IN UINT16 GotoForm,
+ IN UINT16 GotoAlternateForm,
+ IN STRING_REF DisplayTokenStart,
+ IN STRING_REF HelpTokenStart,
+ IN UINT16 KeyValueStart
+ );
+
+VOID
+UpdateBootAddPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateBootDelPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateDrvAddFilePage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateDrvAddHandlePage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateDrvDelPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateDriverAddHandleDescPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateBootTimeOut (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateConInPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateConOutPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateStdErrPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdatePageBody (
+ IN UINT16 UpdatePageId,
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateCOM1Page (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateCOM2Page (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateBootOrderPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateDriverOrderPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateBootNextPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateTimeOutPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateTerminalPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateConCOMPage (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID
+UpdateSetLegacyDeviceOrderPage (
+ IN UINT16 UpdatePageId,
+ IN BMM_CALLBACK_DATA *CallbackData
+);
+
+EFI_STATUS
+BootLegacy (
+ IN UINT16 BbsType,
+ IN UINT16 BbsFlag
+);
+
+BM_MENU_ENTRY *
+GetCurrentTerminal (
+ UINTN TerminalNumber
+);
+
+EFI_FILE_HANDLE
+EfiLibOpenRoot (
+ IN EFI_HANDLE DeviceHandle
+ );
+
+EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
+EfiLibFileSystemVolumeLabelInfo (
+ IN EFI_FILE_HANDLE FHand
+ );
+
+EFI_FILE_INFO *
+EfiLibFileInfo (
+ IN EFI_FILE_HANDLE FHand
+ );
+
+CHAR16 *
+DevicePathToStr (
+ EFI_DEVICE_PATH_PROTOCOL *DevPath
+ );
+
+EFI_STATUS
+EfiLibLocateProtocol (
+ IN EFI_GUID *ProtocolGuid,
+ OUT VOID **Interface
+ );
+
+VOID *
+EfiReallocatePool (
+ IN VOID *OldPool,
+ IN UINTN OldSize,
+ IN UINTN NewSize
+ );
+
+CHAR16 *
+DevicePathToStr (
+ EFI_DEVICE_PATH_PROTOCOL *DevPath
+ );
+
+VOID *
+BdsLibGetVariableAndSize (
+ IN CHAR16 *Name,
+ IN EFI_GUID *VendorGuid,
+ OUT UINTN *VarSize
+ );
+
+EFI_STATUS
+EfiLibDeleteVariable (
+ IN CHAR16 *VarName,
+ IN EFI_GUID *VarGuid
+ );
+
+CHAR16 *
+EfiStrDuplicate (
+ IN CHAR16 *Src
+ );
+
+BOOLEAN
+EfiLibMatchDevicePaths (
+ IN EFI_DEVICE_PATH_PROTOCOL *Multi,
+ IN EFI_DEVICE_PATH_PROTOCOL *Single
+ );
+
+UINTN
+EfiDevicePathInstanceCount (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ );
+
+EFI_STATUS
+CreateMenuStringToken (
+ IN BMM_CALLBACK_DATA *CallbackData,
+ IN EFI_HII_HANDLE HiiHandle,
+ IN BM_MENU_OPTION *MenuOption
+ );
+
+UINT16 *
+EfiLibStrFromDatahub (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevPath
+ );
+
+VOID *
+GetLegacyBootOptionVar (
+ IN UINTN DeviceType,
+ OUT UINTN *OptionIndex,
+ OUT UINTN *OptionSize
+ );
+
+EFI_STATUS
+InitializeBM (
+ VOID
+ );
+
+EFI_STATUS
+BdsStartBootMaint (
+ VOID
+ );
+
+VOID
+InitializeStringDepository ();
+
+STRING_REF
+GetStringTokenFromDepository (
+ IN BMM_CALLBACK_DATA *CallbackData,
+ IN STRING_DEPOSITORY *StringDepository
+ ) ;
+
+VOID
+ReclaimStringDepository (
+ VOID
+ );
+
+VOID
+CleanUpStringDepository (
+ VOID
+ );
+
+EFI_STATUS
+ApplyChangeHandler (
+ IN BMM_CALLBACK_DATA *Private,
+ IN BMM_FAKE_NV_DATA *CurrentFakeNVMap,
+ IN FORM_ID FormId
+ );
+
+VOID
+DiscardChangeHandler (
+ IN BMM_CALLBACK_DATA *Private,
+ IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
+ );
+
+VOID
+UpdatePageId (
+ BMM_CALLBACK_DATA *Private,
+ UINT16 NewPageId
+ );
+
+EFI_STATUS
+BootThisFile (
+ IN BM_FILE_CONTEXT *FileContext
+ );
+
+BOOLEAN
+UpdateFileExplorer (
+ IN BMM_CALLBACK_DATA *CallbackData,
+ IN UINT16 KeyValue
+ );
+
+EFI_STATUS
+EFIAPI
+FileExplorerCallback (
+ IN EFI_FORM_CALLBACK_PROTOCOL *This,
+ IN UINT16 KeyValue,
+ IN EFI_IFR_DATA_ARRAY *Data,
+ OUT EFI_HII_CALLBACK_PACKET **Packet
+ );
+
+EFI_STATUS
+FormSetDispatcher (
+ IN BMM_CALLBACK_DATA *CallbackData
+ );
+
+VOID CreateCallbackPacket (
+ OUT EFI_HII_CALLBACK_PACKET **Packet,
+ IN UINT16 Flags
+ );
+
+//
+// Global variable in this program (defined in data.c)
+//
+extern BM_MENU_OPTION BootOptionMenu;
+extern BM_MENU_OPTION DriverOptionMenu;
+extern BM_MENU_OPTION FsOptionMenu;
+extern BM_MENU_OPTION ConsoleInpMenu;
+extern BM_MENU_OPTION ConsoleOutMenu;
+extern BM_MENU_OPTION ConsoleErrMenu;
+extern BM_MENU_OPTION DirectoryMenu;
+extern BM_MENU_OPTION DriverMenu;
+extern BM_MENU_OPTION TerminalMenu;
+extern BM_MENU_OPTION LegacyFDMenu;
+extern BM_MENU_OPTION LegacyHDMenu;
+extern BM_MENU_OPTION LegacyCDMenu;
+extern BM_MENU_OPTION LegacyNETMenu;
+extern BM_MENU_OPTION LegacyBEVMenu;
+extern UINT16 TerminalType[];
+extern COM_ATTR BaudRateList[19];
+extern COM_ATTR DataBitsList[4];
+extern COM_ATTR ParityList[5];
+extern COM_ATTR StopBitsList[3];
+extern EFI_GUID Guid[4];
+extern EFI_HII_UPDATE_DATA *UpdateData;
+extern STRING_DEPOSITORY *FileOptionStrDepository;
+extern STRING_DEPOSITORY *ConsoleOptionStrDepository;
+extern STRING_DEPOSITORY *BootOptionStrDepository;
+extern STRING_DEPOSITORY *BootOptionHelpStrDepository;
+extern STRING_DEPOSITORY *DriverOptionStrDepository;
+extern STRING_DEPOSITORY *DriverOptionHelpStrDepository;
+extern STRING_DEPOSITORY *TerminalStrDepository;
+extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];
+extern EFI_GUID EfiLegacyDevOrderGuid;
+
+#endif