mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-27 16:58:09 +01:00
1325 lines
39 KiB
C
1325 lines
39 KiB
C
|
/** @file
|
||
|
Header file for boot maintenance module.
|
||
|
|
||
|
Copyright (c) 2004 - 2018, 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
|
||
|
} 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[5];
|
||
|
extern COM_ATTR BaudRateList[19];
|
||
|
extern COM_ATTR DataBitsList[4];
|
||
|
extern COM_ATTR ParityList[5];
|
||
|
extern COM_ATTR StopBitsList[3];
|
||
|
extern EFI_GUID TerminalTypeGuid[5];
|
||
|
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
|