| /*++ | |
| 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 "EdkGenericPlatformBdsLibStrDefs.h" | |
| #include "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 | |
| // | |
| #define LOAD_OPTION_ACTIVE 0x00000001 | |
| // | |
| // Check to see if current build support force reconnect feature of | |
| // some driver option | |
| // | |
| #define LOAD_OPTION_FORCE_RECONNECT 0x00000002 | |
| // | |
| // 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 EFI_SIGNATURE_32 ('m', 'e', 'n', 'u') | |
| #define BM_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('l', 'o', 'a', 'd') | |
| #define BM_CONSOLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('c', 'n', 's', 'l') | |
| #define BM_FILE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('f', 'i', 'l', 'e') | |
| #define BM_HANDLE_OPTION_SIGNATURE EFI_SIGNATURE_32 ('h', 'n', 'd', 'l') | |
| #define BM_TERMINAL_OPTION_SIGNATURE EFI_SIGNATURE_32 ('t', 'r', 'm', 'l') | |
| #define BM_MENU_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('e', 'n', 't', 'r') | |
| #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 |