/** @file | |
Provide Boot Manager related library APIs. | |
Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.<BR> | |
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _UEFI_BOOT_MANAGER_LIB_H_ | |
#define _UEFI_BOOT_MANAGER_LIB_H_ | |
#include <Protocol/DriverHealth.h> | |
#include <Library/SortLib.h> | |
// | |
// Boot Manager load option library functions. | |
// | |
// | |
// Load Option Type | |
// | |
typedef enum { | |
LoadOptionTypeDriver, | |
LoadOptionTypeSysPrep, | |
LoadOptionTypeBoot, | |
LoadOptionTypePlatformRecovery, | |
LoadOptionTypeMax | |
} EFI_BOOT_MANAGER_LOAD_OPTION_TYPE; | |
typedef enum { | |
LoadOptionNumberMax = 0x10000, | |
LoadOptionNumberUnassigned = LoadOptionNumberMax | |
} EFI_BOOT_MANAGER_LOAD_OPTION_NUMBER; | |
// | |
// Common structure definition for DriverOption and BootOption | |
// | |
typedef struct { | |
// | |
// Data read from UEFI NV variables | |
// | |
UINTN OptionNumber; // #### numerical value, could be LoadOptionNumberUnassigned | |
EFI_BOOT_MANAGER_LOAD_OPTION_TYPE OptionType; // LoadOptionTypeBoot or LoadOptionTypeDriver | |
UINT32 Attributes; // Load Option Attributes | |
CHAR16 *Description; // Load Option Description | |
EFI_DEVICE_PATH_PROTOCOL *FilePath; // Load Option Device Path | |
UINT8 *OptionalData; // Load Option optional data to pass into image | |
UINT32 OptionalDataSize; // Load Option size of OptionalData | |
EFI_GUID VendorGuid; | |
// | |
// Used at runtime | |
// | |
EFI_STATUS Status; // Status returned from boot attempt gBS->StartImage () | |
CHAR16 *ExitData; // Exit data returned from gBS->StartImage () | |
UINTN ExitDataSize; // Size of ExitData | |
} EFI_BOOT_MANAGER_LOAD_OPTION; | |
/** | |
Returns an array of load options based on the EFI variable | |
L"BootOrder"/L"DriverOrder" and the L"Boot####"/L"Driver####" variables impled by it. | |
#### is the hex value of the UINT16 in each BootOrder/DriverOrder entry. | |
@param LoadOptionCount Returns number of entries in the array. | |
@param LoadOptionType The type of the load option. | |
@retval NULL No load options exist. | |
@retval !NULL Array of load option entries. | |
**/ | |
EFI_BOOT_MANAGER_LOAD_OPTION * | |
EFIAPI | |
EfiBootManagerGetLoadOptions ( | |
OUT UINTN *LoadOptionCount, | |
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE LoadOptionType | |
); | |
/** | |
Free an array of load options returned from EfiBootManagerGetLoadOptions(). | |
@param LoadOptions Pointer to the array of load options to free. | |
@param LoadOptionCount Number of array entries in LoadOptions. | |
@return EFI_SUCCESS LoadOptions was freed. | |
@return EFI_INVALID_PARAMETER LoadOptions is NULL. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerFreeLoadOptions ( | |
IN EFI_BOOT_MANAGER_LOAD_OPTION *LoadOptions, | |
IN UINTN LoadOptionCount | |
); | |
/** | |
Initialize a load option. | |
@param Option Pointer to the load option to be initialized. | |
@param OptionNumber Option number of the load option. | |
@param OptionType Type of the load option. | |
@param Attributes Attributes of the load option. | |
@param Description Description of the load option. | |
@param FilePath Device path of the load option. | |
@param OptionalData Optional data of the load option. | |
@param OptionalDataSize Size of the optional data of the load option. | |
@retval EFI_SUCCESS The load option was initialized successfully. | |
@retval EFI_INVALID_PARAMETER Option, Description or FilePath is NULL. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerInitializeLoadOption ( | |
IN OUT EFI_BOOT_MANAGER_LOAD_OPTION *Option, | |
IN UINTN OptionNumber, | |
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE OptionType, | |
IN UINT32 Attributes, | |
IN CHAR16 *Description, | |
IN EFI_DEVICE_PATH_PROTOCOL *FilePath, | |
IN UINT8 *OptionalData, | |
IN UINT32 OptionalDataSize | |
); | |
/** | |
Free a load option created by EfiBootManagerInitializeLoadOption() | |
or EfiBootManagerVariableToLoadOption(). | |
@param LoadOption Pointer to the load option to free. | |
CONCERN: Check Boot#### instead of BootOrder, optimize, spec clarify | |
@return EFI_SUCCESS LoadOption was freed. | |
@return EFI_INVALID_PARAMETER LoadOption is NULL. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerFreeLoadOption ( | |
IN EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption | |
); | |
/** | |
Initialize the load option from the VariableName. | |
@param VariableName EFI Variable name which could be Boot#### or | |
Driver#### | |
@param LoadOption Pointer to the load option to be initialized | |
@retval EFI_SUCCESS The option was created | |
@retval EFI_INVALID_PARAMETER VariableName or LoadOption is NULL. | |
@retval EFI_NOT_FOUND The variable specified by VariableName cannot be found. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerVariableToLoadOption ( | |
IN CHAR16 *VariableName, | |
IN OUT EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption | |
); | |
/** | |
Create the Boot#### or Driver#### variable from the load option. | |
@param LoadOption Pointer to the load option. | |
@retval EFI_SUCCESS The variable was created. | |
@retval Others Error status returned by RT->SetVariable. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerLoadOptionToVariable ( | |
IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption | |
); | |
/** | |
This function will register the new Boot####, Driver#### or SysPrep#### option. | |
After the *#### is updated, the *Order will also be updated. | |
@param Option Pointer to load option to add. If on input | |
Option->OptionNumber is LoadOptionNumberUnassigned, | |
then on output Option->OptionNumber is updated to | |
the number of the new Boot####, | |
Driver#### or SysPrep#### option. | |
@param Position Position of the new load option to put in the ****Order variable. | |
@retval EFI_SUCCESS The *#### have been successfully registered. | |
@retval EFI_INVALID_PARAMETER The option number exceeds 0xFFFF. | |
@retval EFI_ALREADY_STARTED The option number of Option is being used already. | |
Note: this API only adds new load option, no replacement support. | |
@retval EFI_OUT_OF_RESOURCES There is no free option number that can be used when the | |
option number specified in the Option is LoadOptionNumberUnassigned. | |
@return Status codes of gRT->SetVariable (). | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerAddLoadOptionVariable ( | |
IN OUT EFI_BOOT_MANAGER_LOAD_OPTION *Option, | |
IN UINTN Position | |
); | |
/** | |
Delete the load option according to the OptionNumber and OptionType. | |
Only the BootOrder/DriverOrder is updated to remove the reference of the OptionNumber. | |
@param OptionNumber Option number of the load option. | |
@param OptionType Type of the load option. | |
@retval EFI_NOT_FOUND The load option cannot be found. | |
@retval EFI_SUCCESS The load option was deleted. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerDeleteLoadOptionVariable ( | |
IN UINTN OptionNumber, | |
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE OptionType | |
); | |
/** | |
Sort the load options. The DriverOrder/BootOrder variables will be re-created to | |
reflect the new order. | |
@param OptionType The type of the load option. | |
@param CompareFunction The comparator function pointer. | |
**/ | |
VOID | |
EFIAPI | |
EfiBootManagerSortLoadOptionVariable ( | |
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE OptionType, | |
IN SORT_COMPARE CompareFunction | |
); | |
/** | |
Return the index of the load option in the load option array. | |
The function consider two load options are equal when the | |
OptionType, Attributes, Description, FilePath and OptionalData are equal. | |
@param Key Pointer to the load option to be found. | |
@param Array Pointer to the array of load options to be found. | |
@param Count Number of entries in the Array. | |
@retval -1 Key wasn't found in the Array. | |
@retval 0 ~ Count-1 The index of the Key in the Array. | |
**/ | |
INTN | |
EFIAPI | |
EfiBootManagerFindLoadOption ( | |
IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Key, | |
IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Array, | |
IN UINTN Count | |
); | |
// | |
// Boot Manager hot key library functions. | |
// | |
#pragma pack(1) | |
/// | |
/// EFI Key Option. | |
/// | |
typedef struct { | |
/// | |
/// Specifies options about how the key will be processed. | |
/// | |
EFI_BOOT_KEY_DATA KeyData; | |
/// | |
/// The CRC-32 which should match the CRC-32 of the entire EFI_LOAD_OPTION to | |
/// which BootOption refers. If the CRC-32s do not match this value, then this key | |
/// option is ignored. | |
/// | |
UINT32 BootOptionCrc; | |
/// | |
/// The Boot#### option which will be invoked if this key is pressed and the boot option | |
/// is active (LOAD_OPTION_ACTIVE is set). | |
/// | |
UINT16 BootOption; | |
/// | |
/// The key codes to compare against those returned by the | |
/// EFI_SIMPLE_TEXT_INPUT and EFI_SIMPLE_TEXT_INPUT_EX protocols. | |
/// The number of key codes (0-3) is specified by the EFI_KEY_CODE_COUNT field in KeyOptions. | |
/// | |
EFI_INPUT_KEY Keys[3]; | |
UINT16 OptionNumber; | |
} EFI_BOOT_MANAGER_KEY_OPTION; | |
#pragma pack() | |
/** | |
Start the hot key service so that the key press can trigger the boot option. | |
@param HotkeyTriggered Return the waitable event and it will be signaled | |
when a valid hot key is pressed. | |
@retval EFI_SUCCESS The hot key service is started. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerStartHotkeyService ( | |
IN EFI_EVENT *HotkeyTriggered | |
); | |
// | |
// Modifier for EfiBootManagerAddKeyOptionVariable and EfiBootManagerDeleteKeyOptionVariable | |
// | |
#define EFI_BOOT_MANAGER_SHIFT_PRESSED 0x00000001 | |
#define EFI_BOOT_MANAGER_CONTROL_PRESSED 0x00000002 | |
#define EFI_BOOT_MANAGER_ALT_PRESSED 0x00000004 | |
#define EFI_BOOT_MANAGER_LOGO_PRESSED 0x00000008 | |
#define EFI_BOOT_MANAGER_MENU_KEY_PRESSED 0x00000010 | |
#define EFI_BOOT_MANAGER_SYS_REQ_PRESSED 0x00000020 | |
/** | |
Add the key option. | |
It adds the key option variable and the key option takes affect immediately. | |
@param AddedOption Return the added key option. | |
@param BootOptionNumber The boot option number for the key option. | |
@param Modifier Key shift state. | |
@param ... Parameter list of pointer of EFI_INPUT_KEY. | |
@retval EFI_SUCCESS The key option is added. | |
@retval EFI_ALREADY_STARTED The hot key is already used by certain key option. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerAddKeyOptionVariable ( | |
OUT EFI_BOOT_MANAGER_KEY_OPTION *AddedOption OPTIONAL, | |
IN UINT16 BootOptionNumber, | |
IN UINT32 Modifier, | |
... | |
); | |
/** | |
Delete the Key Option variable and unregister the hot key | |
@param DeletedOption Return the deleted key options. | |
@param Modifier Key shift state. | |
@param ... Parameter list of pointer of EFI_INPUT_KEY. | |
@retval EFI_SUCCESS The key option is deleted. | |
@retval EFI_NOT_FOUND The key option cannot be found. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerDeleteKeyOptionVariable ( | |
IN EFI_BOOT_MANAGER_KEY_OPTION *DeletedOption OPTIONAL, | |
IN UINT32 Modifier, | |
... | |
); | |
/** | |
Register the key option to exit the waiting of the Boot Manager timeout. | |
Platform should ensure that the continue key option isn't conflict with | |
other boot key options. | |
@param Modifier Key shift state. | |
@param ... Parameter list of pointer of EFI_INPUT_KEY. | |
@retval EFI_SUCCESS Successfully register the continue key option. | |
@retval EFI_ALREADY_STARTED The continue key option is already registered. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerRegisterContinueKeyOption ( | |
IN UINT32 Modifier, | |
... | |
); | |
/** | |
Try to boot the boot option triggered by hot key. | |
**/ | |
VOID | |
EFIAPI | |
EfiBootManagerHotkeyBoot ( | |
VOID | |
); | |
// | |
// Boot Manager boot library functions. | |
// | |
/** | |
The function creates boot options for all possible bootable medias in the following order: | |
1. Removable BlockIo - The boot option only points to the removable media | |
device, like USB key, DVD, Floppy etc. | |
2. Fixed BlockIo - The boot option only points to a Fixed blockIo device, | |
like HardDisk. | |
3. Non-BlockIo SimpleFileSystem - The boot option points to a device supporting | |
SimpleFileSystem Protocol, but not supporting BlockIo | |
protocol. | |
4. LoadFile - The boot option points to the media supporting | |
LoadFile protocol. | |
Reference: UEFI Spec chapter 3.3 Boot Option Variables Default Boot Behavior | |
The function won't delete the boot option not added by itself. | |
**/ | |
VOID | |
EFIAPI | |
EfiBootManagerRefreshAllBootOption ( | |
VOID | |
); | |
/** | |
Attempt to boot the EFI boot option. This routine sets L"BootCurent" and | |
signals the EFI ready to boot event. If the device path for the option starts | |
with a BBS device path a legacy boot is attempted. Short form device paths are | |
also supported via this rountine. A device path starting with | |
MEDIA_HARDDRIVE_DP, MSG_USB_WWID_DP, MSG_USB_CLASS_DP gets expaned out | |
to find the first device that matches. If the BootOption Device Path | |
fails the removable media boot algorithm is attempted (\EFI\BOOTIA32.EFI, | |
\EFI\BOOTX64.EFI,... only one file type is tried per processor type) | |
@param BootOption Boot Option to try and boot. | |
On return, BootOption->Status contains the boot status: | |
EFI_SUCCESS BootOption was booted | |
EFI_UNSUPPORTED BootOption isn't supported. | |
EFI_NOT_FOUND The BootOption was not found on the system | |
Others BootOption failed with this error status | |
**/ | |
VOID | |
EFIAPI | |
EfiBootManagerBoot ( | |
IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption | |
); | |
/** | |
Return the boot option corresponding to the Boot Manager Menu. | |
It may automatically create one if the boot option hasn't been created yet. | |
@param BootOption Return the Boot Manager Menu. | |
@retval EFI_SUCCESS The Boot Manager Menu is successfully returned. | |
@retval EFI_NOT_FOUND The Boot Manager Menu cannot be found. | |
@retval others Return status of gRT->SetVariable (). BootOption still points | |
to the Boot Manager Menu even the Status is not EFI_SUCCESS | |
and EFI_NOT_FOUND. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerGetBootManagerMenu ( | |
EFI_BOOT_MANAGER_LOAD_OPTION *BootOption | |
); | |
/** | |
Get the next possible full path pointing to the load option. | |
The routine doesn't guarantee the returned full path points to an existing | |
file, and it also doesn't guarantee the existing file is a valid load option. | |
BmGetNextLoadOptionBuffer() guarantees. | |
@param FilePath The device path pointing to a load option. | |
It could be a short-form device path. | |
@param FullPath The full path returned by the routine in last call. | |
Set to NULL in first call. | |
@return The next possible full path pointing to the load option. | |
Caller is responsible to free the memory. | |
**/ | |
EFI_DEVICE_PATH_PROTOCOL * | |
EFIAPI | |
EfiBootManagerGetNextLoadOptionDevicePath ( | |
IN EFI_DEVICE_PATH_PROTOCOL *FilePath, | |
IN EFI_DEVICE_PATH_PROTOCOL *FullPath | |
); | |
/** | |
Get the load option by its device path. | |
@param FilePath The device path pointing to a load option. | |
It could be a short-form device path. | |
@param FullPath Return the full device path of the load option after | |
short-form device path expanding. | |
Caller is responsible to free it. | |
@param FileSize Return the load option size. | |
@return The load option buffer. Caller is responsible to free the memory. | |
**/ | |
VOID * | |
EFIAPI | |
EfiBootManagerGetLoadOptionBuffer ( | |
IN EFI_DEVICE_PATH_PROTOCOL *FilePath, | |
OUT EFI_DEVICE_PATH_PROTOCOL **FullPath, | |
OUT UINTN *FileSize | |
); | |
/** | |
The function enumerates all the legacy boot options, creates them and | |
registers them in the BootOrder variable. | |
**/ | |
typedef | |
VOID | |
(EFIAPI *EFI_BOOT_MANAGER_REFRESH_LEGACY_BOOT_OPTION)( | |
VOID | |
); | |
/** | |
The function boots a legacy boot option. | |
**/ | |
typedef | |
VOID | |
(EFIAPI *EFI_BOOT_MANAGER_LEGACY_BOOT)( | |
IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption | |
); | |
/** | |
The function registers the legacy boot support capabilities. | |
@param RefreshLegacyBootOption The function pointer to create all the legacy boot options. | |
@param LegacyBoot The function pointer to boot the legacy boot option. | |
**/ | |
VOID | |
EFIAPI | |
EfiBootManagerRegisterLegacyBootSupport ( | |
EFI_BOOT_MANAGER_REFRESH_LEGACY_BOOT_OPTION RefreshLegacyBootOption, | |
EFI_BOOT_MANAGER_LEGACY_BOOT LegacyBoot | |
); | |
/** | |
Return the platform provided boot option description for the controller. | |
@param Handle Controller handle. | |
@param DefaultDescription Default boot description provided by core. | |
@return The callee allocated description string | |
or NULL if the handler wants to use DefaultDescription. | |
**/ | |
typedef | |
CHAR16 * | |
(EFIAPI *EFI_BOOT_MANAGER_BOOT_DESCRIPTION_HANDLER)( | |
IN EFI_HANDLE Handle, | |
IN CONST CHAR16 *DefaultDescription | |
); | |
/** | |
Register the platform provided boot description handler. | |
@param Handler The platform provided boot description handler | |
@retval EFI_SUCCESS The handler was registered successfully. | |
@retval EFI_ALREADY_STARTED The handler was already registered. | |
@retval EFI_OUT_OF_RESOURCES There is not enough resource to perform the registration. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerRegisterBootDescriptionHandler ( | |
IN EFI_BOOT_MANAGER_BOOT_DESCRIPTION_HANDLER Handler | |
); | |
// | |
// Boot Manager connect and disconnect library functions | |
// | |
/** | |
This function will connect all the system driver to controller | |
first, and then special connect the default console, this make | |
sure all the system controller available and the platform default | |
console connected. | |
**/ | |
VOID | |
EFIAPI | |
EfiBootManagerConnectAll ( | |
VOID | |
); | |
/** | |
This function will create all handles associate with every device | |
path node. If the handle associate with one device path node can not | |
be created successfully, then still give chance to do the dispatch, | |
which load the missing drivers if possible. | |
@param DevicePathToConnect The device path which will be connected, it can be | |
a multi-instance device path | |
@param MatchingHandle Return the controller handle closest to the DevicePathToConnect | |
@retval EFI_SUCCESS All handles associate with every device path node | |
have been created. | |
@retval EFI_OUT_OF_RESOURCES There is no resource to create new handles. | |
@retval EFI_NOT_FOUND Create the handle associate with one device path | |
node failed. | |
@retval EFI_SECURITY_VIOLATION The user has no permission to start UEFI device | |
drivers on the DevicePath. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerConnectDevicePath ( | |
IN EFI_DEVICE_PATH_PROTOCOL *DevicePathToConnect, | |
OUT EFI_HANDLE *MatchingHandle OPTIONAL | |
); | |
/** | |
This function will disconnect all current system handles. | |
gBS->DisconnectController() is invoked for each handle exists in system handle buffer. | |
If handle is a bus type handle, all childrens also are disconnected recursively by | |
gBS->DisconnectController(). | |
**/ | |
VOID | |
EFIAPI | |
EfiBootManagerDisconnectAll ( | |
VOID | |
); | |
// | |
// Boot Manager console library functions | |
// | |
typedef enum { | |
ConIn, | |
ConOut, | |
ErrOut, | |
ConInDev, | |
ConOutDev, | |
ErrOutDev, | |
ConsoleTypeMax | |
} CONSOLE_TYPE; | |
/** | |
This function will connect all the console devices base on the console | |
device variable ConIn, ConOut and ErrOut. | |
@retval EFI_DEVICE_ERROR All the consoles were not connected due to an error. | |
@retval EFI_SUCCESS Success connect any one instance of the console | |
device path base on the variable ConVarName. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerConnectAllDefaultConsoles ( | |
VOID | |
); | |
/** | |
This function updates the console variable based on ConVarName. It can | |
add or remove one specific console device path from the variable | |
@param ConsoleType ConIn, ConOut, ErrOut, ConInDev, ConOutDev or ErrOutDev. | |
@param CustomizedConDevicePath The console device path to be added to | |
the console variable. Cannot be multi-instance. | |
@param ExclusiveDevicePath The console device path to be removed | |
from the console variable. Cannot be multi-instance. | |
@retval EFI_UNSUPPORTED The added device path is the same as a removed one. | |
@retval EFI_SUCCESS Successfully added or removed the device path from the | |
console variable. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerUpdateConsoleVariable ( | |
IN CONSOLE_TYPE ConsoleType, | |
IN EFI_DEVICE_PATH_PROTOCOL *CustomizedConDevicePath, | |
IN EFI_DEVICE_PATH_PROTOCOL *ExclusiveDevicePath | |
); | |
/** | |
Connect the console device base on the variable ConVarName, if | |
device path of the ConVarName is multi-instance device path, if | |
anyone of the instances is connected success, then this function | |
will return success. | |
@param ConsoleType ConIn, ConOut or ErrOut. | |
@retval EFI_NOT_FOUND There is not any console devices connected | |
success | |
@retval EFI_SUCCESS Success connect any one instance of the console | |
device path base on the variable ConVarName. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerConnectConsoleVariable ( | |
IN CONSOLE_TYPE ConsoleType | |
); | |
/** | |
Query all the children of VideoController and return the device paths of all the | |
children that support GraphicsOutput protocol. | |
@param VideoController PCI handle of video controller. | |
@return Device paths of all the children that support GraphicsOutput protocol. | |
**/ | |
EFI_DEVICE_PATH_PROTOCOL * | |
EFIAPI | |
EfiBootManagerGetGopDevicePath ( | |
IN EFI_HANDLE VideoController | |
); | |
/** | |
Connect the platform active active video controller. | |
@param VideoController PCI handle of video controller. | |
@retval EFI_NOT_FOUND There is no active video controller. | |
@retval EFI_SUCCESS The video controller is connected. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerConnectVideoController ( | |
EFI_HANDLE VideoController OPTIONAL | |
); | |
// | |
// Boot Manager driver health library functions. | |
// | |
typedef struct { | |
EFI_DRIVER_HEALTH_PROTOCOL *DriverHealth; | |
/// | |
/// Driver relative handles | |
/// | |
EFI_HANDLE DriverHealthHandle; | |
EFI_HANDLE ControllerHandle; | |
EFI_HANDLE ChildHandle; | |
/// | |
/// Driver health messages of the specify Driver | |
/// | |
EFI_DRIVER_HEALTH_HII_MESSAGE *MessageList; | |
/// | |
/// HII relative handles | |
/// | |
EFI_HII_HANDLE HiiHandle; | |
/// | |
/// Driver Health status | |
/// | |
EFI_DRIVER_HEALTH_STATUS HealthStatus; | |
} EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO; | |
/** | |
Return all the Driver Health information. | |
When the cumulative health status of all the controllers managed by the | |
driver who produces the EFI_DRIVER_HEALTH_PROTOCOL is healthy, only one | |
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO entry is created for such | |
EFI_DRIVER_HEALTH_PROTOCOL instance. | |
Otherwise, every controller creates one EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO | |
entry. Additionally every child controller creates one | |
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO entry if the driver is a bus driver. | |
@param Count Return the count of the Driver Health information. | |
@retval NULL No Driver Health information is returned. | |
@retval !NULL Pointer to the Driver Health information array. | |
**/ | |
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO * | |
EFIAPI | |
EfiBootManagerGetDriverHealthInfo ( | |
UINTN *Count | |
); | |
/** | |
Free the Driver Health information array. | |
@param DriverHealthInfo Pointer to array of the Driver Health information. | |
@param Count Count of the array. | |
@retval EFI_SUCCESS The array is freed. | |
@retval EFI_INVALID_PARAMETER The array is NULL. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerFreeDriverHealthInfo ( | |
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo, | |
UINTN Count | |
); | |
/** | |
Process (load and execute) the load option. | |
@param LoadOption Pointer to the load option. | |
@retval EFI_INVALID_PARAMETER The load option type is invalid, | |
or the load option file path doesn't point to a valid file. | |
@retval EFI_UNSUPPORTED The load option type is of LoadOptionTypeBoot. | |
@retval EFI_SUCCESS The load option is inactive, or successfully loaded and executed. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerProcessLoadOption ( | |
EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption | |
); | |
/** | |
Check whether the VariableName is a valid load option variable name | |
and return the load option type and option number. | |
@param VariableName The name of the load option variable. | |
@param OptionType Return the load option type. | |
@param OptionNumber Return the load option number. | |
@retval TRUE The variable name is valid; The load option type and | |
load option number are returned. | |
@retval FALSE The variable name is NOT valid. | |
**/ | |
BOOLEAN | |
EFIAPI | |
EfiBootManagerIsValidLoadOptionVariableName ( | |
IN CHAR16 *VariableName, | |
OUT EFI_BOOT_MANAGER_LOAD_OPTION_TYPE *OptionType OPTIONAL, | |
OUT UINT16 *OptionNumber OPTIONAL | |
); | |
/** | |
Dispatch the deferred images that are returned from all DeferredImageLoad instances. | |
@retval EFI_SUCCESS At least one deferred image is loaded successfully and started. | |
@retval EFI_NOT_FOUND There is no deferred image. | |
@retval EFI_ACCESS_DENIED There are deferred images but all of them are failed to load. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
EfiBootManagerDispatchDeferredImages ( | |
VOID | |
); | |
#endif |