-/*++\r
+/** @file\r
+ Generic BDS library definition, include the data structure and function.\r
\r
-Copyright (c) 2004 - 2007, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2004 - 2008, Intel Corporation. <BR>\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
\r
-Module Name:\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
- GenericBdsLib.h\r
-\r
-Abstract:\r
-\r
- Generic BDS library definition, include the file and data structure\r
-\r
---*/\r
+**/\r
\r
#ifndef _GENERIC_BDS_LIB_H_\r
#define _GENERIC_BDS_LIB_H_\r
\r
-//\r
-// WQBugBug: These Macro will be handled properly later.\r
-//\r
-//#undef EFI_SPECIFICATION_VERSION\r
-//#define EFI_SPECIFICATION_VERSION 0x0002000A\r
-\r
-#define PI_SPECIFICATION_VERSION 0x00010000\r
-\r
-#include <PiDxe.h>\r
#include <Protocol/HiiDatabase.h>\r
#include <IndustryStandard/PeImage.h>\r
\r
//\r
// Constants which are variable names used to access variables\r
//\r
-#define VarLegacyDevOrder L"LegacyDevOrder"\r
+#define VAR_LEGACY_DEV_ORDER L"LegacyDevOrder"\r
\r
//\r
// Data structures and defines\r
#define LOAD_OPTION_ACTIVE 0x00000001\r
#define LOAD_OPTION_FORCE_RECONNECT 0x00000002\r
\r
-#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)\r
#define LOAD_OPTION_HIDDEN 0x00000008\r
#define LOAD_OPTION_CATEGORY 0x00001F00\r
\r
\r
#define EFI_BOOT_OPTION_SUPPORT_KEY 0x00000001\r
#define EFI_BOOT_OPTION_SUPPORT_APP 0x00000002\r
-#endif\r
\r
#define IS_LOAD_OPTION_TYPE(_c, _Mask) (BOOLEAN) (((_c) & (_Mask)) != 0)\r
\r
//\r
\r
//\r
-// Bds boot relate lib functions\r
+// Bds boot related lib functions\r
//\r
-EFI_STATUS\r
-BdsLibUpdateBootOrderList (\r
- IN LIST_ENTRY *BdsOptionList,\r
- IN CHAR16 *VariableName\r
- );\r
+/**\r
+ Boot from the UEFI spec defined "BootNext" variable.\r
\r
+**/\r
VOID\r
+EFIAPI\r
BdsLibBootNext (\r
VOID\r
);\r
\r
+/**\r
+ Process the boot option follow the UEFI specification and\r
+ special treat the legacy boot option with BBS_DEVICE_PATH.\r
+\r
+ @param Option The boot option need to be processed\r
+ @param DevicePath The device path which describe where to load the\r
+ boot image or the legcy BBS device path to boot\r
+ the legacy OS\r
+ @param ExitDataSize The size of exit data.\r
+ @param ExitData Data returned when Boot image failed.\r
+\r
+ @retval EFI_SUCCESS Boot from the input boot option successfully.\r
+ @retval EFI_NOT_FOUND If the Device Path is not found in the system\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibBootViaBootOption (\r
IN BDS_COMMON_OPTION * Option,\r
IN EFI_DEVICE_PATH_PROTOCOL * DevicePath,\r
OUT CHAR16 **ExitData OPTIONAL\r
);\r
\r
+\r
+/**\r
+ This function will enumerate all possible boot device in the system,\r
+ it will only excute once of every boot.\r
+\r
+ @param BdsBootOptionList The header of the link list which indexed all\r
+ current boot options\r
+\r
+ @retval EFI_SUCCESS Finished all the boot device enumerate and create\r
+ the boot option base on that boot device\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibEnumerateAllBootOption (\r
- IN OUT LIST_ENTRY *BdsBootOptionList\r
+ IN OUT LIST_ENTRY *BdsBootOptionList\r
);\r
\r
+/**\r
+ Build the boot option with the handle parsed in\r
+\r
+ @param Handle The handle which present the device path to create\r
+ boot option\r
+ @param BdsBootOptionList The header of the link list which indexed all\r
+ current boot options\r
+ @param String The description of the boot option.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
BdsLibBuildOptionFromHandle (\r
- IN EFI_HANDLE Handle,\r
- IN LIST_ENTRY *BdsBootOptionList,\r
- IN CHAR16 *String\r
+ IN EFI_HANDLE Handle,\r
+ IN LIST_ENTRY *BdsBootOptionList,\r
+ IN CHAR16 *String\r
);\r
\r
+\r
+/**\r
+ Build the on flash shell boot option with the handle parsed in.\r
+\r
+ @param Handle The handle which present the device path to create\r
+ on flash shell boot option\r
+ @param BdsBootOptionList The header of the link list which indexed all\r
+ current boot options\r
+\r
+**/\r
VOID\r
+EFIAPI\r
BdsLibBuildOptionFromShell (\r
- IN EFI_HANDLE Handle,\r
- IN LIST_ENTRY *BdsBootOptionList\r
+ IN EFI_HANDLE Handle,\r
+ IN OUT LIST_ENTRY *BdsBootOptionList\r
);\r
\r
//\r
// Bds misc lib functions\r
//\r
+/**\r
+ Return the default value for system Timeout variable.\r
+\r
+ @return Timeout value.\r
+\r
+**/\r
UINT16\r
+EFIAPI\r
BdsLibGetTimeout (\r
VOID\r
);\r
\r
+/**\r
+ Get boot mode by looking up configuration table and parsing HOB list\r
+\r
+ @param BootMode Boot mode from PEI handoff HOB.\r
+\r
+ @retval EFI_SUCCESS Successfully get boot mode\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibGetBootMode (\r
OUT EFI_BOOT_MODE *BootMode\r
);\r
\r
+\r
+/**\r
+ The function will go through the driver optoin link list, load and start\r
+ every driver the driver optoin device path point to.\r
+\r
+ @param BdsDriverLists The header of the current driver option link list\r
+\r
+**/\r
VOID\r
+EFIAPI\r
BdsLibLoadDrivers (\r
- IN LIST_ENTRY *BdsDriverLists\r
+ IN LIST_ENTRY *BdsDriverLists\r
);\r
\r
+\r
+/**\r
+ Process BootOrder, or DriverOrder variables, by calling\r
+ BdsLibVariableToOption () for each UINT16 in the variables.\r
+\r
+ @param BdsCommonOptionList The header of the option list base on variable\r
+ VariableName\r
+ @param VariableName EFI Variable name indicate the BootOrder or\r
+ DriverOrder\r
+\r
+ @retval EFI_SUCCESS Success create the boot option or driver option\r
+ list\r
+ @retval EFI_OUT_OF_RESOURCES Failed to get the boot option or driver option list\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibBuildOptionFromVar (\r
- IN LIST_ENTRY *BdsCommonOptionList,\r
- IN CHAR16 *VariableName\r
+ IN LIST_ENTRY *BdsCommonOptionList,\r
+ IN CHAR16 *VariableName\r
);\r
\r
-VOID *\r
+/**\r
+ Read the EFI variable (VendorGuid/Name) and return a dynamically allocated\r
+ buffer, and the size of the buffer. If failure return NULL.\r
+\r
+ @param Name String part of EFI variable name\r
+ @param VendorGuid GUID part of EFI variable name\r
+ @param VariableSize Returns the size of the EFI variable that was read\r
+\r
+ @return Dynamically allocated memory that contains a copy of the EFI variable\r
+ Caller is responsible freeing the buffer.\r
+ @retval NULL Variable was not read\r
+\r
+**/\r
+VOID *\r
+EFIAPI\r
BdsLibGetVariableAndSize (\r
IN CHAR16 *Name,\r
IN EFI_GUID *VendorGuid,\r
OUT UINTN *VariableSize\r
);\r
\r
+\r
+/**\r
+ This function prints a series of strings.\r
+\r
+ @param ConOut Pointer to EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL\r
+ @param ... A variable argument list containing series of\r
+ strings, the last string must be NULL.\r
+\r
+ @retval EFI_SUCCESS Success print out the string using ConOut.\r
+ @retval EFI_STATUS Return the status of the ConOut->OutputString ().\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibOutputStrings (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut,\r
...\r
);\r
\r
-BDS_COMMON_OPTION *\r
+/**\r
+ Build the boot#### or driver#### option from the VariableName, the\r
+ build boot#### or driver#### will also be linked to BdsCommonOptionList.\r
+\r
+ @param BdsCommonOptionList The header of the boot#### or driver#### option\r
+ link list\r
+ @param VariableName EFI Variable name indicate if it is boot#### or\r
+ driver####\r
+\r
+ @retval BDS_COMMON_OPTION Get the option just been created\r
+ @retval NULL Failed to get the new option\r
+\r
+**/\r
+BDS_COMMON_OPTION *\r
+EFIAPI\r
BdsLibVariableToOption (\r
- IN OUT LIST_ENTRY *BdsCommonOptionList,\r
- IN CHAR16 *VariableName\r
+ IN OUT LIST_ENTRY *BdsCommonOptionList,\r
+ IN CHAR16 *VariableName\r
);\r
\r
+/**\r
+ This function will register the new boot#### or driver#### option base on\r
+ the VariableName. The new registered boot#### or driver#### will be linked\r
+ to BdsOptionList and also update to the VariableName. After the boot#### or\r
+ driver#### updated, the BootOrder or DriverOrder will also be updated.\r
+\r
+ @param BdsOptionList The header of the boot#### or driver#### link list\r
+ @param DevicePath The device path which the boot#### or driver####\r
+ option present\r
+ @param String The description of the boot#### or driver####\r
+ @param VariableName Indicate if the boot#### or driver#### option\r
+\r
+ @retval EFI_SUCCESS The boot#### or driver#### have been success\r
+ registered\r
+ @retval EFI_STATUS Return the status of gRT->SetVariable ().\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibRegisterNewOption (\r
- IN LIST_ENTRY *BdsOptionList,\r
+ IN LIST_ENTRY *BdsOptionList,\r
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
IN CHAR16 *String,\r
IN CHAR16 *VariableName\r
//\r
// Bds connect or disconnect driver lib funcion\r
//\r
+/**\r
+ Connects all drivers to all controllers.\r
+ This function make sure all the current system driver will manage\r
+ the correspoinding controllers if have. And at the same time, make\r
+ sure all the system controllers have driver to manage it if have.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
BdsLibConnectAllDriversToAllControllers (\r
VOID\r
);\r
\r
+/**\r
+ This function will connect all the system driver to controller\r
+ first, and then special connect the default console, this make\r
+ sure all the system controller avialbe and the platform default\r
+ console connected.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
BdsLibConnectAll (\r
VOID\r
);\r
\r
+/**\r
+ This function will create all handles associate with every device\r
+ path node. If the handle associate with one device path node can not\r
+ be created success, then still give one chance to do the dispatch,\r
+ which load the missing drivers if possible.\r
+\r
+ @param DevicePathToConnect The device path which will be connected, it can be\r
+ a multi-instance device path\r
+\r
+ @retval EFI_SUCCESS All handles associate with every device path node\r
+ have been created\r
+ @retval EFI_OUT_OF_RESOURCES There is no resource to create new handles\r
+ @retval EFI_NOT_FOUND Create the handle associate with one device path\r
+ node failed\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibConnectDevicePath (\r
IN EFI_DEVICE_PATH_PROTOCOL *DevicePathToConnect\r
);\r
\r
+/**\r
+ This function will connect all current system handles recursively. The\r
+ connection will finish until every handle's child handle created if it have.\r
+\r
+ @retval EFI_SUCCESS All handles and it's child handle have been\r
+ connected\r
+ @retval EFI_STATUS Return the status of gBS->LocateHandleBuffer().\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibConnectAllEfi (\r
VOID\r
);\r
\r
+\r
+/**\r
+ This function will disconnect all current system handles. The disconnection\r
+ will finish until every handle have been disconnected.\r
+\r
+ @retval EFI_SUCCESS All handles have been disconnected\r
+ @retval EFI_STATUS Return the status of gBS->LocateHandleBuffer().\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibDisconnectAllEfi (\r
VOID\r
);\r
\r
//\r
-// Bds console relate lib functions\r
+// Bds console related lib functions\r
//\r
+/**\r
+ This function will search every simpletxt devive in current system,\r
+ and make every simpletxt device as pertantial console device.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
BdsLibConnectAllConsoles (\r
VOID\r
);\r
\r
+\r
+/**\r
+ This function will connect console device base on the console\r
+ device variable ConIn, ConOut and ErrOut.\r
+\r
+ @retval EFI_SUCCESS At least one of the ConIn and ConOut device have\r
+ been connected success.\r
+ @retval EFI_STATUS Return the status of BdsLibConnectConsoleVariable ().\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibConnectAllDefaultConsoles (\r
VOID\r
);\r
\r
+/**\r
+ This function update console variable based on ConVarName, it can\r
+ add or remove one specific console device path from the variable\r
+\r
+ @param ConVarName Console related variable name, ConIn, ConOut,\r
+ ErrOut.\r
+ @param CustomizedConDevicePath The console device path which will be added to\r
+ the console variable ConVarName, this parameter\r
+ can not be multi-instance.\r
+ @param ExclusiveDevicePath The console device path which will be removed\r
+ from the console variable ConVarName, this\r
+ parameter can not be multi-instance.\r
+\r
+ @retval EFI_UNSUPPORTED The added device path is same to the removed one.\r
+ @retval EFI_SUCCESS Success add or remove the device path from the\r
+ console variable.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibUpdateConsoleVariable (\r
IN CHAR16 *ConVarName,\r
IN EFI_DEVICE_PATH_PROTOCOL *CustomizedConDevicePath,\r
IN EFI_DEVICE_PATH_PROTOCOL *ExclusiveDevicePath\r
);\r
\r
+/**\r
+ Connect the console device base on the variable ConVarName, if\r
+ device path of the ConVarName is multi-instance device path, if\r
+ anyone of the instances is connected success, then this function\r
+ will return success.\r
+\r
+ @param ConVarName Console related variable name, ConIn, ConOut,\r
+ ErrOut.\r
+\r
+ @retval EFI_NOT_FOUND There is not any console devices connected\r
+ success\r
+ @retval EFI_SUCCESS Success connect any one instance of the console\r
+ device path base on the variable ConVarName.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibConnectConsoleVariable (\r
IN CHAR16 *ConVarName\r
);\r
\r
//\r
-// Bds device path relate lib functions\r
+// Bds device path related lib functions\r
//\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-BdsLibUnpackDevicePath (\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath\r
- );\r
+/**\r
+ Delete the instance in Multi which matches partly with Single instance\r
\r
+ @param Multi A pointer to a multi-instance device path data\r
+ structure.\r
+ @param Single A pointer to a single-instance device path data\r
+ structure.\r
+\r
+ @return This function will remove the device path instances in Multi which partly\r
+ match with the Single, and return the result device path. If there is no\r
+ remaining device path as a result, this function will return NULL.\r
+\r
+**/\r
EFI_DEVICE_PATH_PROTOCOL *\r
+EFIAPI\r
BdsLibDelPartMatchInstance (\r
IN EFI_DEVICE_PATH_PROTOCOL *Multi,\r
IN EFI_DEVICE_PATH_PROTOCOL *Single\r
);\r
\r
+/**\r
+ Function compares a device path data structure to that of all the nodes of a\r
+ second device path instance.\r
+\r
+ @param Multi A pointer to a multi-instance device path data\r
+ structure.\r
+ @param Single A pointer to a single-instance device path data\r
+ structure.\r
+\r
+ @retval TRUE If the Single device path is contained within Multi device path.\r
+ @retval FALSE The Single device path is not match within Multi device path.\r
+\r
+**/\r
BOOLEAN\r
+EFIAPI\r
BdsLibMatchDevicePaths (\r
IN EFI_DEVICE_PATH_PROTOCOL *Multi,\r
IN EFI_DEVICE_PATH_PROTOCOL *Single\r
);\r
\r
-CHAR16 *\r
+/**\r
+ This function converts an input device structure to a Unicode string.\r
+\r
+ @param DevPath A pointer to the device path structure.\r
+\r
+ @return A new allocated Unicode string that represents the device path.\r
+\r
+**/\r
+CHAR16 *\r
+EFIAPI\r
DevicePathToStr (\r
- EFI_DEVICE_PATH_PROTOCOL *DevPath\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevPath\r
);\r
\r
-VOID *\r
-EfiLibGetVariable (\r
- IN CHAR16 *Name,\r
- IN EFI_GUID *VendorGuid\r
- );\r
\r
//\r
// Internal definitions\r
UINT8 VendorDefinedData[1];\r
} VENDOR_DEVICE_PATH_WITH_DATA;\r
\r
-#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
\r
extern EFI_GUID mEfiDevicePathMessagingSASGuid;\r
\r
CHAR16 iSCSITargetName[1];\r
} ISCSI_DEVICE_PATH_WITH_NAME;\r
\r
-#endif\r
-\r
-//\r
-// Internal functions\r
-//\r
-EFI_STATUS\r
-BdsBootByDiskSignatureAndPartition (\r
- IN BDS_COMMON_OPTION * Option,\r
- IN HARDDRIVE_DEVICE_PATH * HardDriveDevicePath,\r
- IN UINT32 LoadOptionsSize,\r
- IN VOID *LoadOptions,\r
- OUT UINTN *ExitDataSize,\r
- OUT CHAR16 **ExitData OPTIONAL\r
- );\r
\r
//\r
// Notes: EFI 64 shadow all option rom\r
//\r
#if defined (MDE_CPU_IPF)\r
#define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom ();\r
-VOID\r
-ShadowAllOptionRom();\r
#else\r
#define EFI64_SHADOW_ALL_LEGACY_ROM()\r
#endif\r
\r
+/**\r
+ Shadow all Legacy OptionRom. \r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+ShadowAllOptionRom (\r
+ VOID\r
+ );\r
+\r
//\r
// BBS support macros and functions\r
//\r
#define REFRESH_LEGACY_BOOT_OPTIONS\r
#endif\r
\r
+/**\r
+ Delete all the invalid legacy boot options.\r
+\r
+ @retval EFI_SUCCESS All invalide legacy boot options are deleted.\r
+ @retval EFI_OUT_OF_RESOURCES Fail to allocate necessary memory.\r
+ @retval EFI_NOT_FOUND Fail to retrive variable of boot order.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsDeleteAllInvalidLegacyBootOptions (\r
VOID\r
);\r
\r
+/**\r
+\r
+ Add the legacy boot options from BBS table if they do not exist.\r
+\r
+ @retval EFI_SUCCESS The boot options are added successfully \r
+ or they are already in boot options.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsAddNonExistingLegacyBootOptions (\r
VOID\r
);\r
\r
+/**\r
+\r
+ Add the legacy boot devices from BBS table into \r
+ the legacy device boot order.\r
+\r
+ @retval EFI_SUCCESS The boot devices are added successfully.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsUpdateLegacyDevOrder (\r
VOID\r
);\r
\r
+/**\r
+\r
+ Set the boot priority for BBS entries based on boot option entry and boot order.\r
+\r
+ @param Entry The boot option is to be checked for refresh BBS table.\r
+ \r
+ @retval EFI_SUCCESS The boot priority for BBS entries is refreshed successfully.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsRefreshBbsTableForBoot (\r
IN BDS_COMMON_OPTION *Entry\r
);\r
\r
+/**\r
+\r
+ Delete boot option specified by OptionNumber and adjust the boot order.\r
+\r
+ @param OptionNumber The boot option to be deleted.\r
+ @param BootOrder Boot order list to be adjusted by remove this boot option.\r
+ @param BootOrderSize The size of Boot order list will be modified.\r
+ \r
+ @retval EFI_SUCCESS The boot option is deleted successfully.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsDeleteBootOption (\r
IN UINTN OptionNumber,\r
IN OUT UINT16 *BootOrder,\r
//\r
//The interface functions relate with Setup Browser Reset Reminder feature\r
//\r
+/**\r
+ Enable the setup browser reset reminder feature.\r
+ This routine is used in platform tip. If the platform policy need the feature, use the routine to enable it.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
EnableResetReminderFeature (\r
VOID\r
);\r
\r
+/**\r
+ Disable the setup browser reset reminder feature.\r
+ This routine is used in platform tip. If the platform policy do not want the feature, use the routine to disable it.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
DisableResetReminderFeature (\r
VOID\r
);\r
\r
+/**\r
+ Record the info that a reset is required.\r
+ A module boolean variable is used to record whether a reset is required.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
EnableResetRequired (\r
VOID\r
);\r
\r
+\r
+/**\r
+ Record the info that no reset is required.\r
+ A module boolean variable is used to record whether a reset is required.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
DisableResetRequired (\r
VOID\r
);\r
\r
+/**\r
+ Check whether platform policy enable the reset reminder feature. The default is enabled.\r
+\r
+**/\r
BOOLEAN\r
+EFIAPI\r
IsResetReminderFeatureEnable (\r
VOID\r
);\r
\r
+/**\r
+ Check if user changed any option setting which needs a system reset to be effective.\r
+\r
+**/\r
BOOLEAN\r
+EFIAPI\r
IsResetRequired (\r
VOID\r
);\r
\r
+/**\r
+ Check whether a reset is needed, and finish the reset reminder feature.\r
+ If a reset is needed, Popup a menu to notice user, and finish the feature\r
+ according to the user selection.\r
+\r
+**/\r
VOID\r
+EFIAPI\r
SetupResetReminder (\r
VOID\r
);\r
\r
+\r
+/**\r
+ Get the headers (dos, image, optional header) from an image\r
+\r
+ @param Device SimpleFileSystem device handle\r
+ @param FileName File name for the image\r
+ @param DosHeader Pointer to dos header\r
+ @param Hdr The buffer in which to return the PE32, PE32+, or TE header.\r
+\r
+ @retval EFI_SUCCESS Successfully get the machine type.\r
+ @retval EFI_NOT_FOUND The file is not found.\r
+ @retval EFI_LOAD_ERROR File is not a valid image file.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
BdsLibGetImageHeader (\r
IN EFI_HANDLE Device,\r
IN CHAR16 *FileName,\r
OUT EFI_IMAGE_DOS_HEADER *DosHeader,\r
OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-BdsLibGetHiiHandles (\r
-#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)\r
- IN EFI_HII_DATABASE_PROTOCOL *HiiDatabase,\r
-#else\r
- IN EFI_HII_PROTOCOL *Hii,\r
-#endif\r
- IN OUT UINT16 *HandleBufferLength,\r
- OUT EFI_HII_HANDLE **HiiHandleBuffer\r
);\r
- \r
+\r
//\r
// Define the boot type which to classify the boot option type\r
// Different boot option type could have different boot behavior\r
#define PCI_CLASSC_PI_UHCI 0x00\r
#define PCI_CLASSC_PI_EHCI 0x20\r
\r
+/**\r
+ Check whether there is a instance in BlockIoDevicePath, which contain multi device path\r
+ instances, has the same partition node with HardDriveDevicePath device path\r
+\r
+ @param BlockIoDevicePath Multi device path instances which need to check\r
+ @param HardDriveDevicePath A device path which starts with a hard drive media\r
+ device path.\r
+\r
+ @retval TRUE There is a matched device path instance.\r
+ @retval FALSE There is no matched device path instance.\r
+\r
+**/\r
BOOLEAN\r
+EFIAPI\r
MatchPartitionDevicePathNode (\r
IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath,\r
IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath\r
);\r
- \r
+\r
+\r
+/**\r
+ Expand a device path that starts with a hard drive media device path node to be a\r
+ full device path that includes the full hardware path to the device. We need\r
+ to do this so it can be booted. As an optimizaiton the front match (the part point\r
+ to the partition node. E.g. ACPI() /PCI()/ATA()/Partition() ) is saved in a variable\r
+ so a connect all is not required on every boot. All successful history device path\r
+ which point to partition node (the front part) will be saved.\r
+\r
+ @param HardDriveDevicePath EFI Device Path to boot, if it starts with a hard\r
+ drive media device path.\r
+ @return A Pointer to the full device path or NULL if a valid Hard Drive devic path\r
+ cannot be found.\r
+\r
+**/\r
EFI_DEVICE_PATH_PROTOCOL *\r
+EFIAPI\r
BdsExpandPartitionPartialDevicePathToFull (\r
IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath\r
);\r
\r
+/**\r
+ Return the bootable media handle.\r
+ First, check the device is connected\r
+ Second, check whether the device path point to a device which support SimpleFileSystemProtocol,\r
+ Third, detect the the default boot file in the Media, and return the removable Media handle.\r
+\r
+ @param DevicePath Device Path to a bootable device\r
+\r
+ @retval NULL The media on the DevicePath is not bootable\r
+\r
+**/\r
EFI_HANDLE\r
+EFIAPI\r
BdsLibGetBootableHandle (\r
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
);\r
\r
+\r
+/**\r
+ Check whether the Device path in a boot option point to a valide bootable device,\r
+ And if CheckMedia is true, check the device is ready to boot now.\r
+\r
+ @param DevPath the Device path in a boot option\r
+ @param CheckMedia if true, check the device is ready to boot now.\r
+\r
+ @retval TRUE the Device path is valide\r
+ @retval FALSE the Device path is invalide .\r
+\r
+**/\r
BOOLEAN\r
+EFIAPI\r
BdsLibIsValidEFIBootOptDevicePath (\r
IN EFI_DEVICE_PATH_PROTOCOL *DevPath,\r
IN BOOLEAN CheckMedia\r
);\r
\r
+/**\r
+ For a bootable Device path, return its boot type.\r
+\r
+ @param DevicePath The bootable device Path to check\r
+\r
+ @retval BDS_EFI_MEDIA_HD_BOOT If the device path contains any media deviec path node, it is media boot type\r
+ For the floppy node, handle it as media node\r
+ @retval BDS_EFI_MEDIA_CDROM_BOOT If the device path contains any media deviec path node, it is media boot type\r
+ For the floppy node, handle it as media node\r
+ @retval BDS_EFI_ACPI_FLOPPY_BOOT If the device path contains any media deviec path node, it is media boot type\r
+ For the floppy node, handle it as media node\r
+ @retval BDS_EFI_MESSAGE_ATAPI_BOOT If the device path not contains any media deviec path node, and\r
+ its last device path node point to a message device path node, it is\r
+ \r
+ @retval BDS_EFI_MESSAGE_SCSI_BOOT If the device path not contains any media deviec path node, and\r
+ its last device path node point to a message device path node, it is\r
+ @retval BDS_EFI_MESSAGE_USB_DEVICE_BOOT If the device path not contains any media deviec path node, and\r
+ its last device path node point to a message device path node, it is\r
+ @retval BDS_EFI_MESSAGE_MISC_BOOT If the device path not contains any media deviec path node, and\r
+ its last device path node point to a message device path node, it is\r
+ @retval BDS_LEGACY_BBS_BOOT Legacy boot type\r
+ @retval BDS_EFI_UNSUPPORT An EFI Removable BlockIO device path not point to a media and message devie, \r
+\r
+**/\r
UINT32\r
+EFIAPI\r
BdsGetBootTypeFromDevicePath (\r
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
);\r
- \r
+\r
+\r
+/**\r
+ This routine register a function to adjust the different type memory page number\r
+ just before booting and save the updated info into the variable for next boot to use.\r
+\r
+**/\r
VOID\r
EFIAPI\r
BdsLibSaveMemoryTypeInformation (\r
- VOID \r
+ VOID\r
);\r
\r
+\r
+/**\r
+ According to a file guild, check a Fv file device path is valid. If it is invalid,\r
+ try to return the valid device path.\r
+ FV address maybe changes for memory layout adjust from time to time, use this funciton\r
+ could promise the Fv file device path is right.\r
+\r
+ @param DevicePath on input, the Fv file device path need to check on\r
+ output, the updated valid Fv file device path\r
+ @param FileGuid the Fv file guild\r
+\r
+ @retval EFI_INVALID_PARAMETER the input DevicePath or FileGuid is invalid\r
+ parameter\r
+ @retval EFI_UNSUPPORTED the input DevicePath does not contain Fv file\r
+ guild at all\r
+ @retval EFI_ALREADY_STARTED the input DevicePath has pointed to Fv file, it is\r
+ valid\r
+ @retval EFI_SUCCESS has successfully updated the invalid DevicePath,\r
+ and return the updated device path in DevicePath\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
BdsLibUpdateFvFileDevicePath (\r
IN EFI_GUID *FileGuid\r
);\r
\r
+\r
+/**\r
+ Connect the specific Usb device which match the short form device path,\r
+ and whose bus is determined by Host Controller (Uhci or Ehci)\r
+\r
+ @param HostControllerPI Uhci (0x00) or Ehci (0x20) or Both uhci and ehci\r
+ (0xFF)\r
+ @param RemainingDevicePath a short-form device path that starts with the first\r
+ element being a USB WWID or a USB Class device\r
+ path\r
+\r
+ @retval EFI_SUCCESS The specific Usb device is connected successfully.\r
+ @retval EFI_INVALID_PARAMETER Invalid HostControllerPi (not 0x00, 0x20 or 0xFF) \r
+ or RemainingDevicePath is not the USB class device path.\r
+ @retval EFI_NOT_FOUND The device specified by device path is not found.\r
+\r
+**/\r
EFI_STATUS\r
-BdsLibConnectUsbDevByShortFormDP (\r
- IN CHAR8 HostControllerPI,\r
+EFIAPI\r
+BdsLibConnectUsbDevByShortFormDP(\r
+ IN UINT8 HostControllerPI,\r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
);\r
\r
-EFI_TPL\r
-BdsLibGetCurrentTpl (\r
- VOID\r
- );\r
\r
//\r
// The implementation of this function is provided by Platform code.\r
//\r
+/**\r
+ Convert Vendor device path to device name.\r
+\r
+ @param Str The buffer store device name\r
+ @param DevPath Pointer to vendor device path\r
+\r
+**/\r
VOID\r
+EFIAPI\r
DevPathVendor (\r
IN OUT POOL_PRINT *Str,\r
IN VOID *DevPath\r
- )\r
-;\r
+ );\r
+\r
+/**\r
+ Concatenates a formatted unicode string to allocated pool.\r
+ The caller must free the resulting buffer.\r
\r
+ @param Str Tracks the allocated pool, size in use, and amount of pool allocated.\r
+ @param fmt The format string\r
+ @param ... The data will be printed.\r
+\r
+ @return Allocated buffer with the formatted string printed in it.\r
+ The caller must free the allocated buffer.\r
+ The buffer allocation is not packed.\r
+\r
+**/\r
CHAR16 *\r
+EFIAPI\r
CatPrint (\r
IN OUT POOL_PRINT *Str,\r
IN CHAR16 *fmt,\r
...\r
- )\r
-;\r
-#endif // _BDS_LIB_H_\r
+ );\r
+\r
+/**\r
+ Use Console Control to turn off UGA based Simple Text Out consoles from going\r
+ to the UGA device. Put up LogoFile on every UGA device that is a console\r
+\r
+ @param[in] LogoFile File name of logo to display on the center of the screen.\r
+\r
+ @retval EFI_SUCCESS ConsoleControl has been flipped to graphics and logo displayed.\r
+ @retval EFI_UNSUPPORTED Logo not found\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EnableQuietBoot (\r
+ IN EFI_GUID *LogoFile\r
+ );\r
+\r
+\r
+/**\r
+ Use Console Control to turn on UGA based Simple Text Out consoles. The UGA \r
+ Simple Text Out screens will now be synced up with all non UGA output devices\r
+\r
+ @retval EFI_SUCCESS UGA devices are back in text mode and synced up.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+DisableQuietBoot (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Use Console Control Protocol to lock the Console In Spliter virtual handle. \r
+ This is the ConInHandle and ConIn handle in the EFI system table. All key\r
+ presses will be ignored until the Password is typed in. The only way to\r
+ disable the password is to type it in to a ConIn device.\r
+\r
+ @param Password Password used to lock ConIn device.\r
+\r
+ @retval EFI_SUCCESS lock the Console In Spliter virtual handle successfully.\r
+ @retval EFI_UNSUPPORTED Password not found\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LockKeyboards (\r
+ IN CHAR16 *Password\r
+ );\r
+\r
+#endif\r
+\r