/** @file | |
Header file for boot maintenance module. | |
Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _BOOT_MAINT_H_ | |
#define _BOOT_MAINT_H_ | |
#include "FormGuid.h" | |
#include <Guid/TtyTerm.h> | |
#include <Guid/MdeModuleHii.h> | |
#include <Guid/FileSystemVolumeLabelInfo.h> | |
#include <Guid/GlobalVariable.h> | |
#include <Guid/HiiBootMaintenanceFormset.h> | |
#include <Protocol/LoadFile.h> | |
#include <Protocol/HiiConfigAccess.h> | |
#include <Protocol/SimpleFileSystem.h> | |
#include <Protocol/SerialIo.h> | |
#include <Protocol/DevicePathToText.h> | |
#include <Protocol/FormBrowserEx2.h> | |
#include <Library/PrintLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/UefiLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/UefiRuntimeServicesTableLib.h> | |
#include <Library/DevicePathLib.h> | |
#include <Library/HiiLib.h> | |
#include <Library/UefiHiiServicesLib.h> | |
#include <Library/UefiBootManagerLib.h> | |
#include <Library/FileExplorerLib.h> | |
#include "BootMaintenanceManagerCustomizedUi.h" | |
#pragma pack(1) | |
/// | |
/// HII specific Vendor Device Path definition. | |
/// | |
typedef struct { | |
VENDOR_DEVICE_PATH VendorDevicePath; | |
EFI_DEVICE_PATH_PROTOCOL End; | |
} HII_VENDOR_DEVICE_PATH; | |
#pragma pack() | |
// | |
// Constants which are variable names used to access variables | |
// | |
#define VAR_CON_OUT_MODE L"ConOutMode" | |
// | |
// Variable created with this flag will be "Efi:...." | |
// | |
#define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE | |
extern EFI_GUID mBootMaintGuid; | |
extern CHAR16 mBootMaintStorageName[]; | |
// | |
// These are the VFR compiler generated data representing our VFR data. | |
// | |
extern UINT8 BootMaintenanceManagerBin[]; | |
// | |
// 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 SIGNATURE_32 ('C', 'b', 'c', 'k') | |
#define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmConfigAccess, BMM_CALLBACK_DATA_SIGNATURE) | |
// | |
// Enumeration type definition | |
// | |
typedef UINT8 BBS_TYPE; | |
typedef enum _TYPE_OF_TERMINAL { | |
TerminalTypePcAnsi = 0, | |
TerminalTypeVt100, | |
TerminalTypeVt100Plus, | |
TerminalTypeVtUtf8, | |
TerminalTypeTtyTerm, | |
TerminalTypeLinux, | |
TerminalTypeXtermR6, | |
TerminalTypeVt400, | |
TerminalTypeSCO | |
} TYPE_OF_TERMINAL; | |
// | |
// All of the signatures that will be used in list structure | |
// | |
#define BM_MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u') | |
#define BM_LOAD_OPTION_SIGNATURE SIGNATURE_32 ('l', 'o', 'a', 'd') | |
#define BM_CONSOLE_OPTION_SIGNATURE SIGNATURE_32 ('c', 'n', 's', 'l') | |
#define BM_FILE_OPTION_SIGNATURE SIGNATURE_32 ('f', 'i', 'l', 'e') | |
#define BM_HANDLE_OPTION_SIGNATURE SIGNATURE_32 ('h', 'n', 'd', 'l') | |
#define BM_TERMINAL_OPTION_SIGNATURE SIGNATURE_32 ('t', 'r', 'm', 'l') | |
#define BM_MENU_ENTRY_SIGNATURE 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 | |
// | |
// Buffer size for update data | |
// | |
#define UPDATE_DATA_SIZE 0x100000 | |
// | |
// Namespace of callback keys used in display and file system navigation | |
// | |
#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 0x6000 | |
#define TERMINAL_OPTION_OFFSET 0x5000 | |
#define CONFIG_OPTION_OFFSET 0x1200 | |
#define KEY_VALUE_OFFSET 0x1100 | |
#define FORM_ID_OFFSET 0x1000 | |
// | |
// VarOffset that will be used to create question | |
// all these values are computed from the structure | |
// defined below | |
// | |
#define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field))) | |
// | |
// Question Id of Zero is invalid, so add an offset to it | |
// | |
#define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET) | |
#define BOOT_TIME_OUT_VAR_OFFSET VAR_OFFSET (BootTimeOut) | |
#define BOOT_NEXT_VAR_OFFSET VAR_OFFSET (BootNext) | |
#define COM1_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM1BaudRate) | |
#define COM1_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM1DataRate) | |
#define COM1_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM1StopBits) | |
#define COM1_PARITY_VAR_OFFSET VAR_OFFSET (COM1Parity) | |
#define COM1_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType) | |
#define COM2_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COM2BaudRate) | |
#define COM2_DATA_RATE_VAR_OFFSET VAR_OFFSET (COM2DataRate) | |
#define COM2_STOP_BITS_VAR_OFFSET VAR_OFFSET (COM2StopBits) | |
#define COM2_PARITY_VAR_OFFSET VAR_OFFSET (COM2Parity) | |
#define COM2_TERMINAL_VAR_OFFSET VAR_OFFSET (COM2TerminalType) | |
#define DRV_ADD_HANDLE_DESC_VAR_OFFSET VAR_OFFSET (DriverAddHandleDesc) | |
#define DRV_ADD_ACTIVE_VAR_OFFSET VAR_OFFSET (DriverAddActive) | |
#define DRV_ADD_RECON_VAR_OFFSET VAR_OFFSET (DriverAddForceReconnect) | |
#define CON_IN_COM1_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM1) | |
#define CON_IN_COM2_VAR_OFFSET VAR_OFFSET (ConsoleInputCOM2) | |
#define CON_OUT_COM1_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM1) | |
#define CON_OUT_COM2_VAR_OFFSET VAR_OFFSET (ConsoleOutputCOM2) | |
#define CON_ERR_COM1_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM1) | |
#define CON_ERR_COM2_VAR_OFFSET VAR_OFFSET (ConsoleErrorCOM2) | |
#define CON_MODE_VAR_OFFSET VAR_OFFSET (ConsoleOutMode) | |
#define CON_DEVICE_VAR_OFFSET VAR_OFFSET (ConsoleCheck) | |
#define CON_IN_DEVICE_VAR_OFFSET VAR_OFFSET (ConsoleInCheck) | |
#define CON_OUT_DEVICE_VAR_OFFSET VAR_OFFSET (ConsoleOutCheck) | |
#define CON_ERR_DEVICE_VAR_OFFSET VAR_OFFSET (ConsoleErrCheck) | |
#define BOOT_OPTION_ORDER_VAR_OFFSET VAR_OFFSET (BootOptionOrder) | |
#define DRIVER_OPTION_ORDER_VAR_OFFSET VAR_OFFSET (DriverOptionOrder) | |
#define BOOT_OPTION_DEL_VAR_OFFSET VAR_OFFSET (BootOptionDel) | |
#define DRIVER_OPTION_DEL_VAR_OFFSET VAR_OFFSET (DriverOptionDel) | |
#define DRIVER_ADD_OPTION_VAR_OFFSET VAR_OFFSET (DriverAddHandleOptionalData) | |
#define COM_BAUD_RATE_VAR_OFFSET VAR_OFFSET (COMBaudRate) | |
#define COM_DATA_RATE_VAR_OFFSET VAR_OFFSET (COMDataRate) | |
#define COM_STOP_BITS_VAR_OFFSET VAR_OFFSET (COMStopBits) | |
#define COM_PARITY_VAR_OFFSET VAR_OFFSET (COMParity) | |
#define COM_TERMINAL_VAR_OFFSET VAR_OFFSET (COMTerminalType) | |
#define COM_FLOWCONTROL_VAR_OFFSET VAR_OFFSET (COMFlowControl) | |
#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_MODE_QUESTION_ID QUESTION_ID (ConsoleOutMode) | |
#define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck) | |
#define CON_IN_DEVICE_QUESTION_ID QUESTION_ID (ConsoleInCheck) | |
#define CON_OUT_DEVICE_QUESTION_ID QUESTION_ID (ConsoleOutCheck) | |
#define CON_ERR_DEVICE_QUESTION_ID QUESTION_ID (ConsoleErrCheck) | |
#define BOOT_OPTION_ORDER_QUESTION_ID QUESTION_ID (BootOptionOrder) | |
#define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionOrder) | |
#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 COM_FLOWCONTROL_QUESTION_ID QUESTION_ID (COMFlowControl) | |
#define STRING_DEPOSITORY_NUMBER 8 | |
#define NONE_BOOTNEXT_VALUE (0xFFFF + 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; | |
typedef struct { | |
UINT64 BaudRate; | |
UINT8 DataBits; | |
UINT8 Parity; | |
UINT8 StopBits; | |
UINT8 BaudRateIndex; | |
UINT8 DataBitsIndex; | |
UINT8 ParityIndex; | |
UINT8 StopBitsIndex; | |
UINT8 FlowControl; | |
UINT8 IsConIn; | |
UINT8 IsConOut; | |
UINT8 IsStdErr; | |
UINT8 TerminalType; | |
EFI_DEVICE_PATH_PROTOCOL *DevicePath; | |
} BM_TERMINAL_CONTEXT; | |
typedef struct { | |
BOOLEAN IsBootNext; | |
BOOLEAN Deleted; | |
BOOLEAN IsLegacy; | |
UINT32 Attributes; | |
UINT16 FilePathListLength; | |
UINT16 *Description; | |
EFI_DEVICE_PATH_PROTOCOL *FilePathList; | |
UINT8 *OptionalData; | |
} BM_LOAD_CONTEXT; | |
typedef struct { | |
BOOLEAN IsActive; | |
BOOLEAN IsTerminal; | |
EFI_DEVICE_PATH_PROTOCOL *DevicePath; | |
} BM_CONSOLE_CONTEXT; | |
typedef struct { | |
UINTN Column; | |
UINTN Row; | |
} CONSOLE_OUT_MODE; | |
typedef struct { | |
EFI_HANDLE Handle; | |
EFI_DEVICE_PATH_PROTOCOL *DevicePath; | |
EFI_FILE_HANDLE FHandle; | |
UINT16 *FileName; | |
EFI_FILE_SYSTEM_VOLUME_LABEL *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; | |
EFI_STRING_ID DisplayStringToken; | |
EFI_STRING_ID HelpStringToken; | |
UINTN ContextSelection; | |
VOID *VariableContext; | |
} BM_MENU_ENTRY; | |
typedef struct { | |
UINTN Signature; | |
EFI_HII_HANDLE BmmHiiHandle; | |
EFI_HANDLE BmmDriverHandle; | |
/// | |
/// Boot Maintenance Manager Produced protocols | |
/// | |
EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess; | |
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2; | |
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_FORM_ID BmmCurrentPageId; | |
EFI_FORM_ID BmmPreviousPageId; | |
BOOLEAN BmmAskSaveOrNot; | |
BMM_FAKE_NV_DATA BmmFakeNvData; | |
BMM_FAKE_NV_DATA BmmOldFakeNVData; | |
} BMM_CALLBACK_DATA; | |
/** | |
Find drivers that will be added as Driver#### variables from handles | |
in current system environment | |
All valid handles in the system except those consume SimpleFs, LoadFile | |
are stored in DriverMenu for future use. | |
@retval EFI_SUCCESS The function complets successfully. | |
@return Other value if failed to build the DriverMenu. | |
**/ | |
EFI_STATUS | |
BOpt_FindDrivers ( | |
VOID | |
); | |
/** | |
Build the BootOptionMenu according to BootOrder Variable. | |
This Routine will access the Boot#### to get EFI_LOAD_OPTION. | |
@param CallbackData The BMM context data. | |
@return The number of the Var Boot####. | |
**/ | |
EFI_STATUS | |
BOpt_GetBootOptions ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Build up all DriverOptionMenu | |
@param CallbackData The BMM context data. | |
@return EFI_SUCESS The functin completes successfully. | |
@retval EFI_OUT_OF_RESOURCES Not enough memory to compete the operation. | |
**/ | |
EFI_STATUS | |
BOpt_GetDriverOptions ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Free resources allocated in Allocate Rountine. | |
@param FreeMenu Menu to be freed | |
**/ | |
VOID | |
BOpt_FreeMenu ( | |
BM_MENU_OPTION *FreeMenu | |
); | |
/** | |
Get the Option Number that has not been allocated for use. | |
@param Type The type of Option. | |
@return The available Option Number. | |
**/ | |
UINT16 | |
BOpt_GetOptionNumber ( | |
CHAR16 *Type | |
); | |
/** | |
Get the Option Number for Boot#### that does not used. | |
@return The available Option Number. | |
**/ | |
UINT16 | |
BOpt_GetBootOptionNumber ( | |
VOID | |
); | |
/** | |
Get the Option Number for Driver#### that does not used. | |
@return The unused Option Number. | |
**/ | |
UINT16 | |
BOpt_GetDriverOptionNumber ( | |
VOID | |
); | |
/** | |
Create a menu entry give a Menu type. | |
@param MenuType The Menu type to be created. | |
@retval NULL If failed to create the menu. | |
@return The menu. | |
**/ | |
BM_MENU_ENTRY * | |
BOpt_CreateMenuEntry ( | |
UINTN MenuType | |
); | |
/** | |
Free up all resource allocated for a BM_MENU_ENTRY. | |
@param MenuEntry A pointer to BM_MENU_ENTRY. | |
**/ | |
VOID | |
BOpt_DestroyMenuEntry ( | |
BM_MENU_ENTRY *MenuEntry | |
); | |
/** | |
Get the Menu Entry from the list in Menu Entry List. | |
If MenuNumber is great or equal to the number of Menu | |
Entry in the list, then ASSERT. | |
@param MenuOption The Menu Entry List to read the menu entry. | |
@param MenuNumber The index of Menu Entry. | |
@return The Menu Entry. | |
**/ | |
BM_MENU_ENTRY * | |
BOpt_GetMenuEntry ( | |
BM_MENU_OPTION *MenuOption, | |
UINTN MenuNumber | |
); | |
/** | |
Get option number according to Boot#### and BootOrder variable. | |
The value is saved as #### + 1. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
GetBootOrder ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Get driver option order from globalc DriverOptionMenu. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
GetDriverOrder ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
// | |
// Locate all serial io devices for console | |
// | |
/** | |
Build a list containing all serial devices. | |
@retval EFI_SUCCESS The function complete successfully. | |
@retval EFI_UNSUPPORTED No serial ports present. | |
**/ | |
EFI_STATUS | |
LocateSerialIo ( | |
VOID | |
); | |
// | |
// Initializing Console menu | |
// | |
/** | |
Build up ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu | |
@retval EFI_SUCCESS The function always complete successfully. | |
**/ | |
EFI_STATUS | |
GetAllConsoles ( | |
VOID | |
); | |
// | |
// Get current mode information | |
// | |
/** | |
Get mode number according to column and row | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
GetConsoleOutMode ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
// | |
// Cleaning up console menu | |
// | |
/** | |
Free ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu | |
@retval EFI_SUCCESS The function always complete successfully. | |
**/ | |
EFI_STATUS | |
FreeAllConsoles ( | |
VOID | |
); | |
/** | |
Update the device path that describing a terminal device | |
based on the new BaudRate, Data Bits, parity and Stop Bits | |
set. | |
@param DevicePath The devicepath protocol instance wanted to be updated. | |
**/ | |
VOID | |
ChangeVariableDevicePath ( | |
IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath | |
); | |
/** | |
Update the multi-instance device path of Terminal Device based on | |
the global TerminalMenu. If ChangeTernimal is TRUE, the terminal | |
device path in the Terminal Device in TerminalMenu is also updated. | |
@param DevicePath The multi-instance device path. | |
@param ChangeTerminal TRUE, then device path in the Terminal Device | |
in TerminalMenu is also updated; FALSE, no update. | |
@return EFI_SUCCESS The function completes successfully. | |
**/ | |
EFI_STATUS | |
ChangeTerminalDevicePath ( | |
IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath, | |
IN BOOLEAN ChangeTerminal | |
); | |
// | |
// Variable operation by menu selection | |
// | |
/** | |
This function create a currently loaded Boot Option from | |
the BMM. It then appends this Boot Option to the end of | |
the "BootOrder" list. It also append this Boot Opotion to the end | |
of BootOptionMenu. | |
@param CallbackData The BMM context data. | |
@retval EFI_OUT_OF_RESOURCES If not enought memory to complete the operation. | |
@retval EFI_SUCCESS If function completes successfully. | |
**/ | |
EFI_STATUS | |
Var_UpdateBootOption ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Delete Boot Option that represent a Deleted state in BootOptionMenu. | |
@retval EFI_SUCCESS If all boot load option EFI Variables corresponding to | |
BM_LOAD_CONTEXT marked for deletion is deleted | |
@return Others If failed to update the "BootOrder" variable after deletion. | |
**/ | |
EFI_STATUS | |
Var_DelBootOption ( | |
VOID | |
); | |
/** | |
This function create a currently loaded Drive Option from | |
the BMM. It then appends this Driver Option to the end of | |
the "DriverOrder" list. It append this Driver Opotion to the end | |
of DriverOptionMenu. | |
@param CallbackData The BMM context data. | |
@param HiiHandle The HII handle associated with the BMM formset. | |
@param DescriptionData The description of this driver option. | |
@param OptionalData The optional load option. | |
@param ForceReconnect If to force reconnect. | |
@retval EFI_OUT_OF_RESOURCES If not enought memory to complete the operation. | |
@retval EFI_SUCCESS If function completes successfully. | |
**/ | |
EFI_STATUS | |
Var_UpdateDriverOption ( | |
IN BMM_CALLBACK_DATA *CallbackData, | |
IN EFI_HII_HANDLE HiiHandle, | |
IN UINT16 *DescriptionData, | |
IN UINT16 *OptionalData, | |
IN UINT8 ForceReconnect | |
); | |
/** | |
Delete Load Option that represent a Deleted state in DriverOptionMenu. | |
@retval EFI_SUCCESS Load Option is successfully updated. | |
@return Other value than EFI_SUCCESS if failed to update "Driver Order" EFI | |
Variable. | |
**/ | |
EFI_STATUS | |
Var_DelDriverOption ( | |
VOID | |
); | |
/** | |
This function delete and build multi-instance device path ConIn | |
console device. | |
@retval EFI_SUCCESS The function complete successfully. | |
@return The EFI variable can not be saved. See gRT->SetVariable for detail return information. | |
**/ | |
EFI_STATUS | |
Var_UpdateConsoleInpOption ( | |
VOID | |
); | |
/** | |
This function delete and build multi-instance device path ConOut console device. | |
@retval EFI_SUCCESS The function complete successfully. | |
@return The EFI variable can not be saved. See gRT->SetVariable for detail return information. | |
**/ | |
EFI_STATUS | |
Var_UpdateConsoleOutOption ( | |
VOID | |
); | |
/** | |
This function delete and build multi-instance device path ErrOut console device. | |
@retval EFI_SUCCESS The function complete successfully. | |
@return The EFI variable can not be saved. See gRT->SetVariable for detail return information. | |
**/ | |
EFI_STATUS | |
Var_UpdateErrorOutOption ( | |
VOID | |
); | |
/** | |
This function delete and build Out of Band console device. | |
@param MenuIndex Menu index which user select in the terminal menu list. | |
@retval EFI_SUCCESS The function complete successfully. | |
@return The EFI variable can not be saved. See gRT->SetVariable for detail return information. | |
**/ | |
EFI_STATUS | |
Var_UpdateOutOfBandOption ( | |
IN UINT16 MenuIndex | |
); | |
/** | |
This function update the "BootNext" EFI Variable. If there is no "BootNex" specified in BMM, | |
this EFI Variable is deleted. | |
It also update the BMM context data specified the "BootNext" value. | |
@param CallbackData The BMM context data. | |
@retval EFI_SUCCESS The function complete successfully. | |
@return The EFI variable can not be saved. See gRT->SetVariable for detail return information. | |
**/ | |
EFI_STATUS | |
Var_UpdateBootNext ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
This function update the "BootOrder" EFI Variable based on BMM Formset's NV map. It then refresh | |
BootOptionMenu with the new "BootOrder" list. | |
@param CallbackData The BMM context data. | |
@retval EFI_SUCCESS The function complete successfully. | |
@retval EFI_OUT_OF_RESOURCES Not enough memory to complete the function. | |
@return not The EFI variable can not be saved. See gRT->SetVariable for detail return information. | |
**/ | |
EFI_STATUS | |
Var_UpdateBootOrder ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
This function update the "DriverOrder" EFI Variable based on | |
BMM Formset's NV map. It then refresh DriverOptionMenu | |
with the new "DriverOrder" list. | |
@param CallbackData The BMM context data. | |
@retval EFI_SUCCESS The function complete successfully. | |
@retval EFI_OUT_OF_RESOURCES Not enough memory to complete the function. | |
@return The EFI variable can not be saved. See gRT->SetVariable for detail return information. | |
**/ | |
EFI_STATUS | |
Var_UpdateDriverOrder ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Update the Text Mode of Console. | |
@param CallbackData The context data for BMM. | |
@retval EFI_SUCCSS If the Text Mode of Console is updated. | |
@return Other value if the Text Mode of Console is not updated. | |
**/ | |
EFI_STATUS | |
Var_UpdateConMode ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
// | |
// Following are page create and refresh functions | |
// | |
/** | |
Create the global UpdateData structure. | |
**/ | |
VOID | |
CreateUpdateData ( | |
VOID | |
); | |
/** | |
Refresh the global UpdateData structure. | |
**/ | |
VOID | |
RefreshUpdateData ( | |
VOID | |
); | |
/** | |
Clean up the dynamic opcode at label and form specified by | |
both LabelId. | |
@param LabelId It is both the Form ID and Label ID for | |
opcode deletion. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
CleanUpPage ( | |
IN UINT16 LabelId, | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Create a lit of boot option from global BootOptionMenu. It | |
allow user to delete the boot option. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdateBootDelPage ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Create a lit of driver option from global DriverMenu. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdateDrvAddHandlePage ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Create a lit of driver option from global DriverOptionMenu. It | |
allow user to delete the driver option. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdateDrvDelPage ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Prepare the page to allow user to add description for a Driver Option. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdateDriverAddHandleDescPage ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Dispatch the correct update page function to call based on the UpdatePageId. | |
@param UpdatePageId The form ID. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdatePageBody ( | |
IN UINT16 UpdatePageId, | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Create the dynamic page which allows user to set the property such as Baud Rate, Data Bits, | |
Parity, Stop Bits, Terminal Type. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdateTerminalPage ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Refresh the text mode page | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdateConModePage ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Create a list of Goto Opcode for all terminal devices logged | |
by TerminaMenu. This list will be inserted to form FORM_CON_COM_SETUP_ID. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
UpdateConCOMPage ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Update add boot/driver option page. | |
@param CallbackData The BMM context data. | |
@param FormId The form ID to be updated. | |
@param DevicePath Device path. | |
**/ | |
VOID | |
UpdateOptionPage ( | |
IN BMM_CALLBACK_DATA *CallbackData, | |
IN EFI_FORM_ID FormId, | |
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath | |
); | |
/** | |
Function deletes the variable specified by VarName and VarGuid. | |
@param VarName A Null-terminated Unicode string that is | |
the name of the vendor's variable. | |
@param VarGuid A unique identifier for the vendor. | |
@retval EFI_SUCCESS The variable was found and removed | |
@retval EFI_UNSUPPORTED The variable store was inaccessible | |
@retval EFI_OUT_OF_RESOURCES The temporary buffer was not available | |
@retval EFI_NOT_FOUND The variable was not found | |
**/ | |
EFI_STATUS | |
EfiLibDeleteVariable ( | |
IN CHAR16 *VarName, | |
IN EFI_GUID *VarGuid | |
); | |
/** | |
Function is used to determine the number of device path instances | |
that exist in a device path. | |
@param DevicePath A pointer to a device path data structure. | |
@return This function counts and returns the number of device path instances | |
in DevicePath. | |
**/ | |
UINTN | |
EfiDevicePathInstanceCount ( | |
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath | |
); | |
/** | |
Get a string from the Data Hub record based on | |
a device path. | |
@param DevPath The device Path. | |
@return A string located from the Data Hub records based on | |
the device path. | |
@retval NULL If failed to get the String from Data Hub. | |
**/ | |
UINT16 * | |
EfiLibStrFromDatahub ( | |
IN EFI_DEVICE_PATH_PROTOCOL *DevPath | |
); | |
/** | |
Get the index number (#### in Boot####) for the boot option pointed to a BBS legacy device type | |
specified by DeviceType. | |
@param DeviceType The legacy device type. It can be floppy, network, harddisk, cdrom, | |
etc. | |
@param OptionIndex Returns the index number (#### in Boot####). | |
@param OptionSize Return the size of the Boot### variable. | |
**/ | |
VOID * | |
GetLegacyBootOptionVar ( | |
IN UINTN DeviceType, | |
OUT UINTN *OptionIndex, | |
OUT UINTN *OptionSize | |
); | |
/** | |
Discard all changes done to the BMM pages such as Boot Order change, | |
Driver order change. | |
@param Private The BMM context data. | |
@param CurrentFakeNVMap The current Fack NV Map. | |
**/ | |
VOID | |
DiscardChangeHandler ( | |
IN BMM_CALLBACK_DATA *Private, | |
IN BMM_FAKE_NV_DATA *CurrentFakeNVMap | |
); | |
/** | |
This function is to clean some useless data before submit changes. | |
@param Private The BMM context data. | |
**/ | |
VOID | |
CleanUselessBeforeSubmit ( | |
IN BMM_CALLBACK_DATA *Private | |
); | |
/** | |
Dispatch the display to the next page based on NewPageId. | |
@param Private The BMM context data. | |
@param NewPageId The original page ID. | |
**/ | |
VOID | |
UpdatePageId ( | |
BMM_CALLBACK_DATA *Private, | |
UINT16 NewPageId | |
); | |
/** | |
Remove the installed BootMaint and FileExplorer HiiPackages. | |
**/ | |
VOID | |
FreeBMPackage ( | |
VOID | |
); | |
/** | |
Install BootMaint and FileExplorer HiiPackages. | |
**/ | |
VOID | |
InitBootMaintenance ( | |
VOID | |
); | |
/** | |
Initialize console input device check box to ConsoleInCheck[MAX_MENU_NUMBER] | |
in BMM_FAKE_NV_DATA structure. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
GetConsoleInCheck ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Initialize console output device check box to ConsoleOutCheck[MAX_MENU_NUMBER] | |
in BMM_FAKE_NV_DATA structure. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
GetConsoleOutCheck ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Initialize standard error output device check box to ConsoleErrCheck[MAX_MENU_NUMBER] | |
in BMM_FAKE_NV_DATA structure. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
GetConsoleErrCheck ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
Initialize terminal attributes (baudrate, data rate, stop bits, parity and terminal type) | |
to BMM_FAKE_NV_DATA structure. | |
@param CallbackData The BMM context data. | |
**/ | |
VOID | |
GetTerminalAttribute ( | |
IN BMM_CALLBACK_DATA *CallbackData | |
); | |
/** | |
This function will change video resolution and text mode | |
according to defined setup mode or defined boot mode | |
@param IsSetupMode Indicate mode is changed to setup mode or boot mode. | |
@retval EFI_SUCCESS Mode is changed successfully. | |
@retval Others Mode failed to be changed. | |
**/ | |
EFI_STATUS | |
BmmSetConsoleMode ( | |
BOOLEAN IsSetupMode | |
); | |
/** | |
This function converts an input device structure to a Unicode string. | |
@param DevPath A pointer to the device path structure. | |
@return A new allocated Unicode string that represents the device path. | |
**/ | |
CHAR16 * | |
UiDevicePathToStr ( | |
IN EFI_DEVICE_PATH_PROTOCOL *DevPath | |
); | |
/** | |
Extract filename from device path. The returned buffer is allocated using AllocateCopyPool. | |
The caller is responsible for freeing the allocated buffer using FreePool(). | |
@param DevicePath Device path. | |
@return A new allocated string that represents the file name. | |
**/ | |
CHAR16 * | |
ExtractFileNameFromDevicePath ( | |
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath | |
); | |
/** | |
This function allows a caller to extract the current configuration for one | |
or more named elements from the target driver. | |
@param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. | |
@param Request A null-terminated Unicode string in <ConfigRequest> format. | |
@param Progress On return, points to a character in the Request string. | |
Points to the string's null terminator if request was successful. | |
Points to the most recent '&' before the first failing name/value | |
pair (or the beginning of the string if the failure is in the | |
first name/value pair) if the request was not successful. | |
@param Results A null-terminated Unicode string in <ConfigAltResp> format which | |
has all values filled in for the names in the Request string. | |
String to be allocated by the called function. | |
@retval EFI_SUCCESS The Results is filled with the requested values. | |
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the results. | |
@retval EFI_INVALID_PARAMETER Request is NULL, illegal syntax, or unknown name. | |
@retval EFI_NOT_FOUND Routing data doesn't match any storage in this driver. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
BootMaintExtractConfig ( | |
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, | |
IN CONST EFI_STRING Request, | |
OUT EFI_STRING *Progress, | |
OUT EFI_STRING *Results | |
); | |
/** | |
This function applies changes in a driver's configuration. | |
Input is a Configuration, which has the routing data for this | |
driver followed by name / value configuration pairs. The driver | |
must apply those pairs to its configurable storage. If the | |
driver's configuration is stored in a linear block of data | |
and the driver's name / value pairs are in <BlockConfig> | |
format, it may use the ConfigToBlock helper function (above) to | |
simplify the job. Currently not implemented. | |
@param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. | |
@param[in] Configuration A null-terminated Unicode string in | |
<ConfigString> format. | |
@param[out] Progress A pointer to a string filled in with the | |
offset of the most recent '&' before the | |
first failing name / value pair (or the | |
beginn ing of the string if the failure | |
is in the first name / value pair) or | |
the terminating NULL if all was | |
successful. | |
@retval EFI_SUCCESS The results have been distributed or are | |
awaiting distribution. | |
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the | |
parts of the results that must be | |
stored awaiting possible future | |
protocols. | |
@retval EFI_INVALID_PARAMETERS Passing in a NULL for the | |
Results parameter would result | |
in this type of error. | |
@retval EFI_NOT_FOUND Target for the specified routing data | |
was not found. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
BootMaintRouteConfig ( | |
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, | |
IN CONST EFI_STRING Configuration, | |
OUT EFI_STRING *Progress | |
); | |
/** | |
This function processes the results of changes in configuration. | |
@param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. | |
@param Action Specifies the type of action taken by the browser. | |
@param QuestionId A unique value which is sent to the original exporting driver | |
so that it can identify the type of data to expect. | |
@param Type The type of value for the question. | |
@param Value A pointer to the data being sent to the original exporting driver. | |
@param ActionRequest On return, points to the action requested by the callback function. | |
@retval EFI_SUCCESS The callback successfully handled the action. | |
@retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data. | |
@retval EFI_DEVICE_ERROR The variable could not be saved. | |
@retval EFI_UNSUPPORTED The specified Action is not supported by the callback. | |
@retval EFI_INVALID_PARAMETER The parameter of Value or ActionRequest is invalid. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
BootMaintCallback ( | |
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, | |
IN EFI_BROWSER_ACTION Action, | |
IN EFI_QUESTION_ID QuestionId, | |
IN UINT8 Type, | |
IN EFI_IFR_TYPE_VALUE *Value, | |
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest | |
); | |
/** | |
Create boot option base on the input file path info. | |
@param FilePath Point to the file path. | |
@retval TRUE Exit caller function. | |
@retval FALSE Not exit caller function. | |
**/ | |
BOOLEAN | |
EFIAPI | |
CreateBootOptionFromFile ( | |
IN EFI_DEVICE_PATH_PROTOCOL *FilePath | |
); | |
/** | |
Create driver option base on the input file path info. | |
@param FilePath Point to the file path. | |
@retval TRUE Exit caller function. | |
@retval FALSE Not exit caller function. | |
**/ | |
BOOLEAN | |
EFIAPI | |
CreateDriverOptionFromFile ( | |
IN EFI_DEVICE_PATH_PROTOCOL *FilePath | |
); | |
/** | |
Boot the file specified by the input file path info. | |
@param FilePath Point to the file path. | |
@retval TRUE Exit caller function. | |
@retval FALSE Not exit caller function. | |
**/ | |
BOOLEAN | |
EFIAPI | |
BootFromFile ( | |
IN EFI_DEVICE_PATH_PROTOCOL *FilePath | |
); | |
// | |
// Global variable in this program (defined in data.c) | |
// | |
extern BM_MENU_OPTION BootOptionMenu; | |
extern BM_MENU_OPTION DriverOptionMenu; | |
extern BM_MENU_OPTION ConsoleInpMenu; | |
extern BM_MENU_OPTION ConsoleOutMenu; | |
extern BM_MENU_OPTION ConsoleErrMenu; | |
extern BM_MENU_OPTION DriverMenu; | |
extern BM_MENU_OPTION TerminalMenu; | |
extern UINT16 TerminalType[9]; | |
extern COM_ATTR BaudRateList[19]; | |
extern COM_ATTR DataBitsList[4]; | |
extern COM_ATTR ParityList[5]; | |
extern COM_ATTR StopBitsList[3]; | |
extern EFI_GUID TerminalTypeGuid[9]; | |
extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[]; | |
extern UINT16 mFlowControlType[2]; | |
extern UINT32 mFlowControlValue[2]; | |
// | |
// Shared IFR form update data | |
// | |
extern VOID *mStartOpCodeHandle; | |
extern VOID *mEndOpCodeHandle; | |
extern EFI_IFR_GUID_LABEL *mStartLabel; | |
extern EFI_IFR_GUID_LABEL *mEndLabel; | |
extern BMM_CALLBACK_DATA gBootMaintenancePrivate; | |
extern BMM_CALLBACK_DATA *mBmmCallbackInfo; | |
#endif |