mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-27 12:15:19 +01:00
7c0aa811ec
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
1728 lines
49 KiB
C
1728 lines
49 KiB
C
/** @file
|
|
Header file for boot maintenance module.
|
|
|
|
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
|
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.
|
|
|
|
**/
|
|
|
|
#ifndef _BOOT_MAINT_H_
|
|
#define _BOOT_MAINT_H_
|
|
|
|
#include "Bds.h"
|
|
#include "BBSsupport.h"
|
|
#include "FormGuid.h"
|
|
#include "FrontPage.h"
|
|
|
|
//
|
|
// Constants which are variable names used to access variables
|
|
//
|
|
#define VAR_CON_OUT_MODE L"ConOutMode"
|
|
|
|
//
|
|
// String Constant
|
|
//
|
|
#define STR_FLOPPY L"Floppy Drive #%02x"
|
|
#define STR_HARDDISK L"HardDisk Drive #%02x"
|
|
#define STR_CDROM L"ATAPI CDROM Drive #%02x"
|
|
#define STR_NET L"NET Drive #%02x"
|
|
#define STR_BEV L"BEV Drive #%02x"
|
|
#define STR_FLOPPY_HELP L"Select Floppy Drive #%02x"
|
|
#define STR_HARDDISK_HELP L"Select HardDisk Drive #%02x"
|
|
#define STR_CDROM_HELP L"Select ATAPI CDROM Drive #%02x"
|
|
#define STR_NET_HELP L"NET Drive #%02x"
|
|
#define STR_BEV_HELP L"BEV Drive #%02x"
|
|
|
|
//
|
|
// Variable created with this flag will be "Efi:...."
|
|
//
|
|
#define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
|
|
|
|
extern CHAR16 mFileExplorerStorageName[];
|
|
extern CHAR16 mBootMaintStorageName[];
|
|
//
|
|
// These are the VFR compiler generated data representing our VFR data.
|
|
//
|
|
extern UINT8 BmBin[];
|
|
extern UINT8 FEBin[];
|
|
|
|
//
|
|
// 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)
|
|
|
|
#define FE_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, FeConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
|
|
|
|
//
|
|
// Enumeration type definition
|
|
//
|
|
typedef enum _TYPE_OF_TERMINAL {
|
|
TerminalTypePcAnsi = 0,
|
|
TerminalTypeVt100,
|
|
TerminalTypeVt100Plus,
|
|
TerminalTypeVtUtf8
|
|
} TYPE_OF_TERMINAL;
|
|
|
|
typedef enum _FILE_EXPLORER_STATE {
|
|
FileExplorerStateInActive = 0,
|
|
FileExplorerStateBootFromFile,
|
|
FileExplorerStateAddBootOption,
|
|
FileExplorerStateAddDriverOptionState,
|
|
FileExplorerStateUnknown
|
|
} FILE_EXPLORER_STATE;
|
|
|
|
typedef enum _FILE_EXPLORER_DISPLAY_CONTEXT {
|
|
FileExplorerDisplayFileSystem,
|
|
FileExplorerDisplayDirectory,
|
|
FileExplorerDisplayUnknown
|
|
} FILE_EXPLORER_DISPLAY_CONTEXT;
|
|
|
|
//
|
|
// 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
|
|
#define BM_LEGACY_DEV_CONTEXT_SELECT 0x9
|
|
|
|
//
|
|
// 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_GOTO_OFFSET 0xC000
|
|
#define FILE_OPTION_OFFSET 0x8000
|
|
#define FILE_OPTION_MASK 0x3FFF
|
|
#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_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 LEGACY_FD_VAR_OFFSET VAR_OFFSET (LegacyFD)
|
|
#define LEGACY_HD_VAR_OFFSET VAR_OFFSET (LegacyHD)
|
|
#define LEGACY_CD_VAR_OFFSET VAR_OFFSET (LegacyCD)
|
|
#define LEGACY_NET_VAR_OFFSET VAR_OFFSET (LegacyNET)
|
|
#define LEGACY_BEV_VAR_OFFSET VAR_OFFSET (LegacyBEV)
|
|
|
|
#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_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 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
|
|
|
|
///
|
|
/// 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;
|
|
|
|
#pragma pack(1)
|
|
///
|
|
/// For each legacy boot option in BBS table, a corresponding Boot#### variables is created.
|
|
/// The structure saves the mapping relationship between #### and the index in the BBS table.
|
|
///
|
|
typedef struct {
|
|
UINT16 BootOptionNumber;
|
|
UINT16 BbsIndex;
|
|
UINT16 BbsType;
|
|
} BOOT_OPTION_BBS_MAPPING;
|
|
/*
|
|
typedef struct {
|
|
BBS_TYPE BbsType;
|
|
///
|
|
/// Length = sizeof (UINT16) + SIZEOF (Data)
|
|
///
|
|
UINT16 Length;
|
|
UINT16 Data[1];
|
|
} BM_LEGACY_DEV_ORDER_CONTEXT;
|
|
*/
|
|
#pragma pack()
|
|
|
|
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 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 *BbsEntry;
|
|
UINT16 BbsIndex;
|
|
UINT16 BbsCount;
|
|
CHAR16 *Description;
|
|
} BM_LEGACY_DEVICE_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 {
|
|
//
|
|
// Shared callback data.
|
|
//
|
|
UINTN Signature;
|
|
|
|
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 BmmDriverHandle;
|
|
EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess;
|
|
EFI_FORM_ID BmmCurrentPageId;
|
|
EFI_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 FeDriverHandle;
|
|
EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
|
|
FILE_EXPLORER_STATE FeCurrentState;
|
|
FILE_EXPLORER_DISPLAY_CONTEXT FeDisplayContext;
|
|
FILE_EXPLORER_NV_DATA FeFakeNvData;
|
|
} BMM_CALLBACK_DATA;
|
|
|
|
typedef struct _STRING_LIST_NODE STRING_LIST_NODE;
|
|
|
|
struct _STRING_LIST_NODE {
|
|
EFI_STRING_ID StringToken;
|
|
STRING_LIST_NODE *Next;
|
|
};
|
|
|
|
typedef struct _STRING_DEPOSITORY {
|
|
UINTN TotalNodeNumber;
|
|
STRING_LIST_NODE *CurrentNode;
|
|
STRING_LIST_NODE *ListHead;
|
|
} STRING_DEPOSITORY;
|
|
|
|
//
|
|
// #pragma pack()
|
|
//
|
|
// For initializing File System menu
|
|
//
|
|
|
|
/**
|
|
This function build the FsOptionMenu list which records all
|
|
available file system in the system. They includes all instances
|
|
of EFI_SIMPLE_FILE_SYSTEM_PROTOCOL, all instances of EFI_LOAD_FILE_SYSTEM
|
|
and all type of legacy boot device.
|
|
|
|
@param CallbackData BMM context data
|
|
|
|
@retval EFI_SUCCESS Success find the file system
|
|
@retval EFI_OUT_OF_RESOURCES Can not create menu entry
|
|
|
|
**/
|
|
EFI_STATUS
|
|
BOpt_FindFileSystem (
|
|
IN BMM_CALLBACK_DATA *CallbackData
|
|
);
|
|
|
|
/**
|
|
Find files under current directory
|
|
All files and sub-directories in current directory
|
|
will be stored in DirectoryMenu for future use.
|
|
|
|
@param CallbackData The BMM context data.
|
|
@param MenuEntry The Menu Entry.
|
|
|
|
@retval EFI_SUCCESS Get files from current dir successfully.
|
|
@return Other value if can't get files from current dir.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
BOpt_FindFiles (
|
|
IN BMM_CALLBACK_DATA *CallbackData,
|
|
IN BM_MENU_ENTRY *MenuEntry
|
|
);
|
|
|
|
/**
|
|
|
|
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
|
|
);
|
|
|
|
|
|
/**
|
|
Build the LegacyFDMenu LegacyHDMenu LegacyCDMenu according to LegacyBios.GetBbsInfo().
|
|
|
|
@retval EFI_SUCCESS The function complete successfully.
|
|
@retval EFI_OUT_OF_RESOURCES No enough memory to complete this function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
BOpt_GetLegacyOptions (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Free out resouce allocated from Legacy Boot Options.
|
|
|
|
**/
|
|
VOID
|
|
BOpt_FreeLegacyOptions (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Free resources allocated in Allocate Rountine.
|
|
|
|
@param FreeMenu Menu to be freed
|
|
|
|
**/
|
|
VOID
|
|
BOpt_FreeMenu (
|
|
BM_MENU_OPTION *FreeMenu
|
|
);
|
|
|
|
|
|
/**
|
|
|
|
Append file name to existing file name.
|
|
|
|
@param Str1 The existing file name
|
|
@param Str2 The file name to be appended
|
|
|
|
@return Allocate a new string to hold the appended result.
|
|
Caller is responsible to free the returned string.
|
|
|
|
**/
|
|
CHAR16*
|
|
BOpt_AppendFileName (
|
|
IN CHAR16 *Str1,
|
|
IN CHAR16 *Str2
|
|
);
|
|
|
|
/**
|
|
|
|
Check whether current FileName point to a valid
|
|
Efi Image File.
|
|
|
|
@param FileName File need to be checked.
|
|
|
|
@retval TRUE Is Efi Image
|
|
@retval FALSE Not a valid Efi Image
|
|
|
|
**/
|
|
BOOLEAN
|
|
BOpt_IsEfiImageName (
|
|
IN UINT16 *FileName
|
|
);
|
|
|
|
/**
|
|
|
|
Check whether current FileName point to a valid Efi Application
|
|
|
|
@param Dir Pointer to current Directory
|
|
@param FileName Pointer to current File name.
|
|
|
|
@retval TRUE Is a valid Efi Application
|
|
@retval FALSE not a valid Efi Application
|
|
|
|
**/
|
|
BOOLEAN
|
|
BOpt_IsEfiApp (
|
|
IN EFI_FILE_HANDLE Dir,
|
|
IN UINT16 *FileName
|
|
);
|
|
|
|
/**
|
|
|
|
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
|
|
);
|
|
|
|
//
|
|
// 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.
|
|
@param NvRamMap The file explorer formset internal state.
|
|
|
|
@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,
|
|
IN FILE_EXPLORER_NV_DATA *NvRamMap
|
|
);
|
|
|
|
/**
|
|
Delete Boot Option that represent a Deleted state in BootOptionMenu.
|
|
After deleting this boot option, call Var_ChangeBootOrder to
|
|
make sure BootOrder is in valid state.
|
|
|
|
@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
|
|
);
|
|
|
|
/**
|
|
After any operation on Boot####, there will be a discrepancy in BootOrder.
|
|
Since some are missing but in BootOrder, while some are present but are
|
|
not reflected by BootOrder. Then a function rebuild BootOrder from
|
|
scratch by content from BootOptionMenu is needed.
|
|
|
|
@retval EFI_SUCCESS The boot order is updated successfully.
|
|
@return other than EFI_SUCCESS if failed to change the "BootOrder" EFI Variable.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
Var_ChangeBootOrder (
|
|
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 BootOptionMenu.
|
|
After deleting this Driver option, call Var_ChangeDriverOrder to
|
|
make sure DriverOrder is in valid state.
|
|
|
|
@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
|
|
);
|
|
|
|
/**
|
|
After any operation on Driver####, there will be a discrepancy in
|
|
DriverOrder. Since some are missing but in DriverOrder, while some
|
|
are present but are not reflected by DriverOrder. Then a function
|
|
rebuild DriverOrder from scratch by content from DriverOptionMenu is
|
|
needed.
|
|
|
|
@retval EFI_SUCCESS The driver order is updated successfully.
|
|
@return other than EFI_SUCCESS if failed to set the "DriverOrder" EFI Variable.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
Var_ChangeDriverOrder (
|
|
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
|
|
);
|
|
|
|
/**
|
|
Update the device path of "ConOut", "ConIn" and "ErrOut" based on the new BaudRate, Data Bits,
|
|
parity and stop Bits set.
|
|
|
|
**/
|
|
VOID
|
|
Var_UpdateAllConsoleOption (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
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 legacy BBS boot option. VAR_LEGACY_DEV_ORDER and gEfiLegacyDevOrderVariableGuid EFI Variable
|
|
is udpated with the new Legacy Boot order. The EFI Variable of "Boot####" and gEfiGlobalVariableGuid
|
|
is also updated.
|
|
|
|
@param CallbackData The context data for BMM.
|
|
|
|
@return EFI_SUCCESS The function completed successfully.
|
|
@retval EFI_NOT_FOUND If VAR_LEGACY_DEV_ORDER and gEfiLegacyDevOrderVariableGuid EFI Variable can not be found.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
Var_UpdateBBSOption (
|
|
IN BMM_CALLBACK_DATA *CallbackData,
|
|
IN EFI_FORM_ID FormId
|
|
);
|
|
|
|
/**
|
|
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
|
|
//
|
|
/**
|
|
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 to allow user to set the "BootNext" vaule.
|
|
|
|
@param CallbackData The BMM context data.
|
|
**/
|
|
VOID
|
|
UpdateBootNextPage (
|
|
IN BMM_CALLBACK_DATA *CallbackData
|
|
);
|
|
|
|
/**
|
|
Create the dynamic page to allow user to set the "TimeOut" vaule.
|
|
|
|
@param CallbackData The BMM context data.
|
|
**/
|
|
VOID
|
|
UpdateTimeOutPage (
|
|
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
|
|
);
|
|
|
|
/**
|
|
Create a dynamic page so that Legacy Device boot order
|
|
can be set for specified device type.
|
|
|
|
@param UpdatePageId The form ID. It also spefies the legacy device type.
|
|
@param CallbackData The BMM context data.
|
|
**/
|
|
VOID
|
|
UpdateSetLegacyDeviceOrderPage (
|
|
IN UINT16 UpdatePageId,
|
|
IN BMM_CALLBACK_DATA *CallbackData
|
|
);
|
|
|
|
|
|
/**
|
|
Function opens and returns a file handle to the root directory of a volume.
|
|
|
|
@param DeviceHandle A handle for a device
|
|
@return A valid file handle or NULL is returned
|
|
**/
|
|
EFI_FILE_HANDLE
|
|
EfiLibOpenRoot (
|
|
IN EFI_HANDLE DeviceHandle
|
|
);
|
|
|
|
/**
|
|
Function gets the file system information from an open file descriptor,
|
|
and stores it in a buffer allocated from pool.
|
|
|
|
@param FHand The file handle.
|
|
|
|
@return A pointer to a buffer with file information.
|
|
NULL is returned if failed to get Vaolume Label Info.
|
|
**/
|
|
EFI_FILE_SYSTEM_VOLUME_LABEL *
|
|
EfiLibFileSystemVolumeLabelInfo (
|
|
IN EFI_FILE_HANDLE FHand
|
|
);
|
|
|
|
/**
|
|
|
|
Function gets the file information from an open file descriptor, and stores it
|
|
in a buffer allocated from pool.
|
|
|
|
@param FHand File Handle.
|
|
|
|
@return A pointer to a buffer with file information or NULL is returned
|
|
|
|
**/
|
|
EFI_FILE_INFO *
|
|
EfiLibFileInfo (
|
|
IN EFI_FILE_HANDLE FHand
|
|
);
|
|
/**
|
|
|
|
Function gets the file system information from an open file descriptor, and stores it
|
|
in a buffer allocated from pool.
|
|
|
|
@param FHand File Handle.
|
|
|
|
@return A pointer to a buffer with file information or NULL is returned
|
|
|
|
**/
|
|
|
|
EFI_FILE_SYSTEM_INFO *
|
|
EfiLibFileSystemInfo (
|
|
IN EFI_FILE_HANDLE FHand
|
|
);
|
|
/**
|
|
Find the first instance of this Protocol in the system and return it's interface.
|
|
|
|
@param ProtocolGuid Provides the protocol to search for
|
|
@param Interface On return, a pointer to the first interface
|
|
that matches ProtocolGuid
|
|
|
|
@retval EFI_SUCCESS A protocol instance matching ProtocolGuid was found
|
|
@retval EFI_NOT_FOUND No protocol instances were found that match ProtocolGuid
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EfiLibLocateProtocol (
|
|
IN EFI_GUID *ProtocolGuid,
|
|
OUT VOID **Interface
|
|
);
|
|
|
|
/**
|
|
Adjusts the size of a previously allocated buffer.
|
|
|
|
@param OldPool A pointer to the buffer whose size is being adjusted.
|
|
@param OldSize The size of the current buffer.
|
|
@param NewSize The size of the new buffer.
|
|
|
|
@return The newly allocated buffer. if NULL, allocation failed.
|
|
|
|
**/
|
|
VOID*
|
|
EfiReallocatePool (
|
|
IN VOID *OldPool,
|
|
IN UINTN OldSize,
|
|
IN UINTN NewSize
|
|
);
|
|
|
|
/**
|
|
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
|
|
);
|
|
|
|
/**
|
|
Duplicate a string.
|
|
|
|
@param Src The source.
|
|
|
|
@return A new string which is duplicated copy of the source.
|
|
@retval NULL If there is not enough memory.
|
|
|
|
**/
|
|
CHAR16 *
|
|
EfiStrDuplicate (
|
|
IN CHAR16 *Src
|
|
);
|
|
|
|
/**
|
|
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
|
|
);
|
|
|
|
/**
|
|
Create string tokens for a menu from its help strings and display strings
|
|
|
|
|
|
@param CallbackData The BMM context data.
|
|
@param HiiHandle Hii Handle of the package to be updated.
|
|
@param MenuOption The Menu whose string tokens need to be created
|
|
|
|
@retval EFI_SUCCESS string tokens created successfully
|
|
@retval others contain some errors
|
|
|
|
**/
|
|
EFI_STATUS
|
|
CreateMenuStringToken (
|
|
IN BMM_CALLBACK_DATA *CallbackData,
|
|
IN EFI_HII_HANDLE HiiHandle,
|
|
IN BM_MENU_OPTION *MenuOption
|
|
);
|
|
|
|
/**
|
|
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
|
|
);
|
|
|
|
/**
|
|
Initialize the Boot Maintenance Utitliy.
|
|
|
|
@retval EFI_SUCCESS utility ended successfully.
|
|
@retval others contain some errors.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InitializeBM (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Start boot maintenance manager
|
|
|
|
@retval EFI_SUCCESS If BMM is invoked successfully.
|
|
@return Other value if BMM return unsuccessfully.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
BdsStartBootMaint (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Intialize all the string depositories.
|
|
|
|
**/
|
|
VOID
|
|
InitializeStringDepository (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Fetch a usable string node from the string depository and return the string token.
|
|
|
|
|
|
@param CallbackData The BMM context data.
|
|
@param StringDepository Pointer of the string depository.
|
|
|
|
@retval EFI_STRING_ID String token.
|
|
|
|
**/
|
|
EFI_STRING_ID
|
|
GetStringTokenFromDepository (
|
|
IN BMM_CALLBACK_DATA *CallbackData,
|
|
IN STRING_DEPOSITORY *StringDepository
|
|
);
|
|
|
|
/**
|
|
Reclaim string depositories by moving the current node pointer to list head..
|
|
**/
|
|
VOID
|
|
ReclaimStringDepository (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Release resource for all the string depositories.
|
|
|
|
**/
|
|
VOID
|
|
CleanUpStringDepository (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Function handling request to apply changes for BMM pages.
|
|
|
|
@param Private Pointer to callback data buffer.
|
|
@param CurrentFakeNVMap Pointer to buffer holding data of various values used by BMM
|
|
@param FormId ID of the form which has sent the request to apply change.
|
|
|
|
@retval EFI_SUCCESS Change successfully applied.
|
|
@retval Other Error occurs while trying to apply changes.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
ApplyChangeHandler (
|
|
IN BMM_CALLBACK_DATA *Private,
|
|
IN BMM_FAKE_NV_DATA *CurrentFakeNVMap,
|
|
IN EFI_FORM_ID FormId
|
|
);
|
|
|
|
/**
|
|
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
|
|
);
|
|
|
|
/**
|
|
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
|
|
);
|
|
|
|
/**
|
|
Boot a file selected by user at File Expoloer of BMM.
|
|
|
|
@param FileContext The file context data, which contains the device path
|
|
of the file to be boot from.
|
|
|
|
@retval EFI_SUCCESS The function completed successfull.
|
|
@return Other value if the boot from the file fails.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
BootThisFile (
|
|
IN BM_FILE_CONTEXT *FileContext
|
|
);
|
|
|
|
/**
|
|
Update the file explower page with the refershed file system.
|
|
|
|
|
|
@param CallbackData BMM context data
|
|
@param KeyValue Key value to identify the type of data to expect.
|
|
|
|
@retval TRUE Inform the caller to create a callback packet to exit file explorer.
|
|
@retval FALSE Indicate that there is no need to exit file explorer.
|
|
|
|
**/
|
|
BOOLEAN
|
|
UpdateFileExplorer (
|
|
IN BMM_CALLBACK_DATA *CallbackData,
|
|
IN UINT16 KeyValue
|
|
);
|
|
|
|
/**
|
|
This function processes the results of changes in configuration.
|
|
When user select a interactive opcode, this callback will be triggered.
|
|
Based on the Question(QuestionId) that triggers the callback, the corresponding
|
|
actions is performed. It handles:
|
|
|
|
1) the addition of boot option.
|
|
2) the addition of driver option.
|
|
3) exit from file browser
|
|
4) update of file content if a dir is selected.
|
|
5) boot the file if a file is selected in "boot from file"
|
|
|
|
|
|
@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.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
FileExplorerCallback (
|
|
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
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
FileExplorerRouteConfig (
|
|
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
|
IN CONST EFI_STRING Configuration,
|
|
OUT EFI_STRING *Progress
|
|
);
|
|
|
|
/**
|
|
Dispatch BMM formset and FileExplorer formset.
|
|
|
|
|
|
@param CallbackData The BMM context data.
|
|
|
|
@retval EFI_SUCCESS If function complete successfully.
|
|
@return Other value if the Setup Browser process BMM's pages and
|
|
return unsuccessfully.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
FormSetDispatcher (
|
|
IN BMM_CALLBACK_DATA *CallbackData
|
|
);
|
|
|
|
/**
|
|
Function returns the value of the specified variable.
|
|
|
|
@param Name A Null-terminated Unicode string that is
|
|
the name of the vendor's variable.
|
|
@param VendorGuid A unique identifier for the vendor.
|
|
|
|
@return The payload of the variable.
|
|
@retval NULL If the variable can't be read.
|
|
|
|
**/
|
|
VOID *
|
|
EfiLibGetVariable (
|
|
IN CHAR16 *Name,
|
|
IN EFI_GUID *VendorGuid
|
|
);
|
|
|
|
/**
|
|
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
|
|
);
|
|
|
|
/**
|
|
Intall BootMaint and FileExplorer HiiPackages.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InitBMPackage (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Remvoe the intalled BootMaint and FileExplorer HiiPackages.
|
|
|
|
**/
|
|
VOID
|
|
FreeBMPackage (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
According to LegacyDevOrder variable to get legacy FD\HD\CD\NET\BEV
|
|
devices list .
|
|
|
|
@param CallbackData The BMM context data.
|
|
**/
|
|
VOID
|
|
GetLegacyDeviceOrder (
|
|
IN BMM_CALLBACK_DATA *CallbackData
|
|
);
|
|
|
|
/**
|
|
|
|
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
|
|
);
|
|
|
|
/**
|
|
|
|
Find the first instance of this Protocol
|
|
in the system and return it's interface.
|
|
|
|
|
|
@param ProtocolGuid Provides the protocol to search for
|
|
@param Interface On return, a pointer to the first interface
|
|
that matches ProtocolGuid
|
|
|
|
@retval EFI_SUCCESS A protocol instance matching ProtocolGuid was found
|
|
@retval EFI_NOT_FOUND No protocol instances were found that match ProtocolGuid
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EfiLibLocateProtocol (
|
|
IN EFI_GUID *ProtocolGuid,
|
|
OUT VOID **Interface
|
|
);
|
|
|
|
//
|
|
// 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 TerminalTypeGuid[4];
|
|
extern EFI_GUID gEfiLegacyDevOrderVariableGuid;
|
|
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 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;
|
|
|
|
#endif
|