MdeModulePkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
committed by
mergify[bot]
parent
7c7184e201
commit
1436aea4d5
File diff suppressed because it is too large
Load Diff
@@ -9,15 +9,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
#include "InternalBm.h"
|
||||
|
||||
#define VENDOR_IDENTIFICATION_OFFSET 3
|
||||
#define VENDOR_IDENTIFICATION_LENGTH 8
|
||||
#define PRODUCT_IDENTIFICATION_OFFSET 11
|
||||
#define PRODUCT_IDENTIFICATION_LENGTH 16
|
||||
#define VENDOR_IDENTIFICATION_OFFSET 3
|
||||
#define VENDOR_IDENTIFICATION_LENGTH 8
|
||||
#define PRODUCT_IDENTIFICATION_OFFSET 11
|
||||
#define PRODUCT_IDENTIFICATION_LENGTH 16
|
||||
|
||||
CONST UINT16 mBmUsbLangId = 0x0409; // English
|
||||
CHAR16 mBmUefiPrefix[] = L"UEFI ";
|
||||
CONST UINT16 mBmUsbLangId = 0x0409; // English
|
||||
CHAR16 mBmUefiPrefix[] = L"UEFI ";
|
||||
|
||||
LIST_ENTRY mPlatformBootDescriptionHandlers = INITIALIZE_LIST_HEAD_VARIABLE (mPlatformBootDescriptionHandlers);
|
||||
LIST_ENTRY mPlatformBootDescriptionHandlers = INITIALIZE_LIST_HEAD_VARIABLE (mPlatformBootDescriptionHandlers);
|
||||
|
||||
/**
|
||||
For a bootable Device path, return its boot type.
|
||||
@@ -39,27 +39,28 @@ LIST_ENTRY mPlatformBootDescriptionHandlers = INITIALIZE_LIST_HEAD_VARIABLE (mPl
|
||||
**/
|
||||
BM_BOOT_TYPE
|
||||
BmDevicePathType (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
)
|
||||
{
|
||||
EFI_DEVICE_PATH_PROTOCOL *Node;
|
||||
EFI_DEVICE_PATH_PROTOCOL *NextNode;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Node;
|
||||
EFI_DEVICE_PATH_PROTOCOL *NextNode;
|
||||
|
||||
ASSERT (DevicePath != NULL);
|
||||
|
||||
for (Node = DevicePath; !IsDevicePathEndType (Node); Node = NextDevicePathNode (Node)) {
|
||||
switch (DevicePathType (Node)) {
|
||||
|
||||
case ACPI_DEVICE_PATH:
|
||||
if (EISA_ID_TO_NUM (((ACPI_HID_DEVICE_PATH *) Node)->HID) == 0x0604) {
|
||||
if (EISA_ID_TO_NUM (((ACPI_HID_DEVICE_PATH *)Node)->HID) == 0x0604) {
|
||||
return BmAcpiFloppyBoot;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case HARDWARE_DEVICE_PATH:
|
||||
if (DevicePathSubType (Node) == HW_CONTROLLER_DP) {
|
||||
return BmHardwareDeviceBoot;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case MESSAGING_DEVICE_PATH:
|
||||
@@ -70,9 +71,9 @@ BmDevicePathType (
|
||||
do {
|
||||
NextNode = NextDevicePathNode (NextNode);
|
||||
} while (
|
||||
(DevicePathType (NextNode) == MESSAGING_DEVICE_PATH) &&
|
||||
(DevicePathSubType(NextNode) == MSG_DEVICE_LOGICAL_UNIT_DP)
|
||||
);
|
||||
(DevicePathType (NextNode) == MESSAGING_DEVICE_PATH) &&
|
||||
(DevicePathSubType (NextNode) == MSG_DEVICE_LOGICAL_UNIT_DP)
|
||||
);
|
||||
|
||||
//
|
||||
// If the device path not only point to driver device, it is not a messaging device path,
|
||||
@@ -82,21 +83,21 @@ BmDevicePathType (
|
||||
}
|
||||
|
||||
switch (DevicePathSubType (Node)) {
|
||||
case MSG_ATAPI_DP:
|
||||
return BmMessageAtapiBoot;
|
||||
break;
|
||||
case MSG_ATAPI_DP:
|
||||
return BmMessageAtapiBoot;
|
||||
break;
|
||||
|
||||
case MSG_SATA_DP:
|
||||
return BmMessageSataBoot;
|
||||
break;
|
||||
case MSG_SATA_DP:
|
||||
return BmMessageSataBoot;
|
||||
break;
|
||||
|
||||
case MSG_USB_DP:
|
||||
return BmMessageUsbBoot;
|
||||
break;
|
||||
case MSG_USB_DP:
|
||||
return BmMessageUsbBoot;
|
||||
break;
|
||||
|
||||
case MSG_SCSI_DP:
|
||||
return BmMessageScsiBoot;
|
||||
break;
|
||||
case MSG_SCSI_DP:
|
||||
return BmMessageScsiBoot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -111,17 +112,18 @@ BmDevicePathType (
|
||||
**/
|
||||
VOID
|
||||
BmEliminateExtraSpaces (
|
||||
IN CHAR16 *Str
|
||||
IN CHAR16 *Str
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
UINTN ActualIndex;
|
||||
UINTN Index;
|
||||
UINTN ActualIndex;
|
||||
|
||||
for (Index = 0, ActualIndex = 0; Str[Index] != L'\0'; Index++) {
|
||||
if ((Str[Index] != L' ') || ((ActualIndex > 0) && (Str[ActualIndex - 1] != L' '))) {
|
||||
Str[ActualIndex++] = Str[Index];
|
||||
}
|
||||
}
|
||||
|
||||
Str[ActualIndex] = L'\0';
|
||||
}
|
||||
|
||||
@@ -134,70 +136,72 @@ BmEliminateExtraSpaces (
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetDescriptionFromDiskInfo (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
EFI_STATUS Status;
|
||||
EFI_DISK_INFO_PROTOCOL *DiskInfo;
|
||||
UINT32 BufferSize;
|
||||
EFI_ATAPI_IDENTIFY_DATA IdentifyData;
|
||||
EFI_SCSI_INQUIRY_DATA InquiryData;
|
||||
CHAR16 *Description;
|
||||
UINTN Length;
|
||||
CONST UINTN ModelNameLength = 40;
|
||||
CONST UINTN SerialNumberLength = 20;
|
||||
CHAR8 *StrPtr;
|
||||
UINT8 Temp;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
UINTN Index;
|
||||
EFI_STATUS Status;
|
||||
EFI_DISK_INFO_PROTOCOL *DiskInfo;
|
||||
UINT32 BufferSize;
|
||||
EFI_ATAPI_IDENTIFY_DATA IdentifyData;
|
||||
EFI_SCSI_INQUIRY_DATA InquiryData;
|
||||
CHAR16 *Description;
|
||||
UINTN Length;
|
||||
CONST UINTN ModelNameLength = 40;
|
||||
CONST UINTN SerialNumberLength = 20;
|
||||
CHAR8 *StrPtr;
|
||||
UINT8 Temp;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
|
||||
Description = NULL;
|
||||
Description = NULL;
|
||||
|
||||
Status = gBS->HandleProtocol (
|
||||
Handle,
|
||||
&gEfiDiskInfoProtocolGuid,
|
||||
(VOID **) &DiskInfo
|
||||
(VOID **)&DiskInfo
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoAhciInterfaceGuid) ||
|
||||
CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoIdeInterfaceGuid)) {
|
||||
BufferSize = sizeof (EFI_ATAPI_IDENTIFY_DATA);
|
||||
Status = DiskInfo->Identify (
|
||||
DiskInfo,
|
||||
&IdentifyData,
|
||||
&BufferSize
|
||||
);
|
||||
CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoIdeInterfaceGuid))
|
||||
{
|
||||
BufferSize = sizeof (EFI_ATAPI_IDENTIFY_DATA);
|
||||
Status = DiskInfo->Identify (
|
||||
DiskInfo,
|
||||
&IdentifyData,
|
||||
&BufferSize
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Description = AllocateZeroPool ((ModelNameLength + SerialNumberLength + 2) * sizeof (CHAR16));
|
||||
ASSERT (Description != NULL);
|
||||
for (Index = 0; Index + 1 < ModelNameLength; Index += 2) {
|
||||
Description[Index] = (CHAR16) IdentifyData.ModelName[Index + 1];
|
||||
Description[Index + 1] = (CHAR16) IdentifyData.ModelName[Index];
|
||||
Description[Index] = (CHAR16)IdentifyData.ModelName[Index + 1];
|
||||
Description[Index + 1] = (CHAR16)IdentifyData.ModelName[Index];
|
||||
}
|
||||
|
||||
Length = Index;
|
||||
Length = Index;
|
||||
Description[Length++] = L' ';
|
||||
|
||||
for (Index = 0; Index + 1 < SerialNumberLength; Index += 2) {
|
||||
Description[Length + Index] = (CHAR16) IdentifyData.SerialNo[Index + 1];
|
||||
Description[Length + Index + 1] = (CHAR16) IdentifyData.SerialNo[Index];
|
||||
Description[Length + Index] = (CHAR16)IdentifyData.SerialNo[Index + 1];
|
||||
Description[Length + Index + 1] = (CHAR16)IdentifyData.SerialNo[Index];
|
||||
}
|
||||
Length += Index;
|
||||
|
||||
Length += Index;
|
||||
Description[Length++] = L'\0';
|
||||
ASSERT (Length == ModelNameLength + SerialNumberLength + 2);
|
||||
|
||||
BmEliminateExtraSpaces (Description);
|
||||
}
|
||||
} else if (CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoScsiInterfaceGuid)) {
|
||||
BufferSize = sizeof (EFI_SCSI_INQUIRY_DATA);
|
||||
Status = DiskInfo->Inquiry (
|
||||
DiskInfo,
|
||||
&InquiryData,
|
||||
&BufferSize
|
||||
);
|
||||
BufferSize = sizeof (EFI_SCSI_INQUIRY_DATA);
|
||||
Status = DiskInfo->Inquiry (
|
||||
DiskInfo,
|
||||
&InquiryData,
|
||||
&BufferSize
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Description = AllocateZeroPool ((VENDOR_IDENTIFICATION_LENGTH + PRODUCT_IDENTIFICATION_LENGTH + 2) * sizeof (CHAR16));
|
||||
ASSERT (Description != NULL);
|
||||
@@ -207,8 +211,8 @@ BmGetDescriptionFromDiskInfo (
|
||||
// EFI_SCSI_INQUIRY_DATA.Reserved_5_95[11 - 26] save the product identification,
|
||||
// Here combine the vendor identification and product identification to the description.
|
||||
//
|
||||
StrPtr = (CHAR8 *) (&InquiryData.Reserved_5_95[VENDOR_IDENTIFICATION_OFFSET]);
|
||||
Temp = StrPtr[VENDOR_IDENTIFICATION_LENGTH];
|
||||
StrPtr = (CHAR8 *)(&InquiryData.Reserved_5_95[VENDOR_IDENTIFICATION_OFFSET]);
|
||||
Temp = StrPtr[VENDOR_IDENTIFICATION_LENGTH];
|
||||
StrPtr[VENDOR_IDENTIFICATION_LENGTH] = '\0';
|
||||
AsciiStrToUnicodeStrS (StrPtr, Description, VENDOR_IDENTIFICATION_LENGTH + 1);
|
||||
StrPtr[VENDOR_IDENTIFICATION_LENGTH] = Temp;
|
||||
@@ -218,7 +222,7 @@ BmGetDescriptionFromDiskInfo (
|
||||
//
|
||||
Description[VENDOR_IDENTIFICATION_LENGTH] = L' ';
|
||||
|
||||
StrPtr = (CHAR8 *) (&InquiryData.Reserved_5_95[PRODUCT_IDENTIFICATION_OFFSET]);
|
||||
StrPtr = (CHAR8 *)(&InquiryData.Reserved_5_95[PRODUCT_IDENTIFICATION_OFFSET]);
|
||||
StrPtr[PRODUCT_IDENTIFICATION_LENGTH] = '\0';
|
||||
AsciiStrToUnicodeStrS (StrPtr, Description + VENDOR_IDENTIFICATION_LENGTH + 1, PRODUCT_IDENTIFICATION_LENGTH + 1);
|
||||
|
||||
@@ -233,6 +237,7 @@ BmGetDescriptionFromDiskInfo (
|
||||
while (!IsDevicePathEnd (DevicePath) && (DevicePathType (DevicePath) != MESSAGING_DEVICE_PATH)) {
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
}
|
||||
|
||||
if (IsDevicePathEnd (DevicePath)) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -260,23 +265,23 @@ BmGetDescriptionFromDiskInfo (
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetUsbDescription (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_USB_IO_PROTOCOL *UsbIo;
|
||||
CHAR16 NullChar;
|
||||
CHAR16 *Manufacturer;
|
||||
CHAR16 *Product;
|
||||
CHAR16 *SerialNumber;
|
||||
CHAR16 *Description;
|
||||
EFI_USB_DEVICE_DESCRIPTOR DevDesc;
|
||||
UINTN DescMaxSize;
|
||||
EFI_STATUS Status;
|
||||
EFI_USB_IO_PROTOCOL *UsbIo;
|
||||
CHAR16 NullChar;
|
||||
CHAR16 *Manufacturer;
|
||||
CHAR16 *Product;
|
||||
CHAR16 *SerialNumber;
|
||||
CHAR16 *Description;
|
||||
EFI_USB_DEVICE_DESCRIPTOR DevDesc;
|
||||
UINTN DescMaxSize;
|
||||
|
||||
Status = gBS->HandleProtocol (
|
||||
Handle,
|
||||
&gEfiUsbIoProtocolGuid,
|
||||
(VOID **) &UsbIo
|
||||
(VOID **)&UsbIo
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return NULL;
|
||||
@@ -322,27 +327,30 @@ BmGetUsbDescription (
|
||||
if ((Manufacturer == &NullChar) &&
|
||||
(Product == &NullChar) &&
|
||||
(SerialNumber == &NullChar)
|
||||
) {
|
||||
)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DescMaxSize = StrSize (Manufacturer) + StrSize (Product) + StrSize (SerialNumber);
|
||||
Description = AllocateZeroPool (DescMaxSize);
|
||||
ASSERT (Description != NULL);
|
||||
StrCatS (Description, DescMaxSize/sizeof(CHAR16), Manufacturer);
|
||||
StrCatS (Description, DescMaxSize/sizeof(CHAR16), L" ");
|
||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), Manufacturer);
|
||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L" ");
|
||||
|
||||
StrCatS (Description, DescMaxSize/sizeof(CHAR16), Product);
|
||||
StrCatS (Description, DescMaxSize/sizeof(CHAR16), L" ");
|
||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), Product);
|
||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L" ");
|
||||
|
||||
StrCatS (Description, DescMaxSize/sizeof(CHAR16), SerialNumber);
|
||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), SerialNumber);
|
||||
|
||||
if (Manufacturer != &NullChar) {
|
||||
FreePool (Manufacturer);
|
||||
}
|
||||
|
||||
if (Product != &NullChar) {
|
||||
FreePool (Product);
|
||||
}
|
||||
|
||||
if (SerialNumber != &NullChar) {
|
||||
FreePool (SerialNumber);
|
||||
}
|
||||
@@ -361,17 +369,17 @@ BmGetUsbDescription (
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetNetworkDescription (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
MAC_ADDR_DEVICE_PATH *Mac;
|
||||
VLAN_DEVICE_PATH *Vlan;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Ip;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Uri;
|
||||
CHAR16 *Description;
|
||||
UINTN DescriptionSize;
|
||||
EFI_STATUS Status;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
MAC_ADDR_DEVICE_PATH *Mac;
|
||||
VLAN_DEVICE_PATH *Vlan;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Ip;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Uri;
|
||||
CHAR16 *Description;
|
||||
UINTN DescriptionSize;
|
||||
|
||||
Status = gBS->OpenProtocol (
|
||||
Handle,
|
||||
@@ -388,7 +396,7 @@ BmGetNetworkDescription (
|
||||
Status = gBS->OpenProtocol (
|
||||
Handle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &DevicePath,
|
||||
(VOID **)&DevicePath,
|
||||
gImageHandle,
|
||||
Handle,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -410,7 +418,8 @@ BmGetNetworkDescription (
|
||||
while (!IsDevicePathEnd (DevicePath) &&
|
||||
((DevicePathType (DevicePath) != MESSAGING_DEVICE_PATH) ||
|
||||
(DevicePathSubType (DevicePath) != MSG_MAC_ADDR_DP))
|
||||
) {
|
||||
)
|
||||
{
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
}
|
||||
|
||||
@@ -418,7 +427,7 @@ BmGetNetworkDescription (
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Mac = (MAC_ADDR_DEVICE_PATH *) DevicePath;
|
||||
Mac = (MAC_ADDR_DEVICE_PATH *)DevicePath;
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
|
||||
//
|
||||
@@ -426,8 +435,9 @@ BmGetNetworkDescription (
|
||||
//
|
||||
if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
|
||||
(DevicePathSubType (DevicePath) == MSG_VLAN_DP)
|
||||
) {
|
||||
Vlan = (VLAN_DEVICE_PATH *) DevicePath;
|
||||
)
|
||||
{
|
||||
Vlan = (VLAN_DEVICE_PATH *)DevicePath;
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
} else {
|
||||
Vlan = NULL;
|
||||
@@ -438,7 +448,8 @@ BmGetNetworkDescription (
|
||||
//
|
||||
if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
|
||||
(DevicePathSubType (DevicePath) == MSG_WIFI_DP)
|
||||
) {
|
||||
)
|
||||
{
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
}
|
||||
|
||||
@@ -448,8 +459,9 @@ BmGetNetworkDescription (
|
||||
if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
|
||||
((DevicePathSubType (DevicePath) == MSG_IPv4_DP) ||
|
||||
(DevicePathSubType (DevicePath) == MSG_IPv6_DP))
|
||||
) {
|
||||
Ip = DevicePath;
|
||||
)
|
||||
{
|
||||
Ip = DevicePath;
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
} else {
|
||||
Ip = NULL;
|
||||
@@ -460,7 +472,8 @@ BmGetNetworkDescription (
|
||||
//
|
||||
if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
|
||||
(DevicePathSubType (DevicePath) == MSG_DNS_DP)
|
||||
) {
|
||||
)
|
||||
{
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
}
|
||||
|
||||
@@ -469,8 +482,9 @@ BmGetNetworkDescription (
|
||||
//
|
||||
if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
|
||||
(DevicePathSubType (DevicePath) == MSG_URI_DP)
|
||||
) {
|
||||
Uri = DevicePath;
|
||||
)
|
||||
{
|
||||
Uri = DevicePath;
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
} else {
|
||||
Uri = NULL;
|
||||
@@ -485,14 +499,19 @@ BmGetNetworkDescription (
|
||||
Description = AllocatePool (DescriptionSize);
|
||||
ASSERT (Description != NULL);
|
||||
UnicodeSPrint (
|
||||
Description, DescriptionSize,
|
||||
Description,
|
||||
DescriptionSize,
|
||||
(Vlan == NULL) ?
|
||||
L"%sv%d (MAC:%02x%02x%02x%02x%02x%02x)" :
|
||||
L"%sv%d (MAC:%02x%02x%02x%02x%02x%02x VLAN%d)",
|
||||
(Uri == NULL) ? L"PXE" : L"HTTP",
|
||||
((Ip == NULL) || (DevicePathSubType (Ip) == MSG_IPv4_DP)) ? 4 : 6,
|
||||
Mac->MacAddress.Addr[0], Mac->MacAddress.Addr[1], Mac->MacAddress.Addr[2],
|
||||
Mac->MacAddress.Addr[3], Mac->MacAddress.Addr[4], Mac->MacAddress.Addr[5],
|
||||
Mac->MacAddress.Addr[0],
|
||||
Mac->MacAddress.Addr[1],
|
||||
Mac->MacAddress.Addr[2],
|
||||
Mac->MacAddress.Addr[3],
|
||||
Mac->MacAddress.Addr[4],
|
||||
Mac->MacAddress.Addr[5],
|
||||
(Vlan == NULL) ? 0 : Vlan->VlanId
|
||||
);
|
||||
return Description;
|
||||
@@ -507,14 +526,14 @@ BmGetNetworkDescription (
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetLoadFileDescription (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_DEVICE_PATH_PROTOCOL *FilePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
|
||||
CHAR16 *Description;
|
||||
EFI_LOAD_FILE_PROTOCOL *LoadFile;
|
||||
EFI_STATUS Status;
|
||||
EFI_DEVICE_PATH_PROTOCOL *FilePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
|
||||
CHAR16 *Description;
|
||||
EFI_LOAD_FILE_PROTOCOL *LoadFile;
|
||||
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiLoadFileProtocolGuid, (VOID **)&LoadFile);
|
||||
if (EFI_ERROR (Status)) {
|
||||
@@ -525,14 +544,15 @@ BmGetLoadFileDescription (
|
||||
// Get the file name
|
||||
//
|
||||
Description = NULL;
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID **)&FilePath);
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID **)&FilePath);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
DevicePathNode = FilePath;
|
||||
while (!IsDevicePathEnd (DevicePathNode)) {
|
||||
if (DevicePathNode->Type == MEDIA_DEVICE_PATH && DevicePathNode->SubType == MEDIA_FILEPATH_DP) {
|
||||
if ((DevicePathNode->Type == MEDIA_DEVICE_PATH) && (DevicePathNode->SubType == MEDIA_FILEPATH_DP)) {
|
||||
Description = (CHAR16 *)(DevicePathNode + 1);
|
||||
break;
|
||||
}
|
||||
|
||||
DevicePathNode = NextDevicePathNode (DevicePathNode);
|
||||
}
|
||||
}
|
||||
@@ -553,21 +573,21 @@ BmGetLoadFileDescription (
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetNvmeDescription (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL *NvmePassthru;
|
||||
EFI_DEV_PATH_PTR DevicePath;
|
||||
EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET CommandPacket;
|
||||
EFI_NVM_EXPRESS_COMMAND Command;
|
||||
EFI_NVM_EXPRESS_COMPLETION Completion;
|
||||
NVME_ADMIN_CONTROLLER_DATA ControllerData;
|
||||
CHAR16 *Description;
|
||||
CHAR16 *Char;
|
||||
UINTN Index;
|
||||
EFI_STATUS Status;
|
||||
EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL *NvmePassthru;
|
||||
EFI_DEV_PATH_PTR DevicePath;
|
||||
EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET CommandPacket;
|
||||
EFI_NVM_EXPRESS_COMMAND Command;
|
||||
EFI_NVM_EXPRESS_COMPLETION Completion;
|
||||
NVME_ADMIN_CONTROLLER_DATA ControllerData;
|
||||
CHAR16 *Description;
|
||||
CHAR16 *Char;
|
||||
UINTN Index;
|
||||
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID **) &DevicePath.DevPath);
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID **)&DevicePath.DevPath);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -575,7 +595,8 @@ BmGetNvmeDescription (
|
||||
Status = gBS->LocateDevicePath (&gEfiNvmExpressPassThruProtocolGuid, &DevicePath.DevPath, &Handle);
|
||||
if (EFI_ERROR (Status) ||
|
||||
(DevicePathType (DevicePath.DevPath) != MESSAGING_DEVICE_PATH) ||
|
||||
(DevicePathSubType (DevicePath.DevPath) != MSG_NVME_NAMESPACE_DP)) {
|
||||
(DevicePathSubType (DevicePath.DevPath) != MSG_NVME_NAMESPACE_DP))
|
||||
{
|
||||
//
|
||||
// Do not return description when the Handle is not a child of NVME controller.
|
||||
//
|
||||
@@ -585,19 +606,19 @@ BmGetNvmeDescription (
|
||||
//
|
||||
// Send ADMIN_IDENTIFY command to NVME controller to get the model and serial number.
|
||||
//
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiNvmExpressPassThruProtocolGuid, (VOID **) &NvmePassthru);
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiNvmExpressPassThruProtocolGuid, (VOID **)&NvmePassthru);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
ZeroMem (&CommandPacket, sizeof(EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET));
|
||||
ZeroMem (&Command, sizeof(EFI_NVM_EXPRESS_COMMAND));
|
||||
ZeroMem (&Completion, sizeof(EFI_NVM_EXPRESS_COMPLETION));
|
||||
ZeroMem (&CommandPacket, sizeof (EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET));
|
||||
ZeroMem (&Command, sizeof (EFI_NVM_EXPRESS_COMMAND));
|
||||
ZeroMem (&Completion, sizeof (EFI_NVM_EXPRESS_COMPLETION));
|
||||
|
||||
Command.Cdw0.Opcode = NVME_ADMIN_IDENTIFY_CMD;
|
||||
//
|
||||
// According to Nvm Express 1.1 spec Figure 38, When not used, the field shall be cleared to 0h.
|
||||
// For the Identify command, the Namespace Identifier is only used for the Namespace data structure.
|
||||
//
|
||||
Command.Nsid = 0;
|
||||
Command.Nsid = 0;
|
||||
CommandPacket.NvmeCmd = &Command;
|
||||
CommandPacket.NvmeCompletion = &Completion;
|
||||
CommandPacket.TransferBuffer = &ControllerData;
|
||||
@@ -607,15 +628,15 @@ BmGetNvmeDescription (
|
||||
//
|
||||
// Set bit 0 (Cns bit) to 1 to identify a controller
|
||||
//
|
||||
Command.Cdw10 = 1;
|
||||
Command.Flags = CDW10_VALID;
|
||||
Command.Cdw10 = 1;
|
||||
Command.Flags = CDW10_VALID;
|
||||
|
||||
Status = NvmePassthru->PassThru (
|
||||
NvmePassthru,
|
||||
0,
|
||||
&CommandPacket,
|
||||
NULL
|
||||
);
|
||||
NvmePassthru,
|
||||
0,
|
||||
&CommandPacket,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -624,20 +645,26 @@ BmGetNvmeDescription (
|
||||
(ARRAY_SIZE (ControllerData.Mn) + 1
|
||||
+ ARRAY_SIZE (ControllerData.Sn) + 1
|
||||
+ MAXIMUM_VALUE_CHARACTERS + 1
|
||||
) * sizeof (CHAR16));
|
||||
) * sizeof (CHAR16)
|
||||
);
|
||||
if (Description != NULL) {
|
||||
Char = Description;
|
||||
for (Index = 0; Index < ARRAY_SIZE (ControllerData.Mn); Index++) {
|
||||
*(Char++) = (CHAR16) ControllerData.Mn[Index];
|
||||
*(Char++) = (CHAR16)ControllerData.Mn[Index];
|
||||
}
|
||||
|
||||
*(Char++) = L' ';
|
||||
for (Index = 0; Index < ARRAY_SIZE (ControllerData.Sn); Index++) {
|
||||
*(Char++) = (CHAR16) ControllerData.Sn[Index];
|
||||
*(Char++) = (CHAR16)ControllerData.Sn[Index];
|
||||
}
|
||||
|
||||
*(Char++) = L' ';
|
||||
UnicodeValueToStringS (
|
||||
Char, sizeof (CHAR16) * (MAXIMUM_VALUE_CHARACTERS + 1),
|
||||
0, DevicePath.NvmeNamespace->NamespaceId, 0
|
||||
Char,
|
||||
sizeof (CHAR16) * (MAXIMUM_VALUE_CHARACTERS + 1),
|
||||
0,
|
||||
DevicePath.NvmeNamespace->NamespaceId,
|
||||
0
|
||||
);
|
||||
BmEliminateExtraSpaces (Description);
|
||||
}
|
||||
@@ -654,54 +681,56 @@ BmGetNvmeDescription (
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetMiscDescription (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CHAR16 *Description;
|
||||
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs;
|
||||
EFI_STATUS Status;
|
||||
CHAR16 *Description;
|
||||
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs;
|
||||
|
||||
switch (BmDevicePathType (DevicePathFromHandle (Handle))) {
|
||||
case BmAcpiFloppyBoot:
|
||||
Description = L"Floppy";
|
||||
break;
|
||||
case BmAcpiFloppyBoot:
|
||||
Description = L"Floppy";
|
||||
break;
|
||||
|
||||
case BmMessageAtapiBoot:
|
||||
case BmMessageSataBoot:
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
//
|
||||
// Assume a removable SATA device should be the DVD/CD device
|
||||
//
|
||||
Description = BlockIo->Media->RemovableMedia ? L"DVD/CDROM" : L"Hard Drive";
|
||||
break;
|
||||
case BmMessageAtapiBoot:
|
||||
case BmMessageSataBoot:
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
//
|
||||
// Assume a removable SATA device should be the DVD/CD device
|
||||
//
|
||||
Description = BlockIo->Media->RemovableMedia ? L"DVD/CDROM" : L"Hard Drive";
|
||||
break;
|
||||
|
||||
case BmMessageUsbBoot:
|
||||
Description = L"USB Device";
|
||||
break;
|
||||
case BmMessageUsbBoot:
|
||||
Description = L"USB Device";
|
||||
break;
|
||||
|
||||
case BmMessageScsiBoot:
|
||||
Description = L"SCSI Device";
|
||||
break;
|
||||
case BmMessageScsiBoot:
|
||||
Description = L"SCSI Device";
|
||||
break;
|
||||
|
||||
case BmHardwareDeviceBoot:
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Description = BlockIo->Media->RemovableMedia ? L"Removable Disk" : L"Hard Drive";
|
||||
} else {
|
||||
Description = L"Misc Device";
|
||||
}
|
||||
break;
|
||||
case BmHardwareDeviceBoot:
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Description = BlockIo->Media->RemovableMedia ? L"Removable Disk" : L"Hard Drive";
|
||||
} else {
|
||||
Description = L"Misc Device";
|
||||
}
|
||||
|
||||
default:
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiSimpleFileSystemProtocolGuid, (VOID **) &Fs);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Description = L"Non-Block Boot Device";
|
||||
} else {
|
||||
Description = L"Misc Device";
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
default:
|
||||
Status = gBS->HandleProtocol (Handle, &gEfiSimpleFileSystemProtocolGuid, (VOID **)&Fs);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Description = L"Non-Block Boot Device";
|
||||
} else {
|
||||
Description = L"Misc Device";
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return AllocateCopyPool (StrSize (Description), Description);
|
||||
@@ -722,13 +751,14 @@ EfiBootManagerRegisterBootDescriptionHandler (
|
||||
IN EFI_BOOT_MANAGER_BOOT_DESCRIPTION_HANDLER Handler
|
||||
)
|
||||
{
|
||||
LIST_ENTRY *Link;
|
||||
BM_BOOT_DESCRIPTION_ENTRY *Entry;
|
||||
LIST_ENTRY *Link;
|
||||
BM_BOOT_DESCRIPTION_ENTRY *Entry;
|
||||
|
||||
for ( Link = GetFirstNode (&mPlatformBootDescriptionHandlers)
|
||||
; !IsNull (&mPlatformBootDescriptionHandlers, Link)
|
||||
; Link = GetNextNode (&mPlatformBootDescriptionHandlers, Link)
|
||||
) {
|
||||
; !IsNull (&mPlatformBootDescriptionHandlers, Link)
|
||||
; Link = GetNextNode (&mPlatformBootDescriptionHandlers, Link)
|
||||
)
|
||||
{
|
||||
Entry = CR (Link, BM_BOOT_DESCRIPTION_ENTRY, Link, BM_BOOT_DESCRIPTION_ENTRY_SIGNATURE);
|
||||
if (Entry->Handler == Handler) {
|
||||
return EFI_ALREADY_STARTED;
|
||||
@@ -746,7 +776,7 @@ EfiBootManagerRegisterBootDescriptionHandler (
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
BM_GET_BOOT_DESCRIPTION mBmBootDescriptionHandlers[] = {
|
||||
BM_GET_BOOT_DESCRIPTION mBmBootDescriptionHandlers[] = {
|
||||
BmGetUsbDescription,
|
||||
BmGetDescriptionFromDiskInfo,
|
||||
BmGetNetworkDescription,
|
||||
@@ -764,22 +794,22 @@ BM_GET_BOOT_DESCRIPTION mBmBootDescriptionHandlers[] = {
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetBootDescription (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
LIST_ENTRY *Link;
|
||||
BM_BOOT_DESCRIPTION_ENTRY *Entry;
|
||||
CHAR16 *Description;
|
||||
CHAR16 *DefaultDescription;
|
||||
CHAR16 *Temp;
|
||||
UINTN Index;
|
||||
LIST_ENTRY *Link;
|
||||
BM_BOOT_DESCRIPTION_ENTRY *Entry;
|
||||
CHAR16 *Description;
|
||||
CHAR16 *DefaultDescription;
|
||||
CHAR16 *Temp;
|
||||
UINTN Index;
|
||||
|
||||
//
|
||||
// Firstly get the default boot description
|
||||
//
|
||||
DefaultDescription = NULL;
|
||||
for (Index = 0; Index < ARRAY_SIZE (mBmBootDescriptionHandlers); Index++) {
|
||||
DefaultDescription = mBmBootDescriptionHandlers[Index] (Handle);
|
||||
DefaultDescription = mBmBootDescriptionHandlers[Index](Handle);
|
||||
if (DefaultDescription != NULL) {
|
||||
//
|
||||
// Avoid description confusion between UEFI & Legacy boot option by adding "UEFI " prefix
|
||||
@@ -794,16 +824,18 @@ BmGetBootDescription (
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT (DefaultDescription != NULL);
|
||||
|
||||
//
|
||||
// Secondly query platform for the better boot description
|
||||
//
|
||||
for ( Link = GetFirstNode (&mPlatformBootDescriptionHandlers)
|
||||
; !IsNull (&mPlatformBootDescriptionHandlers, Link)
|
||||
; Link = GetNextNode (&mPlatformBootDescriptionHandlers, Link)
|
||||
) {
|
||||
Entry = CR (Link, BM_BOOT_DESCRIPTION_ENTRY, Link, BM_BOOT_DESCRIPTION_ENTRY_SIGNATURE);
|
||||
; !IsNull (&mPlatformBootDescriptionHandlers, Link)
|
||||
; Link = GetNextNode (&mPlatformBootDescriptionHandlers, Link)
|
||||
)
|
||||
{
|
||||
Entry = CR (Link, BM_BOOT_DESCRIPTION_ENTRY, Link, BM_BOOT_DESCRIPTION_ENTRY_SIGNATURE);
|
||||
Description = Entry->Handler (Handle, DefaultDescription);
|
||||
if (Description != NULL) {
|
||||
FreePool (DefaultDescription);
|
||||
@@ -823,16 +855,16 @@ BmGetBootDescription (
|
||||
**/
|
||||
VOID
|
||||
BmMakeBootOptionDescriptionUnique (
|
||||
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions,
|
||||
UINTN BootOptionCount
|
||||
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions,
|
||||
UINTN BootOptionCount
|
||||
)
|
||||
{
|
||||
UINTN Base;
|
||||
UINTN Index;
|
||||
UINTN DescriptionSize;
|
||||
UINTN MaxSuffixSize;
|
||||
BOOLEAN *Visited;
|
||||
UINTN MatchCount;
|
||||
UINTN Base;
|
||||
UINTN Index;
|
||||
UINTN DescriptionSize;
|
||||
UINTN MaxSuffixSize;
|
||||
BOOLEAN *Visited;
|
||||
UINTN MatchCount;
|
||||
|
||||
if (BootOptionCount == 0) {
|
||||
return;
|
||||
@@ -856,15 +888,17 @@ BmMakeBootOptionDescriptionUnique (
|
||||
Visited[Base] = TRUE;
|
||||
DescriptionSize = StrSize (BootOptions[Base].Description);
|
||||
for (Index = Base + 1; Index < BootOptionCount; Index++) {
|
||||
if (!Visited[Index] && StrCmp (BootOptions[Base].Description, BootOptions[Index].Description) == 0) {
|
||||
if (!Visited[Index] && (StrCmp (BootOptions[Base].Description, BootOptions[Index].Description) == 0)) {
|
||||
Visited[Index] = TRUE;
|
||||
MatchCount++;
|
||||
FreePool (BootOptions[Index].Description);
|
||||
BootOptions[Index].Description = AllocatePool (DescriptionSize + MaxSuffixSize);
|
||||
UnicodeSPrint (
|
||||
BootOptions[Index].Description, DescriptionSize + MaxSuffixSize,
|
||||
BootOptions[Index].Description,
|
||||
DescriptionSize + MaxSuffixSize,
|
||||
L"%s %d",
|
||||
BootOptions[Base].Description, MatchCount
|
||||
BootOptions[Base].Description,
|
||||
MatchCount
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -52,7 +52,6 @@ BmConnectAllDriversToAllControllers (
|
||||
// the connect again.
|
||||
//
|
||||
Status = gDS->Dispatch ();
|
||||
|
||||
} while (!EFI_ERROR (Status));
|
||||
}
|
||||
|
||||
@@ -154,7 +153,6 @@ EfiBootManagerConnectDevicePath (
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
PreviousHandle = Handle;
|
||||
//
|
||||
@@ -175,11 +173,13 @@ EfiBootManagerConnectDevicePath (
|
||||
if (Status == EFI_NOT_FOUND) {
|
||||
Status = EFI_SUCCESS;
|
||||
}
|
||||
|
||||
if (MatchingHandle != NULL) {
|
||||
*MatchingHandle = Handle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Loop until RemainingDevicePath is an empty device path
|
||||
//
|
||||
@@ -243,16 +243,16 @@ EfiBootManagerDisconnectAll (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmConnectUsbShortFormDevicePath (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
UINTN Index;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
UINT8 Class[3];
|
||||
BOOLEAN AtLeastOneConnected;
|
||||
EFI_STATUS Status;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
UINTN Index;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
UINT8 Class[3];
|
||||
BOOLEAN AtLeastOneConnected;
|
||||
|
||||
//
|
||||
// Check the passed in parameters
|
||||
@@ -263,7 +263,8 @@ BmConnectUsbShortFormDevicePath (
|
||||
|
||||
if ((DevicePathType (DevicePath) != MESSAGING_DEVICE_PATH) ||
|
||||
((DevicePathSubType (DevicePath) != MSG_USB_CLASS_DP) && (DevicePathSubType (DevicePath) != MSG_USB_WWID_DP))
|
||||
) {
|
||||
)
|
||||
{
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -271,19 +272,19 @@ BmConnectUsbShortFormDevicePath (
|
||||
// Find the usb host controller firstly, then connect with the remaining device path
|
||||
//
|
||||
AtLeastOneConnected = FALSE;
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&Handles
|
||||
);
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&Handles
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
for (Index = 0; Index < HandleCount; Index++) {
|
||||
Status = gBS->HandleProtocol (
|
||||
Handles[Index],
|
||||
&gEfiPciIoProtocolGuid,
|
||||
(VOID **) &PciIo
|
||||
(VOID **)&PciIo
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
@@ -292,14 +293,15 @@ BmConnectUsbShortFormDevicePath (
|
||||
Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0x09, 3, &Class);
|
||||
if (!EFI_ERROR (Status) &&
|
||||
((PCI_CLASS_SERIAL == Class[2]) && (PCI_CLASS_SERIAL_USB == Class[1]))
|
||||
) {
|
||||
)
|
||||
{
|
||||
Status = gBS->ConnectController (
|
||||
Handles[Index],
|
||||
NULL,
|
||||
DevicePath,
|
||||
FALSE
|
||||
);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
if (!EFI_ERROR (Status)) {
|
||||
AtLeastOneConnected = TRUE;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
#include "InternalBm.h"
|
||||
|
||||
CHAR16 *mConVarName[] = {
|
||||
CHAR16 *mConVarName[] = {
|
||||
L"ConIn",
|
||||
L"ConOut",
|
||||
L"ErrOut",
|
||||
@@ -28,16 +28,16 @@ BmGetVideoController (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN RootBridgeHandleCount;
|
||||
EFI_HANDLE *RootBridgeHandleBuffer;
|
||||
UINTN HandleCount;
|
||||
EFI_HANDLE *HandleBuffer;
|
||||
UINTN RootBridgeIndex;
|
||||
UINTN Index;
|
||||
EFI_HANDLE VideoController;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
PCI_TYPE00 Pci;
|
||||
EFI_STATUS Status;
|
||||
UINTN RootBridgeHandleCount;
|
||||
EFI_HANDLE *RootBridgeHandleBuffer;
|
||||
UINTN HandleCount;
|
||||
EFI_HANDLE *HandleBuffer;
|
||||
UINTN RootBridgeIndex;
|
||||
UINTN Index;
|
||||
EFI_HANDLE VideoController;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
PCI_TYPE00 Pci;
|
||||
|
||||
//
|
||||
// Make all the PCI_IO protocols show up
|
||||
@@ -72,18 +72,18 @@ BmGetVideoController (
|
||||
}
|
||||
|
||||
for (Index = 0; Index < HandleCount; Index++) {
|
||||
Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID **) &PciIo);
|
||||
Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID **)&PciIo);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// Check for all video controller
|
||||
//
|
||||
Status = PciIo->Pci.Read (
|
||||
PciIo,
|
||||
EfiPciIoWidthUint32,
|
||||
0,
|
||||
sizeof (Pci) / sizeof (UINT32),
|
||||
&Pci
|
||||
);
|
||||
PciIo,
|
||||
EfiPciIoWidthUint32,
|
||||
0,
|
||||
sizeof (Pci) / sizeof (UINT32),
|
||||
&Pci
|
||||
);
|
||||
if (!EFI_ERROR (Status) && IS_PCI_VGA (&Pci)) {
|
||||
// TODO: use IS_PCI_DISPLAY??
|
||||
VideoController = HandleBuffer[Index];
|
||||
@@ -91,12 +91,14 @@ BmGetVideoController (
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FreePool (HandleBuffer);
|
||||
|
||||
if (VideoController != NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
FreePool (RootBridgeHandleBuffer);
|
||||
|
||||
return VideoController;
|
||||
@@ -113,7 +115,7 @@ BmGetVideoController (
|
||||
EFI_DEVICE_PATH_PROTOCOL *
|
||||
EFIAPI
|
||||
EfiBootManagerGetGopDevicePath (
|
||||
IN EFI_HANDLE VideoController
|
||||
IN EFI_HANDLE VideoController
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
@@ -130,7 +132,6 @@ EfiBootManagerGetGopDevicePath (
|
||||
EFI_DEVICE_PATH_PROTOCOL *GopPool;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ReturnDevicePath;
|
||||
|
||||
|
||||
Status = gBS->ProtocolsPerHandle (
|
||||
VideoController,
|
||||
&ProtocolBuffer,
|
||||
@@ -161,7 +162,7 @@ EfiBootManagerGetGopDevicePath (
|
||||
Status = gBS->OpenProtocol (
|
||||
OpenInfoBuffer[Index].ControllerHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &DevicePath,
|
||||
(VOID **)&DevicePath,
|
||||
NULL,
|
||||
NULL,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -174,9 +175,10 @@ EfiBootManagerGetGopDevicePath (
|
||||
for (Next = DevicePath; !IsDevicePathEnd (Next); Next = NextDevicePathNode (Next)) {
|
||||
Previous = Next;
|
||||
}
|
||||
|
||||
ASSERT (Previous != NULL);
|
||||
|
||||
if (DevicePathType (Previous) == ACPI_DEVICE_PATH && DevicePathSubType (Previous) == ACPI_ADR_DP) {
|
||||
if ((DevicePathType (Previous) == ACPI_DEVICE_PATH) && (DevicePathSubType (Previous) == ACPI_ADR_DP)) {
|
||||
Status = gBS->OpenProtocol (
|
||||
OpenInfoBuffer[Index].ControllerHandle,
|
||||
&gEfiGraphicsOutputProtocolGuid,
|
||||
@@ -190,19 +192,19 @@ EfiBootManagerGetGopDevicePath (
|
||||
// Append the device path to GOP pool when there is GOP protocol installed.
|
||||
//
|
||||
TempDevicePath = GopPool;
|
||||
GopPool = AppendDevicePathInstance (GopPool, DevicePath);
|
||||
GopPool = AppendDevicePathInstance (GopPool, DevicePath);
|
||||
gBS->FreePool (TempDevicePath);
|
||||
}
|
||||
}
|
||||
|
||||
if (DevicePathType (Previous) == HARDWARE_DEVICE_PATH && DevicePathSubType (Previous) == HW_CONTROLLER_DP) {
|
||||
if ((DevicePathType (Previous) == HARDWARE_DEVICE_PATH) && (DevicePathSubType (Previous) == HW_CONTROLLER_DP)) {
|
||||
//
|
||||
// Recursively look for GOP child in this frame buffer handle
|
||||
//
|
||||
DEBUG ((DEBUG_INFO, "[Bds] Looking for GOP child deeper ... \n"));
|
||||
TempDevicePath = GopPool;
|
||||
TempDevicePath = GopPool;
|
||||
ReturnDevicePath = EfiBootManagerGetGopDevicePath (OpenInfoBuffer[Index].ControllerHandle);
|
||||
GopPool = AppendDevicePathInstance (GopPool, ReturnDevicePath);
|
||||
GopPool = AppendDevicePathInstance (GopPool, ReturnDevicePath);
|
||||
gBS->FreePool (ReturnDevicePath);
|
||||
gBS->FreePool (TempDevicePath);
|
||||
}
|
||||
@@ -228,10 +230,10 @@ EfiBootManagerGetGopDevicePath (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiBootManagerConnectVideoController (
|
||||
EFI_HANDLE VideoController OPTIONAL
|
||||
EFI_HANDLE VideoController OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_DEVICE_PATH_PROTOCOL *Gop;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Gop;
|
||||
|
||||
if (VideoController == NULL) {
|
||||
//
|
||||
@@ -285,21 +287,21 @@ EfiBootManagerConnectVideoController (
|
||||
**/
|
||||
BOOLEAN
|
||||
BmUpdateSystemTableConsole (
|
||||
IN CHAR16 *VarName,
|
||||
IN EFI_GUID *ConsoleGuid,
|
||||
IN OUT EFI_HANDLE *ConsoleHandle,
|
||||
IN OUT VOID **ProtocolInterface
|
||||
IN CHAR16 *VarName,
|
||||
IN EFI_GUID *ConsoleGuid,
|
||||
IN OUT EFI_HANDLE *ConsoleHandle,
|
||||
IN OUT VOID **ProtocolInterface
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN DevicePathSize;
|
||||
EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *VarConsole;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Instance;
|
||||
EFI_DEVICE_PATH_PROTOCOL *FullInstance;
|
||||
VOID *Interface;
|
||||
EFI_HANDLE NewHandle;
|
||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
|
||||
EFI_STATUS Status;
|
||||
UINTN DevicePathSize;
|
||||
EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *VarConsole;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Instance;
|
||||
EFI_DEVICE_PATH_PROTOCOL *FullInstance;
|
||||
VOID *Interface;
|
||||
EFI_HANDLE NewHandle;
|
||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
|
||||
|
||||
ASSERT (VarName != NULL);
|
||||
ASSERT (ConsoleHandle != NULL);
|
||||
@@ -308,11 +310,11 @@ BmUpdateSystemTableConsole (
|
||||
|
||||
if (*ConsoleHandle != NULL) {
|
||||
Status = gBS->HandleProtocol (
|
||||
*ConsoleHandle,
|
||||
ConsoleGuid,
|
||||
&Interface
|
||||
);
|
||||
if (Status == EFI_SUCCESS && Interface == *ProtocolInterface) {
|
||||
*ConsoleHandle,
|
||||
ConsoleGuid,
|
||||
&Interface
|
||||
);
|
||||
if ((Status == EFI_SUCCESS) && (Interface == *ProtocolInterface)) {
|
||||
//
|
||||
// If ConsoleHandle is valid and console protocol on this handle also
|
||||
// also matched, just return.
|
||||
@@ -324,7 +326,7 @@ BmUpdateSystemTableConsole (
|
||||
//
|
||||
// Get all possible consoles device path from EFI variable
|
||||
//
|
||||
GetEfiGlobalVariable2 (VarName, (VOID **) &VarConsole, NULL);
|
||||
GetEfiGlobalVariable2 (VarName, (VOID **)&VarConsole, NULL);
|
||||
if (VarConsole == NULL) {
|
||||
//
|
||||
// If there is no any console device, just return.
|
||||
@@ -338,7 +340,7 @@ BmUpdateSystemTableConsole (
|
||||
//
|
||||
// Check every instance of the console variable
|
||||
//
|
||||
Instance = GetNextDevicePathInstance (&VarConsole, &DevicePathSize);
|
||||
Instance = GetNextDevicePathInstance (&VarConsole, &DevicePathSize);
|
||||
if (Instance == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "[Bds] No valid console instance is found for %s!\n", VarName));
|
||||
// We should not ASSERT when all the console devices are removed.
|
||||
@@ -351,11 +353,11 @@ BmUpdateSystemTableConsole (
|
||||
// Find console device handle by device path instance
|
||||
//
|
||||
FullInstance = Instance;
|
||||
Status = gBS->LocateDevicePath (
|
||||
ConsoleGuid,
|
||||
&Instance,
|
||||
&NewHandle
|
||||
);
|
||||
Status = gBS->LocateDevicePath (
|
||||
ConsoleGuid,
|
||||
&Instance,
|
||||
&NewHandle
|
||||
);
|
||||
FreePool (FullInstance);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
@@ -376,16 +378,16 @@ BmUpdateSystemTableConsole (
|
||||
//
|
||||
// If it is console out device, set console mode 80x25 if current mode is invalid.
|
||||
//
|
||||
TextOut = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *) Interface;
|
||||
TextOut = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)Interface;
|
||||
if (TextOut->Mode->Mode == -1) {
|
||||
TextOut->SetMode (TextOut, 0);
|
||||
}
|
||||
}
|
||||
|
||||
FreePool (FullDevicePath);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
} while (Instance != NULL);
|
||||
|
||||
//
|
||||
@@ -435,10 +437,11 @@ EfiBootManagerUpdateConsoleVariable (
|
||||
if (CustomizedConDevicePath == ExclusiveDevicePath) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
//
|
||||
// Delete the ExclusiveDevicePath from current default console
|
||||
//
|
||||
GetEfiGlobalVariable2 (mConVarName[ConsoleType], (VOID **) &VarConsole, NULL);
|
||||
GetEfiGlobalVariable2 (mConVarName[ConsoleType], (VOID **)&VarConsole, NULL);
|
||||
//
|
||||
// Initialize NewDevicePath
|
||||
//
|
||||
@@ -448,9 +451,10 @@ EfiBootManagerUpdateConsoleVariable (
|
||||
// If ExclusiveDevicePath is even the part of the instance in VarConsole, delete it.
|
||||
// In the end, NewDevicePath is the final device path.
|
||||
//
|
||||
if (ExclusiveDevicePath != NULL && VarConsole != NULL) {
|
||||
NewDevicePath = BmDelPartMatchInstance (VarConsole, ExclusiveDevicePath);
|
||||
if ((ExclusiveDevicePath != NULL) && (VarConsole != NULL)) {
|
||||
NewDevicePath = BmDelPartMatchInstance (VarConsole, ExclusiveDevicePath);
|
||||
}
|
||||
|
||||
//
|
||||
// Try to append customized device path to NewDevicePath.
|
||||
//
|
||||
@@ -465,9 +469,9 @@ EfiBootManagerUpdateConsoleVariable (
|
||||
// just append current customized device path
|
||||
//
|
||||
TempNewDevicePath = NewDevicePath;
|
||||
NewDevicePath = AppendDevicePathInstance (NewDevicePath, CustomizedConDevicePath);
|
||||
NewDevicePath = AppendDevicePathInstance (NewDevicePath, CustomizedConDevicePath);
|
||||
if (TempNewDevicePath != NULL) {
|
||||
FreePool(TempNewDevicePath);
|
||||
FreePool (TempNewDevicePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -479,28 +483,28 @@ EfiBootManagerUpdateConsoleVariable (
|
||||
mConVarName[ConsoleType],
|
||||
&gEfiGlobalVariableGuid,
|
||||
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS
|
||||
| ((ConsoleType < ConInDev) ? EFI_VARIABLE_NON_VOLATILE : 0),
|
||||
| ((ConsoleType < ConInDev) ? EFI_VARIABLE_NON_VOLATILE : 0),
|
||||
GetDevicePathSize (NewDevicePath),
|
||||
NewDevicePath
|
||||
);
|
||||
|
||||
if (VarConsole == NewDevicePath) {
|
||||
if (VarConsole != NULL) {
|
||||
FreePool(VarConsole);
|
||||
FreePool (VarConsole);
|
||||
}
|
||||
} else {
|
||||
if (VarConsole != NULL) {
|
||||
FreePool(VarConsole);
|
||||
FreePool (VarConsole);
|
||||
}
|
||||
|
||||
if (NewDevicePath != NULL) {
|
||||
FreePool(NewDevicePath);
|
||||
FreePool (NewDevicePath);
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Connect the console device base on the variable ConsoleType.
|
||||
|
||||
@@ -515,7 +519,7 @@ EfiBootManagerUpdateConsoleVariable (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiBootManagerConnectConsoleVariable (
|
||||
IN CONSOLE_TYPE ConsoleType
|
||||
IN CONSOLE_TYPE ConsoleType
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -538,7 +542,7 @@ EfiBootManagerConnectConsoleVariable (
|
||||
//
|
||||
// Check if the console variable exist
|
||||
//
|
||||
GetEfiGlobalVariable2 (mConVarName[ConsoleType], (VOID **) &StartDevicePath, NULL);
|
||||
GetEfiGlobalVariable2 (mConVarName[ConsoleType], (VOID **)&StartDevicePath, NULL);
|
||||
if (StartDevicePath == NULL) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
@@ -548,13 +552,13 @@ EfiBootManagerConnectConsoleVariable (
|
||||
//
|
||||
// Check every instance of the console variable
|
||||
//
|
||||
Instance = GetNextDevicePathInstance (&CopyOfDevicePath, &Size);
|
||||
Instance = GetNextDevicePathInstance (&CopyOfDevicePath, &Size);
|
||||
if (Instance == NULL) {
|
||||
FreePool (StartDevicePath);
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
Next = Instance;
|
||||
Next = Instance;
|
||||
while (!IsDevicePathEndType (Next)) {
|
||||
Next = NextDevicePathNode (Next);
|
||||
}
|
||||
@@ -568,23 +572,26 @@ EfiBootManagerConnectConsoleVariable (
|
||||
//
|
||||
if ((DevicePathType (Instance) == MESSAGING_DEVICE_PATH) &&
|
||||
((DevicePathSubType (Instance) == MSG_USB_CLASS_DP) || (DevicePathSubType (Instance) == MSG_USB_WWID_DP))
|
||||
) {
|
||||
)
|
||||
{
|
||||
Status = BmConnectUsbShortFormDevicePath (Instance);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
DeviceExist = TRUE;
|
||||
}
|
||||
} else {
|
||||
for (Next = Instance; !IsDevicePathEnd (Next); Next = NextDevicePathNode (Next)) {
|
||||
if (DevicePathType (Next) == ACPI_DEVICE_PATH && DevicePathSubType (Next) == ACPI_ADR_DP) {
|
||||
if ((DevicePathType (Next) == ACPI_DEVICE_PATH) && (DevicePathSubType (Next) == ACPI_ADR_DP)) {
|
||||
break;
|
||||
} else if (DevicePathType (Next) == HARDWARE_DEVICE_PATH &&
|
||||
DevicePathSubType (Next) == HW_CONTROLLER_DP &&
|
||||
DevicePathType (NextDevicePathNode (Next)) == ACPI_DEVICE_PATH &&
|
||||
DevicePathSubType (NextDevicePathNode (Next)) == ACPI_ADR_DP
|
||||
) {
|
||||
} else if ((DevicePathType (Next) == HARDWARE_DEVICE_PATH) &&
|
||||
(DevicePathSubType (Next) == HW_CONTROLLER_DP) &&
|
||||
(DevicePathType (NextDevicePathNode (Next)) == ACPI_DEVICE_PATH) &&
|
||||
(DevicePathSubType (NextDevicePathNode (Next)) == ACPI_ADR_DP)
|
||||
)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsDevicePathEnd (Next)) {
|
||||
//
|
||||
// For GOP device path, start the video driver with NULL remaining device path
|
||||
@@ -597,6 +604,7 @@ EfiBootManagerConnectConsoleVariable (
|
||||
} else {
|
||||
Status = EfiBootManagerConnectDevicePath (Instance, NULL);
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
//
|
||||
// Delete the instance from the console varialbe
|
||||
@@ -606,7 +614,8 @@ EfiBootManagerConnectConsoleVariable (
|
||||
DeviceExist = TRUE;
|
||||
}
|
||||
}
|
||||
FreePool(Instance);
|
||||
|
||||
FreePool (Instance);
|
||||
} while (CopyOfDevicePath != NULL);
|
||||
|
||||
FreePool (StartDevicePath);
|
||||
@@ -618,7 +627,6 @@ EfiBootManagerConnectConsoleVariable (
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
This function will search every input/output device in current system,
|
||||
and make every input/output device as potential console device.
|
||||
@@ -643,46 +651,46 @@ EfiBootManagerConnectAllConsoles (
|
||||
// Update all the console variables
|
||||
//
|
||||
gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
&gEfiSimpleTextInProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&HandleBuffer
|
||||
);
|
||||
ByProtocol,
|
||||
&gEfiSimpleTextInProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&HandleBuffer
|
||||
);
|
||||
|
||||
for (Index = 0; Index < HandleCount; Index++) {
|
||||
gBS->HandleProtocol (
|
||||
HandleBuffer[Index],
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &ConDevicePath
|
||||
);
|
||||
HandleBuffer[Index],
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **)&ConDevicePath
|
||||
);
|
||||
EfiBootManagerUpdateConsoleVariable (ConIn, ConDevicePath, NULL);
|
||||
}
|
||||
|
||||
if (HandleBuffer != NULL) {
|
||||
FreePool(HandleBuffer);
|
||||
FreePool (HandleBuffer);
|
||||
HandleBuffer = NULL;
|
||||
}
|
||||
|
||||
gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
&gEfiSimpleTextOutProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&HandleBuffer
|
||||
);
|
||||
ByProtocol,
|
||||
&gEfiSimpleTextOutProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&HandleBuffer
|
||||
);
|
||||
for (Index = 0; Index < HandleCount; Index++) {
|
||||
gBS->HandleProtocol (
|
||||
HandleBuffer[Index],
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &ConDevicePath
|
||||
);
|
||||
HandleBuffer[Index],
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **)&ConDevicePath
|
||||
);
|
||||
EfiBootManagerUpdateConsoleVariable (ConOut, ConDevicePath, NULL);
|
||||
EfiBootManagerUpdateConsoleVariable (ErrOut, ConDevicePath, NULL);
|
||||
}
|
||||
|
||||
if (HandleBuffer != NULL) {
|
||||
FreePool(HandleBuffer);
|
||||
FreePool (HandleBuffer);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -691,7 +699,6 @@ EfiBootManagerConnectAllConsoles (
|
||||
EfiBootManagerConnectAllDefaultConsoles ();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
This function will connect all the console devices base on the console
|
||||
device variable ConIn, ConOut and ErrOut.
|
||||
@@ -706,9 +713,9 @@ EfiBootManagerConnectAllDefaultConsoles (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
BOOLEAN OneConnected;
|
||||
BOOLEAN SystemTableUpdated;
|
||||
EFI_STATUS Status;
|
||||
BOOLEAN OneConnected;
|
||||
BOOLEAN SystemTableUpdated;
|
||||
|
||||
OneConnected = FALSE;
|
||||
|
||||
@@ -716,32 +723,36 @@ EfiBootManagerConnectAllDefaultConsoles (
|
||||
if (!EFI_ERROR (Status)) {
|
||||
OneConnected = TRUE;
|
||||
}
|
||||
PERF_EVENT ("ConOutReady");
|
||||
|
||||
PERF_EVENT ("ConOutReady");
|
||||
|
||||
Status = EfiBootManagerConnectConsoleVariable (ConIn);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
OneConnected = TRUE;
|
||||
}
|
||||
|
||||
PERF_EVENT ("ConInReady");
|
||||
|
||||
Status = EfiBootManagerConnectConsoleVariable (ErrOut);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
OneConnected = TRUE;
|
||||
}
|
||||
|
||||
PERF_EVENT ("ErrOutReady");
|
||||
|
||||
SystemTableUpdated = FALSE;
|
||||
//
|
||||
// Fill console handles in System Table if no console device assignd.
|
||||
//
|
||||
if (BmUpdateSystemTableConsole (L"ConIn", &gEfiSimpleTextInProtocolGuid, &gST->ConsoleInHandle, (VOID **) &gST->ConIn)) {
|
||||
if (BmUpdateSystemTableConsole (L"ConIn", &gEfiSimpleTextInProtocolGuid, &gST->ConsoleInHandle, (VOID **)&gST->ConIn)) {
|
||||
SystemTableUpdated = TRUE;
|
||||
}
|
||||
if (BmUpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut)) {
|
||||
|
||||
if (BmUpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **)&gST->ConOut)) {
|
||||
SystemTableUpdated = TRUE;
|
||||
}
|
||||
if (BmUpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr)) {
|
||||
|
||||
if (BmUpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **)&gST->StdErr)) {
|
||||
SystemTableUpdated = TRUE;
|
||||
}
|
||||
|
||||
@@ -751,10 +762,10 @@ EfiBootManagerConnectAllDefaultConsoles (
|
||||
//
|
||||
gST->Hdr.CRC32 = 0;
|
||||
gBS->CalculateCrc32 (
|
||||
(UINT8 *) &gST->Hdr,
|
||||
gST->Hdr.HeaderSize,
|
||||
&gST->Hdr.CRC32
|
||||
);
|
||||
(UINT8 *)&gST->Hdr,
|
||||
gST->Hdr.HeaderSize,
|
||||
&gST->Hdr.CRC32
|
||||
);
|
||||
}
|
||||
|
||||
return OneConnected ? EFI_SUCCESS : EFI_DEVICE_ERROR;
|
||||
|
@@ -11,14 +11,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#include "InternalBm.h"
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED
|
||||
CHAR16 *mBmHealthStatusText[] = {
|
||||
L"Healthy",
|
||||
L"Repair Required",
|
||||
L"Configuration Required",
|
||||
L"Failed",
|
||||
L"Reconnect Required",
|
||||
L"Reboot Required"
|
||||
};
|
||||
CHAR16 *mBmHealthStatusText[] = {
|
||||
L"Healthy",
|
||||
L"Repair Required",
|
||||
L"Configuration Required",
|
||||
L"Failed",
|
||||
L"Reconnect Required",
|
||||
L"Reboot Required"
|
||||
};
|
||||
|
||||
/**
|
||||
Return the controller name.
|
||||
@@ -37,17 +37,17 @@ GLOBAL_REMOVE_IF_UNREFERENCED
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetControllerName (
|
||||
IN EFI_HANDLE DriverHealthHandle,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle
|
||||
IN EFI_HANDLE DriverHealthHandle,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CHAR16 *ControllerName;
|
||||
CHAR8 *LanguageVariable;
|
||||
CHAR8 *BestLanguage;
|
||||
BOOLEAN Iso639Language;
|
||||
EFI_COMPONENT_NAME_PROTOCOL *ComponentName;
|
||||
EFI_STATUS Status;
|
||||
CHAR16 *ControllerName;
|
||||
CHAR8 *LanguageVariable;
|
||||
CHAR8 *BestLanguage;
|
||||
BOOLEAN Iso639Language;
|
||||
EFI_COMPONENT_NAME_PROTOCOL *ComponentName;
|
||||
|
||||
ControllerName = NULL;
|
||||
|
||||
@@ -55,16 +55,16 @@ BmGetControllerName (
|
||||
// Locate Component Name (2) protocol on the driver binging handle.
|
||||
//
|
||||
Iso639Language = FALSE;
|
||||
Status = gBS->HandleProtocol (
|
||||
DriverHealthHandle,
|
||||
&gEfiComponentName2ProtocolGuid,
|
||||
(VOID **) &ComponentName
|
||||
);
|
||||
Status = gBS->HandleProtocol (
|
||||
DriverHealthHandle,
|
||||
&gEfiComponentName2ProtocolGuid,
|
||||
(VOID **)&ComponentName
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
Status = gBS->HandleProtocol (
|
||||
DriverHealthHandle,
|
||||
&gEfiComponentNameProtocolGuid,
|
||||
(VOID **) &ComponentName
|
||||
(VOID **)&ComponentName
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Iso639Language = TRUE;
|
||||
@@ -72,14 +72,14 @@ BmGetControllerName (
|
||||
}
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
GetEfiGlobalVariable2 (Iso639Language ? L"Lang" : L"PlatformLang", (VOID**)&LanguageVariable, NULL);
|
||||
BestLanguage = GetBestLanguage(
|
||||
ComponentName->SupportedLanguages,
|
||||
Iso639Language,
|
||||
(LanguageVariable != NULL) ? LanguageVariable : "",
|
||||
Iso639Language ? "eng" : "en-US",
|
||||
NULL
|
||||
);
|
||||
GetEfiGlobalVariable2 (Iso639Language ? L"Lang" : L"PlatformLang", (VOID **)&LanguageVariable, NULL);
|
||||
BestLanguage = GetBestLanguage (
|
||||
ComponentName->SupportedLanguages,
|
||||
Iso639Language,
|
||||
(LanguageVariable != NULL) ? LanguageVariable : "",
|
||||
Iso639Language ? "eng" : "en-US",
|
||||
NULL
|
||||
);
|
||||
if (LanguageVariable != NULL) {
|
||||
FreePool (LanguageVariable);
|
||||
}
|
||||
@@ -111,15 +111,16 @@ BmGetControllerName (
|
||||
**/
|
||||
VOID
|
||||
BmDisplayMessages (
|
||||
IN EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo
|
||||
IN EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
EFI_STRING String;
|
||||
CHAR16 *ControllerName;
|
||||
UINTN Index;
|
||||
EFI_STRING String;
|
||||
CHAR16 *ControllerName;
|
||||
|
||||
if (DriverHealthInfo->MessageList == NULL ||
|
||||
DriverHealthInfo->MessageList[0].HiiHandle == NULL) {
|
||||
if ((DriverHealthInfo->MessageList == NULL) ||
|
||||
(DriverHealthInfo->MessageList[0].HiiHandle == NULL))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -163,8 +164,8 @@ BmDisplayMessages (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
BmRepairNotify (
|
||||
IN UINTN Value,
|
||||
IN UINTN Limit
|
||||
IN UINTN Value,
|
||||
IN UINTN Limit
|
||||
)
|
||||
{
|
||||
DEBUG ((DEBUG_INFO, "[BDS]RepairNotify: %d/%d\n", Value, Limit));
|
||||
@@ -189,11 +190,11 @@ BmRepairNotify (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmGetSingleControllerHealthStatus (
|
||||
IN OUT EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO **DriverHealthInfo,
|
||||
IN OUT UINTN *Count,
|
||||
IN EFI_HANDLE DriverHealthHandle,
|
||||
IN EFI_HANDLE ControllerHandle OPTIONAL,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL
|
||||
IN OUT EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO **DriverHealthInfo,
|
||||
IN OUT UINTN *Count,
|
||||
IN EFI_HANDLE DriverHealthHandle,
|
||||
IN EFI_HANDLE ControllerHandle OPTIONAL,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -209,17 +210,16 @@ BmGetSingleControllerHealthStatus (
|
||||
Status = gBS->HandleProtocol (
|
||||
DriverHealthHandle,
|
||||
&gEfiDriverHealthProtocolGuid,
|
||||
(VOID **) &DriverHealth
|
||||
(VOID **)&DriverHealth
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
|
||||
if (ControllerHandle == NULL) {
|
||||
//
|
||||
// If ControllerHandle is NULL, the return the cumulative health status of the driver
|
||||
//
|
||||
Status = DriverHealth->GetHealthStatus (DriverHealth, NULL, NULL, &HealthStatus, NULL, NULL);
|
||||
if (!EFI_ERROR (Status) && HealthStatus == EfiDriverHealthStatusHealthy) {
|
||||
if (!EFI_ERROR (Status) && (HealthStatus == EfiDriverHealthStatusHealthy)) {
|
||||
*DriverHealthInfo = ReallocatePool (
|
||||
(*Count) * sizeof (EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO),
|
||||
(*Count + 1) * sizeof (EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO),
|
||||
@@ -235,6 +235,7 @@ BmGetSingleControllerHealthStatus (
|
||||
|
||||
Status = EFI_ABORTED;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -285,28 +286,28 @@ BmGetSingleControllerHealthStatus (
|
||||
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *
|
||||
EFIAPI
|
||||
EfiBootManagerGetDriverHealthInfo (
|
||||
UINTN *Count
|
||||
UINTN *Count
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN NumHandles;
|
||||
EFI_HANDLE *DriverHealthHandles;
|
||||
UINTN DriverHealthIndex;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
UINTN ControllerIndex;
|
||||
UINTN ChildIndex;
|
||||
EFI_STATUS Status;
|
||||
UINTN NumHandles;
|
||||
EFI_HANDLE *DriverHealthHandles;
|
||||
UINTN DriverHealthIndex;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
UINTN ControllerIndex;
|
||||
UINTN ChildIndex;
|
||||
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo;
|
||||
|
||||
//
|
||||
// Initialize local variables
|
||||
//
|
||||
*Count = 0;
|
||||
DriverHealthInfo = NULL;
|
||||
Handles = NULL;
|
||||
DriverHealthHandles = NULL;
|
||||
NumHandles = 0;
|
||||
HandleCount = 0;
|
||||
*Count = 0;
|
||||
DriverHealthInfo = NULL;
|
||||
Handles = NULL;
|
||||
DriverHealthHandles = NULL;
|
||||
NumHandles = 0;
|
||||
HandleCount = 0;
|
||||
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
@@ -316,7 +317,7 @@ EfiBootManagerGetDriverHealthInfo (
|
||||
&DriverHealthHandles
|
||||
);
|
||||
|
||||
if (Status == EFI_NOT_FOUND || NumHandles == 0) {
|
||||
if ((Status == EFI_NOT_FOUND) || (NumHandles == 0)) {
|
||||
//
|
||||
// If there are no Driver Health Protocols handles, then return EFI_NOT_FOUND
|
||||
//
|
||||
@@ -348,14 +349,15 @@ EfiBootManagerGetDriverHealthInfo (
|
||||
// Retrieve the list of all handles from the handle database
|
||||
//
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
AllHandles,
|
||||
NULL,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&Handles
|
||||
);
|
||||
AllHandles,
|
||||
NULL,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&Handles
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
//
|
||||
// Loop through all the controller handles in the handle database
|
||||
//
|
||||
@@ -382,6 +384,7 @@ EfiBootManagerGetDriverHealthInfo (
|
||||
if (Handles != NULL) {
|
||||
FreePool (Handles);
|
||||
}
|
||||
|
||||
if (DriverHealthHandles != NULL) {
|
||||
FreePool (DriverHealthHandles);
|
||||
}
|
||||
@@ -401,17 +404,18 @@ EfiBootManagerGetDriverHealthInfo (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiBootManagerFreeDriverHealthInfo (
|
||||
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo,
|
||||
UINTN Count
|
||||
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo,
|
||||
UINTN Count
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
UINTN Index;
|
||||
|
||||
for (Index = 0; Index < Count; Index++) {
|
||||
if (DriverHealthInfo[Index].MessageList != NULL) {
|
||||
FreePool (DriverHealthInfo[Index].MessageList);
|
||||
}
|
||||
}
|
||||
|
||||
return gBS->FreePool (DriverHealthInfo);
|
||||
}
|
||||
|
||||
@@ -423,22 +427,22 @@ EfiBootManagerFreeDriverHealthInfo (
|
||||
**/
|
||||
VOID
|
||||
BmRepairAllControllers (
|
||||
UINTN ReconnectRepairCount
|
||||
UINTN ReconnectRepairCount
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo;
|
||||
EFI_DRIVER_HEALTH_STATUS HealthStatus;
|
||||
UINTN Count;
|
||||
UINTN Index;
|
||||
BOOLEAN RepairRequired;
|
||||
BOOLEAN ConfigurationRequired;
|
||||
BOOLEAN ReconnectRequired;
|
||||
BOOLEAN RebootRequired;
|
||||
EFI_HII_HANDLE *HiiHandles;
|
||||
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
|
||||
UINT32 MaxRepairCount;
|
||||
UINT32 RepairCount;
|
||||
EFI_STATUS Status;
|
||||
EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo;
|
||||
EFI_DRIVER_HEALTH_STATUS HealthStatus;
|
||||
UINTN Count;
|
||||
UINTN Index;
|
||||
BOOLEAN RepairRequired;
|
||||
BOOLEAN ConfigurationRequired;
|
||||
BOOLEAN ReconnectRequired;
|
||||
BOOLEAN RebootRequired;
|
||||
EFI_HII_HANDLE *HiiHandles;
|
||||
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
|
||||
UINT32 MaxRepairCount;
|
||||
UINT32 RepairCount;
|
||||
|
||||
//
|
||||
// Configure PcdDriverHealthConfigureForm to ZeroGuid to disable driver health check.
|
||||
@@ -447,11 +451,11 @@ BmRepairAllControllers (
|
||||
return;
|
||||
}
|
||||
|
||||
Status = gBS->LocateProtocol (&gEfiFormBrowser2ProtocolGuid, NULL, (VOID **) &FormBrowser2);
|
||||
Status = gBS->LocateProtocol (&gEfiFormBrowser2ProtocolGuid, NULL, (VOID **)&FormBrowser2);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
MaxRepairCount = PcdGet32 (PcdMaxRepairCount);
|
||||
RepairCount = 0;
|
||||
RepairCount = 0;
|
||||
|
||||
do {
|
||||
RepairRequired = FALSE;
|
||||
@@ -467,7 +471,7 @@ BmRepairAllControllers (
|
||||
}
|
||||
|
||||
if (DriverHealthInfo[Index].HealthStatus == EfiDriverHealthStatusRepairRequired) {
|
||||
RepairRequired = TRUE;
|
||||
RepairRequired = TRUE;
|
||||
|
||||
BmDisplayMessages (&DriverHealthInfo[Index]);
|
||||
|
||||
@@ -510,6 +514,7 @@ BmRepairAllControllers (
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
FreePool (HiiHandles);
|
||||
}
|
||||
}
|
||||
@@ -522,7 +527,6 @@ BmRepairAllControllers (
|
||||
ReconnectRequired = FALSE;
|
||||
DriverHealthInfo = EfiBootManagerGetDriverHealthInfo (&Count);
|
||||
for (Index = 0; Index < Count; Index++) {
|
||||
|
||||
BmDisplayMessages (&DriverHealthInfo[Index]);
|
||||
|
||||
if (DriverHealthInfo[Index].HealthStatus == EfiDriverHealthStatusReconnectRequired) {
|
||||
@@ -531,7 +535,7 @@ BmRepairAllControllers (
|
||||
//
|
||||
// Disconnect failed. Need to promote reconnect to a reboot.
|
||||
//
|
||||
RebootRequired = TRUE;
|
||||
RebootRequired = TRUE;
|
||||
} else {
|
||||
gBS->ConnectController (DriverHealthInfo[Index].ControllerHandle, NULL, NULL, TRUE);
|
||||
ReconnectRequired = TRUE;
|
||||
@@ -539,42 +543,48 @@ BmRepairAllControllers (
|
||||
}
|
||||
|
||||
if (DriverHealthInfo[Index].HealthStatus == EfiDriverHealthStatusRebootRequired) {
|
||||
RebootRequired = TRUE;
|
||||
RebootRequired = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
EfiBootManagerFreeDriverHealthInfo (DriverHealthInfo, Count);
|
||||
|
||||
|
||||
DEBUG_CODE_BEGIN ();
|
||||
CHAR16 *ControllerName;
|
||||
CHAR16 *ControllerName;
|
||||
|
||||
DriverHealthInfo = EfiBootManagerGetDriverHealthInfo (&Count);
|
||||
for (Index = 0; Index < Count; Index++) {
|
||||
ControllerName = BmGetControllerName (
|
||||
DriverHealthInfo[Index].DriverHealthHandle,
|
||||
DriverHealthInfo[Index].ControllerHandle,
|
||||
DriverHealthInfo[Index].ChildHandle
|
||||
);
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%02d: %s - %s\n",
|
||||
Index,
|
||||
ControllerName,
|
||||
mBmHealthStatusText[DriverHealthInfo[Index].HealthStatus]
|
||||
));
|
||||
if (ControllerName != NULL) {
|
||||
FreePool (ControllerName);
|
||||
}
|
||||
DriverHealthInfo = EfiBootManagerGetDriverHealthInfo (&Count);
|
||||
for (Index = 0; Index < Count; Index++) {
|
||||
ControllerName = BmGetControllerName (
|
||||
DriverHealthInfo[Index].DriverHealthHandle,
|
||||
DriverHealthInfo[Index].ControllerHandle,
|
||||
DriverHealthInfo[Index].ChildHandle
|
||||
);
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%02d: %s - %s\n",
|
||||
Index,
|
||||
ControllerName,
|
||||
mBmHealthStatusText[DriverHealthInfo[Index].HealthStatus]
|
||||
));
|
||||
if (ControllerName != NULL) {
|
||||
FreePool (ControllerName);
|
||||
}
|
||||
EfiBootManagerFreeDriverHealthInfo (DriverHealthInfo, Count);
|
||||
}
|
||||
|
||||
EfiBootManagerFreeDriverHealthInfo (DriverHealthInfo, Count);
|
||||
DEBUG_CODE_END ();
|
||||
|
||||
if (ReconnectRequired) {
|
||||
if (ReconnectRepairCount < MAX_RECONNECT_REPAIR) {
|
||||
BmRepairAllControllers (ReconnectRepairCount + 1);
|
||||
} else {
|
||||
DEBUG ((DEBUG_ERROR, "[%a:%d] Repair failed after %d retries.\n",
|
||||
__FUNCTION__, DEBUG_LINE_NUMBER, ReconnectRepairCount));
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"[%a:%d] Repair failed after %d retries.\n",
|
||||
__FUNCTION__,
|
||||
DEBUG_LINE_NUMBER,
|
||||
ReconnectRepairCount
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -12,20 +12,19 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
//
|
||||
// Lock for linked list
|
||||
//
|
||||
EFI_LOCK mBmHotkeyLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_NOTIFY);
|
||||
LIST_ENTRY mBmHotkeyList = INITIALIZE_LIST_HEAD_VARIABLE (mBmHotkeyList);
|
||||
EFI_EVENT mBmHotkeyTriggered = NULL;
|
||||
BOOLEAN mBmHotkeyServiceStarted = FALSE;
|
||||
UINTN mBmHotkeySupportCount = 0;
|
||||
EFI_LOCK mBmHotkeyLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_NOTIFY);
|
||||
LIST_ENTRY mBmHotkeyList = INITIALIZE_LIST_HEAD_VARIABLE (mBmHotkeyList);
|
||||
EFI_EVENT mBmHotkeyTriggered = NULL;
|
||||
BOOLEAN mBmHotkeyServiceStarted = FALSE;
|
||||
UINTN mBmHotkeySupportCount = 0;
|
||||
|
||||
//
|
||||
// Set OptionNumber as unassigned value to indicate the option isn't initialized
|
||||
//
|
||||
EFI_BOOT_MANAGER_LOAD_OPTION mBmHotkeyBootOption = { LoadOptionNumberUnassigned };
|
||||
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *mBmContinueKeyOption = NULL;
|
||||
VOID *mBmTxtInExRegistration = NULL;
|
||||
EFI_BOOT_MANAGER_LOAD_OPTION mBmHotkeyBootOption = { LoadOptionNumberUnassigned };
|
||||
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *mBmContinueKeyOption = NULL;
|
||||
VOID *mBmTxtInExRegistration = NULL;
|
||||
|
||||
/**
|
||||
Return the buffer size of the EFI_BOOT_MANAGER_KEY_OPTION data.
|
||||
@@ -40,7 +39,7 @@ BmSizeOfKeyOption (
|
||||
)
|
||||
{
|
||||
return OFFSET_OF (EFI_BOOT_MANAGER_KEY_OPTION, Keys)
|
||||
+ KeyOption->KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY);
|
||||
+ KeyOption->KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,14 +54,14 @@ BmSizeOfKeyOption (
|
||||
**/
|
||||
BOOLEAN
|
||||
BmIsKeyOptionValid (
|
||||
IN CONST EFI_BOOT_MANAGER_KEY_OPTION *KeyOption,
|
||||
IN UINTN KeyOptionSize
|
||||
)
|
||||
IN CONST EFI_BOOT_MANAGER_KEY_OPTION *KeyOption,
|
||||
IN UINTN KeyOptionSize
|
||||
)
|
||||
{
|
||||
UINT16 OptionName[BM_OPTION_NAME_LEN];
|
||||
UINT8 *BootOption;
|
||||
UINTN BootOptionSize;
|
||||
UINT32 Crc;
|
||||
UINT16 OptionName[BM_OPTION_NAME_LEN];
|
||||
UINT8 *BootOption;
|
||||
UINTN BootOptionSize;
|
||||
UINT32 Crc;
|
||||
|
||||
if (BmSizeOfKeyOption (KeyOption) != KeyOptionSize) {
|
||||
return FALSE;
|
||||
@@ -72,10 +71,13 @@ BmIsKeyOptionValid (
|
||||
// Check whether corresponding Boot Option exist
|
||||
//
|
||||
UnicodeSPrint (
|
||||
OptionName, sizeof (OptionName), L"%s%04x",
|
||||
mBmLoadOptionName[LoadOptionTypeBoot], KeyOption->BootOption
|
||||
OptionName,
|
||||
sizeof (OptionName),
|
||||
L"%s%04x",
|
||||
mBmLoadOptionName[LoadOptionTypeBoot],
|
||||
KeyOption->BootOption
|
||||
);
|
||||
GetEfiGlobalVariable2 (OptionName, (VOID **) &BootOption, &BootOptionSize);
|
||||
GetEfiGlobalVariable2 (OptionName, (VOID **)&BootOption, &BootOptionSize);
|
||||
|
||||
if (BootOption == NULL) {
|
||||
return FALSE;
|
||||
@@ -87,7 +89,7 @@ BmIsKeyOptionValid (
|
||||
gBS->CalculateCrc32 (BootOption, BootOptionSize, &Crc);
|
||||
FreePool (BootOption);
|
||||
|
||||
return (BOOLEAN) (KeyOption->BootOptionCrc == Crc);
|
||||
return (BOOLEAN)(KeyOption->BootOptionCrc == Crc);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,18 +105,19 @@ BmIsKeyOptionValid (
|
||||
**/
|
||||
BOOLEAN
|
||||
BmIsKeyOptionVariable (
|
||||
CHAR16 *Name,
|
||||
EFI_GUID *Guid,
|
||||
UINT16 *OptionNumber
|
||||
CHAR16 *Name,
|
||||
EFI_GUID *Guid,
|
||||
UINT16 *OptionNumber
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
UINTN Uint;
|
||||
UINTN Index;
|
||||
UINTN Uint;
|
||||
|
||||
if (!CompareGuid (Guid, &gEfiGlobalVariableGuid) ||
|
||||
(StrSize (Name) != sizeof (L"Key####")) ||
|
||||
(StrnCmp (Name, L"Key", 3) != 0)
|
||||
) {
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -124,7 +127,7 @@ BmIsKeyOptionVariable (
|
||||
if (Uint == -1) {
|
||||
return FALSE;
|
||||
} else {
|
||||
*OptionNumber = (UINT16) Uint + *OptionNumber * 0x10;
|
||||
*OptionNumber = (UINT16)Uint + *OptionNumber * 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,8 +135,8 @@ BmIsKeyOptionVariable (
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions;
|
||||
UINTN KeyOptionCount;
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions;
|
||||
UINTN KeyOptionCount;
|
||||
} BM_COLLECT_KEY_OPTIONS_PARAM;
|
||||
|
||||
/**
|
||||
@@ -145,18 +148,18 @@ typedef struct {
|
||||
**/
|
||||
VOID
|
||||
BmCollectKeyOptions (
|
||||
CHAR16 *Name,
|
||||
EFI_GUID *Guid,
|
||||
VOID *Context
|
||||
CHAR16 *Name,
|
||||
EFI_GUID *Guid,
|
||||
VOID *Context
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
BM_COLLECT_KEY_OPTIONS_PARAM *Param;
|
||||
VOID *KeyOption;
|
||||
UINT16 OptionNumber;
|
||||
UINTN KeyOptionSize;
|
||||
UINTN Index;
|
||||
BM_COLLECT_KEY_OPTIONS_PARAM *Param;
|
||||
VOID *KeyOption;
|
||||
UINT16 OptionNumber;
|
||||
UINTN KeyOptionSize;
|
||||
|
||||
Param = (BM_COLLECT_KEY_OPTIONS_PARAM *) Context;
|
||||
Param = (BM_COLLECT_KEY_OPTIONS_PARAM *)Context;
|
||||
|
||||
if (BmIsKeyOptionVariable (Name, Guid, &OptionNumber)) {
|
||||
GetEfiGlobalVariable2 (Name, &KeyOption, &KeyOptionSize);
|
||||
@@ -176,11 +179,13 @@ BmCollectKeyOptions (
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
CopyMem (&Param->KeyOptions[Index + 1], &Param->KeyOptions[Index], (Param->KeyOptionCount - Index) * sizeof (EFI_BOOT_MANAGER_KEY_OPTION));
|
||||
CopyMem (&Param->KeyOptions[Index], KeyOption, KeyOptionSize);
|
||||
Param->KeyOptions[Index].OptionNumber = OptionNumber;
|
||||
Param->KeyOptionCount++;
|
||||
}
|
||||
|
||||
FreePool (KeyOption);
|
||||
}
|
||||
}
|
||||
@@ -195,19 +200,19 @@ BmCollectKeyOptions (
|
||||
**/
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *
|
||||
BmGetKeyOptions (
|
||||
OUT UINTN *Count
|
||||
OUT UINTN *Count
|
||||
)
|
||||
{
|
||||
BM_COLLECT_KEY_OPTIONS_PARAM Param;
|
||||
BM_COLLECT_KEY_OPTIONS_PARAM Param;
|
||||
|
||||
if (Count == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Param.KeyOptions = NULL;
|
||||
Param.KeyOptions = NULL;
|
||||
Param.KeyOptionCount = 0;
|
||||
|
||||
BmForEachVariable (BmCollectKeyOptions, (VOID *) &Param);
|
||||
BmForEachVariable (BmCollectKeyOptions, (VOID *)&Param);
|
||||
|
||||
*Count = Param.KeyOptionCount;
|
||||
|
||||
@@ -225,11 +230,11 @@ BmGetKeyOptions (
|
||||
**/
|
||||
BOOLEAN
|
||||
BmBitSet (
|
||||
IN UINT32 Value,
|
||||
IN UINT32 Bit
|
||||
IN UINT32 Value,
|
||||
IN UINT32 Bit
|
||||
)
|
||||
{
|
||||
return (BOOLEAN) ((Value & Bit) != 0);
|
||||
return (BOOLEAN)((Value & Bit) != 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -244,12 +249,12 @@ BmBitSet (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmInitializeKeyFields (
|
||||
IN UINT32 Modifier,
|
||||
IN VA_LIST Args,
|
||||
OUT EFI_BOOT_MANAGER_KEY_OPTION *KeyOption
|
||||
IN UINT32 Modifier,
|
||||
IN VA_LIST Args,
|
||||
OUT EFI_BOOT_MANAGER_KEY_OPTION *KeyOption
|
||||
)
|
||||
{
|
||||
EFI_INPUT_KEY *Key;
|
||||
EFI_INPUT_KEY *Key;
|
||||
|
||||
if (KeyOption == NULL) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -261,6 +266,7 @@ BmInitializeKeyFields (
|
||||
if (Key == NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
CopyMem (
|
||||
&KeyOption->Keys[KeyOption->KeyData.Options.InputKeyCount],
|
||||
Key,
|
||||
@@ -277,30 +283,36 @@ BmInitializeKeyFields (
|
||||
}
|
||||
|
||||
if ((Modifier & ~(EFI_BOOT_MANAGER_SHIFT_PRESSED
|
||||
| EFI_BOOT_MANAGER_CONTROL_PRESSED
|
||||
| EFI_BOOT_MANAGER_ALT_PRESSED
|
||||
| EFI_BOOT_MANAGER_LOGO_PRESSED
|
||||
| EFI_BOOT_MANAGER_MENU_KEY_PRESSED
|
||||
| EFI_BOOT_MANAGER_SYS_REQ_PRESSED
|
||||
)) != 0) {
|
||||
| EFI_BOOT_MANAGER_CONTROL_PRESSED
|
||||
| EFI_BOOT_MANAGER_ALT_PRESSED
|
||||
| EFI_BOOT_MANAGER_LOGO_PRESSED
|
||||
| EFI_BOOT_MANAGER_MENU_KEY_PRESSED
|
||||
| EFI_BOOT_MANAGER_SYS_REQ_PRESSED
|
||||
)) != 0)
|
||||
{
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (BmBitSet (Modifier, EFI_BOOT_MANAGER_SHIFT_PRESSED)) {
|
||||
KeyOption->KeyData.Options.ShiftPressed = 1;
|
||||
}
|
||||
|
||||
if (BmBitSet (Modifier, EFI_BOOT_MANAGER_CONTROL_PRESSED)) {
|
||||
KeyOption->KeyData.Options.ControlPressed = 1;
|
||||
}
|
||||
|
||||
if (BmBitSet (Modifier, EFI_BOOT_MANAGER_ALT_PRESSED)) {
|
||||
KeyOption->KeyData.Options.AltPressed = 1;
|
||||
}
|
||||
|
||||
if (BmBitSet (Modifier, EFI_BOOT_MANAGER_LOGO_PRESSED)) {
|
||||
KeyOption->KeyData.Options.LogoPressed = 1;
|
||||
}
|
||||
|
||||
if (BmBitSet (Modifier, EFI_BOOT_MANAGER_MENU_KEY_PRESSED)) {
|
||||
KeyOption->KeyData.Options.MenuPressed = 1;
|
||||
}
|
||||
|
||||
if (BmBitSet (Modifier, EFI_BOOT_MANAGER_SYS_REQ_PRESSED)) {
|
||||
KeyOption->KeyData.Options.SysReqPressed = 1;
|
||||
}
|
||||
@@ -337,14 +349,14 @@ EfiBootManagerHotkeyBoot (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
BmHotkeyCallback (
|
||||
IN EFI_KEY_DATA *KeyData
|
||||
)
|
||||
IN EFI_KEY_DATA *KeyData
|
||||
)
|
||||
{
|
||||
LIST_ENTRY *Link;
|
||||
BM_HOTKEY *Hotkey;
|
||||
CHAR16 OptionName[BM_OPTION_NAME_LEN];
|
||||
EFI_STATUS Status;
|
||||
EFI_KEY_DATA *HotkeyData;
|
||||
LIST_ENTRY *Link;
|
||||
BM_HOTKEY *Hotkey;
|
||||
CHAR16 OptionName[BM_OPTION_NAME_LEN];
|
||||
EFI_STATUS Status;
|
||||
EFI_KEY_DATA *HotkeyData;
|
||||
|
||||
if (mBmHotkeyBootOption.OptionNumber != LoadOptionNumberUnassigned) {
|
||||
//
|
||||
@@ -357,9 +369,10 @@ BmHotkeyCallback (
|
||||
|
||||
EfiAcquireLock (&mBmHotkeyLock);
|
||||
for ( Link = GetFirstNode (&mBmHotkeyList)
|
||||
; !IsNull (&mBmHotkeyList, Link)
|
||||
; Link = GetNextNode (&mBmHotkeyList, Link)
|
||||
) {
|
||||
; !IsNull (&mBmHotkeyList, Link)
|
||||
; Link = GetNextNode (&mBmHotkeyList, Link)
|
||||
)
|
||||
{
|
||||
Hotkey = BM_HOTKEY_FROM_LINK (Link);
|
||||
|
||||
//
|
||||
@@ -370,10 +383,10 @@ BmHotkeyCallback (
|
||||
if ((KeyData->Key.ScanCode == HotkeyData->Key.ScanCode) &&
|
||||
(KeyData->Key.UnicodeChar == HotkeyData->Key.UnicodeChar) &&
|
||||
(((KeyData->KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) != 0) ?
|
||||
(KeyData->KeyState.KeyShiftState == HotkeyData->KeyState.KeyShiftState) : TRUE
|
||||
(KeyData->KeyState.KeyShiftState == HotkeyData->KeyState.KeyShiftState) : TRUE
|
||||
)
|
||||
) {
|
||||
|
||||
)
|
||||
{
|
||||
//
|
||||
// Receive an expecting key stroke, transit to next waiting state
|
||||
//
|
||||
@@ -395,8 +408,11 @@ BmHotkeyCallback (
|
||||
// Launch its BootOption
|
||||
//
|
||||
UnicodeSPrint (
|
||||
OptionName, sizeof (OptionName), L"%s%04x",
|
||||
mBmLoadOptionName[LoadOptionTypeBoot], Hotkey->BootOption
|
||||
OptionName,
|
||||
sizeof (OptionName),
|
||||
L"%s%04x",
|
||||
mBmLoadOptionName[LoadOptionTypeBoot],
|
||||
Hotkey->BootOption
|
||||
);
|
||||
Status = EfiBootManagerVariableToLoadOption (OptionName, &mBmHotkeyBootOption);
|
||||
DEBUG ((DEBUG_INFO, "[Bds]Hotkey for %s pressed - %r\n", OptionName, Status));
|
||||
@@ -413,8 +429,8 @@ BmHotkeyCallback (
|
||||
//
|
||||
Hotkey->WaitingKey = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
EfiReleaseLock (&mBmHotkeyLock);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
@@ -432,11 +448,11 @@ BmHotkeyCallback (
|
||||
**/
|
||||
EFI_HANDLE *
|
||||
BmGetActiveConsoleIn (
|
||||
OUT UINTN *Count
|
||||
OUT UINTN *Count
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HANDLE *Handles;
|
||||
EFI_STATUS Status;
|
||||
EFI_HANDLE *Handles;
|
||||
|
||||
Handles = NULL;
|
||||
*Count = 0;
|
||||
@@ -479,20 +495,20 @@ BmGetActiveConsoleIn (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmUnregisterHotkeyNotify (
|
||||
IN BM_HOTKEY *Hotkey
|
||||
IN BM_HOTKEY *Hotkey
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
UINTN KeyIndex;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;
|
||||
VOID *NotifyHandle;
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
UINTN KeyIndex;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;
|
||||
VOID *NotifyHandle;
|
||||
|
||||
Handles = BmGetActiveConsoleIn (&HandleCount);
|
||||
for (Index = 0; Index < HandleCount; Index++) {
|
||||
Status = gBS->HandleProtocol (Handles[Index], &gEfiSimpleTextInputExProtocolGuid, (VOID **) &TxtInEx);
|
||||
Status = gBS->HandleProtocol (Handles[Index], &gEfiSimpleTextInputExProtocolGuid, (VOID **)&TxtInEx);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
for (KeyIndex = 0; KeyIndex < Hotkey->CodeCount; KeyIndex++) {
|
||||
Status = TxtInEx->RegisterKeyNotify (
|
||||
@@ -530,9 +546,9 @@ BmRegisterHotkeyNotify (
|
||||
IN BM_HOTKEY *Hotkey
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
VOID *NotifyHandle;
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
VOID *NotifyHandle;
|
||||
|
||||
for (Index = 0; Index < Hotkey->CodeCount; Index++) {
|
||||
Status = TxtInEx->RegisterKeyNotify (
|
||||
@@ -573,58 +589,64 @@ BmRegisterHotkeyNotify (
|
||||
**/
|
||||
VOID
|
||||
BmGenerateKeyShiftState (
|
||||
IN UINTN Depth,
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *KeyOption,
|
||||
IN UINT32 KeyShiftState,
|
||||
IN UINT32 *KeyShiftStates,
|
||||
IN UINTN *KeyShiftStateCount
|
||||
IN UINTN Depth,
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *KeyOption,
|
||||
IN UINT32 KeyShiftState,
|
||||
IN UINT32 *KeyShiftStates,
|
||||
IN UINTN *KeyShiftStateCount
|
||||
)
|
||||
{
|
||||
switch (Depth) {
|
||||
case 0:
|
||||
if (KeyOption->KeyData.Options.ShiftPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_SHIFT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_SHIFT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
if (KeyOption->KeyData.Options.ShiftPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_SHIFT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_SHIFT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
|
||||
case 1:
|
||||
if (KeyOption->KeyData.Options.ControlPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_CONTROL_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_CONTROL_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (KeyOption->KeyData.Options.AltPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_ALT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_ALT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (KeyOption->KeyData.Options.LogoPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_LOGO_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_LOGO_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (KeyOption->KeyData.Options.MenuPressed) {
|
||||
KeyShiftState |= EFI_MENU_KEY_PRESSED;
|
||||
}
|
||||
if (KeyOption->KeyData.Options.SysReqPressed) {
|
||||
KeyShiftState |= EFI_SYS_REQ_PRESSED;
|
||||
}
|
||||
KeyShiftStates[*KeyShiftStateCount] = KeyShiftState;
|
||||
(*KeyShiftStateCount)++;
|
||||
break;
|
||||
case 1:
|
||||
if (KeyOption->KeyData.Options.ControlPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_CONTROL_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_CONTROL_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (KeyOption->KeyData.Options.AltPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_ALT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_ALT_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
|
||||
break;
|
||||
case 3:
|
||||
if (KeyOption->KeyData.Options.LogoPressed) {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_RIGHT_LOGO_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState | EFI_LEFT_LOGO_PRESSED, KeyShiftStates, KeyShiftStateCount);
|
||||
} else {
|
||||
BmGenerateKeyShiftState (Depth + 1, KeyOption, KeyShiftState, KeyShiftStates, KeyShiftStateCount);
|
||||
}
|
||||
|
||||
break;
|
||||
case 4:
|
||||
if (KeyOption->KeyData.Options.MenuPressed) {
|
||||
KeyShiftState |= EFI_MENU_KEY_PRESSED;
|
||||
}
|
||||
|
||||
if (KeyOption->KeyData.Options.SysReqPressed) {
|
||||
KeyShiftState |= EFI_SYS_REQ_PRESSED;
|
||||
}
|
||||
|
||||
KeyShiftStates[*KeyShiftStateCount] = KeyShiftState;
|
||||
(*KeyShiftStateCount)++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,22 +658,22 @@ BmGenerateKeyShiftState (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmProcessKeyOption (
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *KeyOption
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *KeyOption
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
UINTN HandleIndex;
|
||||
UINTN Index;
|
||||
BM_HOTKEY *Hotkey;
|
||||
UINTN KeyIndex;
|
||||
EFI_STATUS Status;
|
||||
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN HandleCount;
|
||||
UINTN HandleIndex;
|
||||
UINTN Index;
|
||||
BM_HOTKEY *Hotkey;
|
||||
UINTN KeyIndex;
|
||||
//
|
||||
// 16 is enough to enumerate all the possible combination of LEFT_XXX and RIGHT_XXX
|
||||
//
|
||||
UINT32 KeyShiftStates[16];
|
||||
UINTN KeyShiftStateCount;
|
||||
UINT32 KeyShiftStates[16];
|
||||
UINTN KeyShiftStateCount;
|
||||
|
||||
if (KeyOption->KeyData.Options.InputKeyCount > mBmHotkeySupportCount) {
|
||||
return EFI_UNSUPPORTED;
|
||||
@@ -671,17 +693,18 @@ BmProcessKeyOption (
|
||||
|
||||
Hotkey->Signature = BM_HOTKEY_SIGNATURE;
|
||||
Hotkey->BootOption = KeyOption->BootOption;
|
||||
Hotkey->IsContinue = (BOOLEAN) (KeyOption == mBmContinueKeyOption);
|
||||
Hotkey->CodeCount = (UINT8) KeyOption->KeyData.Options.InputKeyCount;
|
||||
Hotkey->IsContinue = (BOOLEAN)(KeyOption == mBmContinueKeyOption);
|
||||
Hotkey->CodeCount = (UINT8)KeyOption->KeyData.Options.InputKeyCount;
|
||||
|
||||
for (KeyIndex = 0; KeyIndex < Hotkey->CodeCount; KeyIndex++) {
|
||||
CopyMem (&Hotkey->KeyData[KeyIndex].Key, &KeyOption->Keys[KeyIndex], sizeof (EFI_INPUT_KEY));
|
||||
Hotkey->KeyData[KeyIndex].KeyState.KeyShiftState = KeyShiftStates[Index];
|
||||
}
|
||||
|
||||
InsertTailList (&mBmHotkeyList, &Hotkey->Link);
|
||||
|
||||
for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
|
||||
Status = gBS->HandleProtocol (Handles[HandleIndex], &gEfiSimpleTextInputExProtocolGuid, (VOID **) &TxtInEx);
|
||||
Status = gBS->HandleProtocol (Handles[HandleIndex], &gEfiSimpleTextInputExProtocolGuid, (VOID **)&TxtInEx);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
BmRegisterHotkeyNotify (TxtInEx, Hotkey);
|
||||
}
|
||||
@@ -690,6 +713,7 @@ BmProcessKeyOption (
|
||||
if (Handles != NULL) {
|
||||
FreePool (Handles);
|
||||
}
|
||||
|
||||
EfiReleaseLock (&mBmHotkeyLock);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
@@ -705,8 +729,8 @@ BmProcessKeyOption (
|
||||
VOID
|
||||
EFIAPI
|
||||
BmTxtInExCallback (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -717,24 +741,24 @@ BmTxtInExCallback (
|
||||
|
||||
while (TRUE) {
|
||||
BufferSize = sizeof (EFI_HANDLE);
|
||||
Status = gBS->LocateHandle (
|
||||
ByRegisterNotify,
|
||||
NULL,
|
||||
mBmTxtInExRegistration,
|
||||
&BufferSize,
|
||||
&Handle
|
||||
);
|
||||
Status = gBS->LocateHandle (
|
||||
ByRegisterNotify,
|
||||
NULL,
|
||||
mBmTxtInExRegistration,
|
||||
&BufferSize,
|
||||
&Handle
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
//
|
||||
// If no more notification events exist
|
||||
//
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
Status = gBS->HandleProtocol (
|
||||
Handle,
|
||||
&gEfiSimpleTextInputExProtocolGuid,
|
||||
(VOID **) &TxtInEx
|
||||
(VOID **)&TxtInEx
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
@@ -745,6 +769,7 @@ BmTxtInExCallback (
|
||||
for (Link = GetFirstNode (&mBmHotkeyList); !IsNull (&mBmHotkeyList, Link); Link = GetNextNode (&mBmHotkeyList, Link)) {
|
||||
BmRegisterHotkeyNotify (TxtInEx, BM_HOTKEY_FROM_LINK (Link));
|
||||
}
|
||||
|
||||
EfiReleaseLock (&mBmHotkeyLock);
|
||||
}
|
||||
}
|
||||
@@ -760,8 +785,8 @@ BmTxtInExCallback (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmFreeKeyOptions (
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions,
|
||||
IN UINTN KeyOptionCount
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions,
|
||||
IN UINTN KeyOptionCount
|
||||
)
|
||||
{
|
||||
if (KeyOptions != NULL) {
|
||||
@@ -786,7 +811,7 @@ BmFreeKeyOptions (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiBootManagerRegisterContinueKeyOption (
|
||||
IN UINT32 Modifier,
|
||||
IN UINT32 Modifier,
|
||||
...
|
||||
)
|
||||
{
|
||||
@@ -823,12 +848,12 @@ EfiBootManagerRegisterContinueKeyOption (
|
||||
VOID
|
||||
EFIAPI
|
||||
BmStopHotkeyService (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
LIST_ENTRY *Link;
|
||||
BM_HOTKEY *Hotkey;
|
||||
LIST_ENTRY *Link;
|
||||
BM_HOTKEY *Hotkey;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "[Bds]Stop Hotkey Service!\n"));
|
||||
gBS->CloseEvent (Event);
|
||||
@@ -837,9 +862,10 @@ BmStopHotkeyService (
|
||||
for (Link = GetFirstNode (&mBmHotkeyList); !IsNull (&mBmHotkeyList, Link); ) {
|
||||
Hotkey = BM_HOTKEY_FROM_LINK (Link);
|
||||
BmUnregisterHotkeyNotify (Hotkey);
|
||||
Link = RemoveEntryList (Link);
|
||||
Link = RemoveEntryList (Link);
|
||||
FreePool (Hotkey);
|
||||
}
|
||||
|
||||
EfiReleaseLock (&mBmHotkeyLock);
|
||||
}
|
||||
|
||||
@@ -854,7 +880,7 @@ BmStopHotkeyService (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiBootManagerStartHotkeyService (
|
||||
IN EFI_EVENT *HotkeyTriggered
|
||||
IN EFI_EVENT *HotkeyTriggered
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -864,11 +890,12 @@ EfiBootManagerStartHotkeyService (
|
||||
EFI_EVENT Event;
|
||||
UINT32 *BootOptionSupport;
|
||||
|
||||
GetEfiGlobalVariable2 (EFI_BOOT_OPTION_SUPPORT_VARIABLE_NAME, (VOID **) &BootOptionSupport, NULL);
|
||||
GetEfiGlobalVariable2 (EFI_BOOT_OPTION_SUPPORT_VARIABLE_NAME, (VOID **)&BootOptionSupport, NULL);
|
||||
if (BootOptionSupport != NULL) {
|
||||
if ((*BootOptionSupport & EFI_BOOT_OPTION_SUPPORT_KEY) != 0) {
|
||||
mBmHotkeySupportCount = ((*BootOptionSupport & EFI_BOOT_OPTION_SUPPORT_COUNT) >> LowBitSet32 (EFI_BOOT_OPTION_SUPPORT_COUNT));
|
||||
}
|
||||
|
||||
FreePool (BootOptionSupport);
|
||||
}
|
||||
|
||||
@@ -891,9 +918,10 @@ EfiBootManagerStartHotkeyService (
|
||||
}
|
||||
|
||||
KeyOptions = BmGetKeyOptions (&KeyOptionCount);
|
||||
for (Index = 0; Index < KeyOptionCount; Index ++) {
|
||||
for (Index = 0; Index < KeyOptionCount; Index++) {
|
||||
BmProcessKeyOption (&KeyOptions[Index]);
|
||||
}
|
||||
|
||||
BmFreeKeyOptions (KeyOptions, KeyOptionCount);
|
||||
|
||||
if (mBmContinueKeyOption != NULL) {
|
||||
@@ -942,27 +970,30 @@ EfiBootManagerStartHotkeyService (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiBootManagerAddKeyOptionVariable (
|
||||
OUT EFI_BOOT_MANAGER_KEY_OPTION *AddedOption OPTIONAL,
|
||||
IN UINT16 BootOptionNumber,
|
||||
IN UINT32 Modifier,
|
||||
OUT EFI_BOOT_MANAGER_KEY_OPTION *AddedOption OPTIONAL,
|
||||
IN UINT16 BootOptionNumber,
|
||||
IN UINT32 Modifier,
|
||||
...
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
VA_LIST Args;
|
||||
VOID *BootOption;
|
||||
UINTN BootOptionSize;
|
||||
CHAR16 BootOptionName[BM_OPTION_NAME_LEN];
|
||||
EFI_BOOT_MANAGER_KEY_OPTION KeyOption;
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions;
|
||||
UINTN KeyOptionCount;
|
||||
UINTN Index;
|
||||
UINTN KeyOptionNumber;
|
||||
CHAR16 KeyOptionName[sizeof ("Key####")];
|
||||
EFI_STATUS Status;
|
||||
VA_LIST Args;
|
||||
VOID *BootOption;
|
||||
UINTN BootOptionSize;
|
||||
CHAR16 BootOptionName[BM_OPTION_NAME_LEN];
|
||||
EFI_BOOT_MANAGER_KEY_OPTION KeyOption;
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions;
|
||||
UINTN KeyOptionCount;
|
||||
UINTN Index;
|
||||
UINTN KeyOptionNumber;
|
||||
CHAR16 KeyOptionName[sizeof ("Key####")];
|
||||
|
||||
UnicodeSPrint (
|
||||
BootOptionName, sizeof (BootOptionName), L"%s%04x",
|
||||
mBmLoadOptionName[LoadOptionTypeBoot], BootOptionNumber
|
||||
BootOptionName,
|
||||
sizeof (BootOptionName),
|
||||
L"%s%04x",
|
||||
mBmLoadOptionName[LoadOptionTypeBoot],
|
||||
BootOptionNumber
|
||||
);
|
||||
GetEfiGlobalVariable2 (BootOptionName, &BootOption, &BootOptionSize);
|
||||
|
||||
@@ -972,7 +1003,7 @@ EfiBootManagerAddKeyOptionVariable (
|
||||
|
||||
ZeroMem (&KeyOption, sizeof (EFI_BOOT_MANAGER_KEY_OPTION));
|
||||
KeyOption.BootOption = BootOptionNumber;
|
||||
Status = gBS->CalculateCrc32 (BootOption, BootOptionSize, &KeyOption.BootOptionCrc);
|
||||
Status = gBS->CalculateCrc32 (BootOption, BootOptionSize, &KeyOption.BootOptionCrc);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
FreePool (BootOption);
|
||||
|
||||
@@ -990,16 +1021,19 @@ EfiBootManagerAddKeyOptionVariable (
|
||||
KeyOptions = BmGetKeyOptions (&KeyOptionCount);
|
||||
for (Index = 0; Index < KeyOptionCount; Index++) {
|
||||
if ((KeyOptions[Index].KeyData.PackedValue == KeyOption.KeyData.PackedValue) &&
|
||||
(CompareMem (KeyOptions[Index].Keys, KeyOption.Keys, KeyOption.KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY)) == 0)) {
|
||||
(CompareMem (KeyOptions[Index].Keys, KeyOption.Keys, KeyOption.KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY)) == 0))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if ((KeyOptionNumber == LoadOptionNumberUnassigned) &&
|
||||
(KeyOptions[Index].OptionNumber > Index)
|
||||
){
|
||||
)
|
||||
{
|
||||
KeyOptionNumber = Index;
|
||||
}
|
||||
}
|
||||
|
||||
BmFreeKeyOptions (KeyOptions, KeyOptionCount);
|
||||
|
||||
if (Index < KeyOptionCount) {
|
||||
@@ -1053,22 +1087,22 @@ EfiBootManagerAddKeyOptionVariable (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiBootManagerDeleteKeyOptionVariable (
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *DeletedOption OPTIONAL,
|
||||
IN UINT32 Modifier,
|
||||
IN EFI_BOOT_MANAGER_KEY_OPTION *DeletedOption OPTIONAL,
|
||||
IN UINT32 Modifier,
|
||||
...
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
VA_LIST Args;
|
||||
EFI_BOOT_MANAGER_KEY_OPTION KeyOption;
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions;
|
||||
UINTN KeyOptionCount;
|
||||
LIST_ENTRY *Link;
|
||||
BM_HOTKEY *Hotkey;
|
||||
UINT32 ShiftState;
|
||||
BOOLEAN Match;
|
||||
CHAR16 KeyOptionName[sizeof ("Key####")];
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
VA_LIST Args;
|
||||
EFI_BOOT_MANAGER_KEY_OPTION KeyOption;
|
||||
EFI_BOOT_MANAGER_KEY_OPTION *KeyOptions;
|
||||
UINTN KeyOptionCount;
|
||||
LIST_ENTRY *Link;
|
||||
BM_HOTKEY *Hotkey;
|
||||
UINT32 ShiftState;
|
||||
BOOLEAN Match;
|
||||
CHAR16 KeyOptionName[sizeof ("Key####")];
|
||||
|
||||
ZeroMem (&KeyOption, sizeof (EFI_BOOT_MANAGER_KEY_OPTION));
|
||||
VA_START (Args, Modifier);
|
||||
@@ -1086,19 +1120,20 @@ EfiBootManagerDeleteKeyOptionVariable (
|
||||
//
|
||||
for (Link = GetFirstNode (&mBmHotkeyList); !IsNull (&mBmHotkeyList, Link); ) {
|
||||
Hotkey = BM_HOTKEY_FROM_LINK (Link);
|
||||
Match = (BOOLEAN) (Hotkey->CodeCount == KeyOption.KeyData.Options.InputKeyCount);
|
||||
Match = (BOOLEAN)(Hotkey->CodeCount == KeyOption.KeyData.Options.InputKeyCount);
|
||||
|
||||
for (Index = 0; Match && (Index < Hotkey->CodeCount); Index++) {
|
||||
ShiftState = Hotkey->KeyData[Index].KeyState.KeyShiftState;
|
||||
if (
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_SHIFT_PRESSED | EFI_LEFT_SHIFT_PRESSED) != KeyOption.KeyData.Options.ShiftPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_CONTROL_PRESSED | EFI_LEFT_CONTROL_PRESSED) != KeyOption.KeyData.Options.ControlPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_ALT_PRESSED | EFI_LEFT_ALT_PRESSED) != KeyOption.KeyData.Options.AltPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_LOGO_PRESSED | EFI_LEFT_LOGO_PRESSED) != KeyOption.KeyData.Options.LogoPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_MENU_KEY_PRESSED) != KeyOption.KeyData.Options.MenuPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_SYS_REQ_PRESSED) != KeyOption.KeyData.Options.SysReqPressed) ||
|
||||
(CompareMem (&Hotkey->KeyData[Index].Key, &KeyOption.Keys[Index], sizeof (EFI_INPUT_KEY)) != 0)
|
||||
) {
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_SHIFT_PRESSED | EFI_LEFT_SHIFT_PRESSED) != KeyOption.KeyData.Options.ShiftPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_CONTROL_PRESSED | EFI_LEFT_CONTROL_PRESSED) != KeyOption.KeyData.Options.ControlPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_ALT_PRESSED | EFI_LEFT_ALT_PRESSED) != KeyOption.KeyData.Options.AltPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_RIGHT_LOGO_PRESSED | EFI_LEFT_LOGO_PRESSED) != KeyOption.KeyData.Options.LogoPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_MENU_KEY_PRESSED) != KeyOption.KeyData.Options.MenuPressed) ||
|
||||
(BmBitSet (ShiftState, EFI_SYS_REQ_PRESSED) != KeyOption.KeyData.Options.SysReqPressed) ||
|
||||
(CompareMem (&Hotkey->KeyData[Index].Key, &KeyOption.Keys[Index], sizeof (EFI_INPUT_KEY)) != 0)
|
||||
)
|
||||
{
|
||||
//
|
||||
// Break when any field doesn't match
|
||||
//
|
||||
@@ -1123,26 +1158,31 @@ EfiBootManagerDeleteKeyOptionVariable (
|
||||
for (Index = 0; Index < KeyOptionCount; Index++) {
|
||||
if ((KeyOptions[Index].KeyData.PackedValue == KeyOption.KeyData.PackedValue) &&
|
||||
(CompareMem (
|
||||
KeyOptions[Index].Keys, KeyOption.Keys,
|
||||
KeyOption.KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY)) == 0)
|
||||
) {
|
||||
KeyOptions[Index].Keys,
|
||||
KeyOption.Keys,
|
||||
KeyOption.KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY)
|
||||
) == 0)
|
||||
)
|
||||
{
|
||||
UnicodeSPrint (KeyOptionName, sizeof (KeyOptionName), L"Key%04x", KeyOptions[Index].OptionNumber);
|
||||
Status = gRT->SetVariable (
|
||||
KeyOptionName,
|
||||
&gEfiGlobalVariableGuid,
|
||||
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
KeyOptionName,
|
||||
&gEfiGlobalVariableGuid,
|
||||
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
//
|
||||
// Return the deleted key option in case needed by caller
|
||||
//
|
||||
if (DeletedOption != NULL) {
|
||||
CopyMem (DeletedOption, &KeyOptions[Index], sizeof (EFI_BOOT_MANAGER_KEY_OPTION));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
BmFreeKeyOptions (KeyOptions, KeyOptionCount);
|
||||
|
||||
EfiReleaseLock (&mBmHotkeyLock);
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -37,27 +37,27 @@ BmDelPartMatchInstance (
|
||||
NewDevicePath = NULL;
|
||||
TempNewDevicePath = NULL;
|
||||
|
||||
if (Multi == NULL || Single == NULL) {
|
||||
if ((Multi == NULL) || (Single == NULL)) {
|
||||
return Multi;
|
||||
}
|
||||
|
||||
Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);
|
||||
SingleDpSize = GetDevicePathSize (Single) - END_DEVICE_PATH_LENGTH;
|
||||
InstanceSize -= END_DEVICE_PATH_LENGTH;
|
||||
Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);
|
||||
SingleDpSize = GetDevicePathSize (Single) - END_DEVICE_PATH_LENGTH;
|
||||
InstanceSize -= END_DEVICE_PATH_LENGTH;
|
||||
|
||||
while (Instance != NULL) {
|
||||
|
||||
if (CompareMem (Instance, Single, MIN (SingleDpSize, InstanceSize)) != 0) {
|
||||
//
|
||||
// Append the device path instance which does not match with Single
|
||||
//
|
||||
TempNewDevicePath = NewDevicePath;
|
||||
NewDevicePath = AppendDevicePathInstance (NewDevicePath, Instance);
|
||||
NewDevicePath = AppendDevicePathInstance (NewDevicePath, Instance);
|
||||
if (TempNewDevicePath != NULL) {
|
||||
FreePool(TempNewDevicePath);
|
||||
FreePool (TempNewDevicePath);
|
||||
}
|
||||
}
|
||||
FreePool(Instance);
|
||||
|
||||
FreePool (Instance);
|
||||
Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);
|
||||
InstanceSize -= END_DEVICE_PATH_LENGTH;
|
||||
}
|
||||
@@ -88,7 +88,7 @@ BmMatchDevicePaths (
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePathInst;
|
||||
UINTN Size;
|
||||
|
||||
if (Multi == NULL || Single == NULL) {
|
||||
if ((Multi == NULL) || (Single == NULL)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ BmMatchDevicePaths (
|
||||
**/
|
||||
VOID
|
||||
BmSetMemoryTypeInformationVariable (
|
||||
IN BOOLEAN Boot
|
||||
IN BOOLEAN Boot
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -147,7 +147,6 @@ BmSetMemoryTypeInformationVariable (
|
||||
MemoryTypeInformationModified = FALSE;
|
||||
MemoryTypeInformationVariableExists = FALSE;
|
||||
|
||||
|
||||
BootMode = GetBootModeHob ();
|
||||
//
|
||||
// In BOOT_IN_RECOVERY_MODE, Variable region is not reliable.
|
||||
@@ -163,13 +162,13 @@ BmSetMemoryTypeInformationVariable (
|
||||
//
|
||||
if (BootMode != BOOT_WITH_DEFAULT_SETTINGS) {
|
||||
VariableSize = 0;
|
||||
Status = gRT->GetVariable (
|
||||
EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME,
|
||||
&gEfiMemoryTypeInformationGuid,
|
||||
NULL,
|
||||
&VariableSize,
|
||||
NULL
|
||||
);
|
||||
Status = gRT->GetVariable (
|
||||
EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME,
|
||||
&gEfiMemoryTypeInformationGuid,
|
||||
NULL,
|
||||
&VariableSize,
|
||||
NULL
|
||||
);
|
||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||
MemoryTypeInformationVariableExists = TRUE;
|
||||
}
|
||||
@@ -181,9 +180,9 @@ BmSetMemoryTypeInformationVariable (
|
||||
//
|
||||
Status = EfiGetSystemConfigurationTable (
|
||||
&gEfiMemoryTypeInformationGuid,
|
||||
(VOID **) &CurrentMemoryTypeInformation
|
||||
(VOID **)&CurrentMemoryTypeInformation
|
||||
);
|
||||
if (EFI_ERROR (Status) || CurrentMemoryTypeInformation == NULL) {
|
||||
if (EFI_ERROR (Status) || (CurrentMemoryTypeInformation == NULL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -199,6 +198,7 @@ BmSetMemoryTypeInformationVariable (
|
||||
//
|
||||
return;
|
||||
}
|
||||
|
||||
VariableSize = GET_GUID_HOB_DATA_SIZE (GuidHob);
|
||||
PreviousMemoryTypeInformation = AllocateCopyPool (VariableSize, GET_GUID_HOB_DATA (GuidHob));
|
||||
if (PreviousMemoryTypeInformation == NULL) {
|
||||
@@ -213,12 +213,12 @@ BmSetMemoryTypeInformationVariable (
|
||||
DEBUG ((DEBUG_INFO, "====== ======== ======== ========\n"));
|
||||
|
||||
for (Index = 0; PreviousMemoryTypeInformation[Index].Type != EfiMaxMemoryType; Index++) {
|
||||
|
||||
for (Index1 = 0; CurrentMemoryTypeInformation[Index1].Type != EfiMaxMemoryType; Index1++) {
|
||||
if (PreviousMemoryTypeInformation[Index].Type == CurrentMemoryTypeInformation[Index1].Type) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (CurrentMemoryTypeInformation[Index1].Type == EfiMaxMemoryType) {
|
||||
continue;
|
||||
}
|
||||
@@ -244,13 +244,14 @@ BmSetMemoryTypeInformationVariable (
|
||||
} else if (Current > Previous) {
|
||||
Next = Current + (Current >> 2);
|
||||
}
|
||||
if (Next > 0 && Next < 4) {
|
||||
|
||||
if ((Next > 0) && (Next < 4)) {
|
||||
Next = 4;
|
||||
}
|
||||
|
||||
if (Next != Previous) {
|
||||
PreviousMemoryTypeInformation[Index].NumberOfPages = Next;
|
||||
MemoryTypeInformationModified = TRUE;
|
||||
MemoryTypeInformationModified = TRUE;
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, " %02x %08x %08x %08x\n", PreviousMemoryTypeInformation[Index].Type, Previous, Current, Next));
|
||||
@@ -286,6 +287,7 @@ BmSetMemoryTypeInformationVariable (
|
||||
DEBUG ((DEBUG_ERROR, "Memory Type Information settings cannot be saved. OS S4 may fail!\n"));
|
||||
}
|
||||
}
|
||||
|
||||
FreePool (PreviousMemoryTypeInformation);
|
||||
}
|
||||
|
||||
@@ -324,11 +326,11 @@ BmSetMemoryTypeInformationVariable (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmSetVariableAndReportStatusCodeOnError (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN UINT32 Attributes,
|
||||
IN UINTN DataSize,
|
||||
IN VOID *Data
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN UINT32 Attributes,
|
||||
IN UINTN DataSize,
|
||||
IN VOID *Data
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -343,7 +345,7 @@ BmSetVariableAndReportStatusCodeOnError (
|
||||
Data
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
NameSize = StrSize (VariableName);
|
||||
NameSize = StrSize (VariableName);
|
||||
SetVariableStatus = AllocatePool (sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + DataSize);
|
||||
if (SetVariableStatus != NULL) {
|
||||
CopyGuid (&SetVariableStatus->Guid, VendorGuid);
|
||||
@@ -351,8 +353,8 @@ BmSetVariableAndReportStatusCodeOnError (
|
||||
SetVariableStatus->DataSize = DataSize;
|
||||
SetVariableStatus->SetStatus = Status;
|
||||
SetVariableStatus->Attributes = Attributes;
|
||||
CopyMem (SetVariableStatus + 1, VariableName, NameSize);
|
||||
CopyMem (((UINT8 *) (SetVariableStatus + 1)) + NameSize, Data, DataSize);
|
||||
CopyMem (SetVariableStatus + 1, VariableName, NameSize);
|
||||
CopyMem (((UINT8 *)(SetVariableStatus + 1)) + NameSize, Data, DataSize);
|
||||
|
||||
REPORT_STATUS_CODE_EX (
|
||||
EFI_ERROR_CODE,
|
||||
@@ -371,7 +373,6 @@ BmSetVariableAndReportStatusCodeOnError (
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Print the device path info.
|
||||
|
||||
@@ -379,10 +380,10 @@ BmSetVariableAndReportStatusCodeOnError (
|
||||
**/
|
||||
VOID
|
||||
BmPrintDp (
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
)
|
||||
{
|
||||
CHAR16 *Str;
|
||||
CHAR16 *Str;
|
||||
|
||||
Str = ConvertDevicePathToText (DevicePath, FALSE, FALSE);
|
||||
DEBUG ((DEBUG_INFO, "%s", Str));
|
||||
@@ -401,7 +402,7 @@ BmPrintDp (
|
||||
**/
|
||||
UINTN
|
||||
BmCharToUint (
|
||||
IN CHAR16 Char
|
||||
IN CHAR16 Char
|
||||
)
|
||||
{
|
||||
if ((Char >= L'0') && (Char <= L'9')) {
|
||||
@@ -412,7 +413,7 @@ BmCharToUint (
|
||||
return (Char - L'A' + 0xA);
|
||||
}
|
||||
|
||||
return (UINTN) -1;
|
||||
return (UINTN)-1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -428,32 +429,32 @@ EfiBootManagerDispatchDeferredImages (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_DEFERRED_IMAGE_LOAD_PROTOCOL *DeferredImage;
|
||||
UINTN HandleCount;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN Index;
|
||||
UINTN ImageIndex;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ImageDevicePath;
|
||||
VOID *Image;
|
||||
UINTN ImageSize;
|
||||
BOOLEAN BootOption;
|
||||
EFI_HANDLE ImageHandle;
|
||||
UINTN ImageCount;
|
||||
UINTN LoadCount;
|
||||
EFI_STATUS Status;
|
||||
EFI_DEFERRED_IMAGE_LOAD_PROTOCOL *DeferredImage;
|
||||
UINTN HandleCount;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN Index;
|
||||
UINTN ImageIndex;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ImageDevicePath;
|
||||
VOID *Image;
|
||||
UINTN ImageSize;
|
||||
BOOLEAN BootOption;
|
||||
EFI_HANDLE ImageHandle;
|
||||
UINTN ImageCount;
|
||||
UINTN LoadCount;
|
||||
|
||||
//
|
||||
// Find all the deferred image load protocols.
|
||||
//
|
||||
HandleCount = 0;
|
||||
Handles = NULL;
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
&gEfiDeferredImageLoadProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&Handles
|
||||
);
|
||||
Handles = NULL;
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
&gEfiDeferredImageLoadProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&Handles
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
@@ -461,12 +462,12 @@ EfiBootManagerDispatchDeferredImages (
|
||||
ImageCount = 0;
|
||||
LoadCount = 0;
|
||||
for (Index = 0; Index < HandleCount; Index++) {
|
||||
Status = gBS->HandleProtocol (Handles[Index], &gEfiDeferredImageLoadProtocolGuid, (VOID **) &DeferredImage);
|
||||
Status = gBS->HandleProtocol (Handles[Index], &gEfiDeferredImageLoadProtocolGuid, (VOID **)&DeferredImage);
|
||||
if (EFI_ERROR (Status)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (ImageIndex = 0; ;ImageIndex++) {
|
||||
for (ImageIndex = 0; ; ImageIndex++) {
|
||||
//
|
||||
// Load all the deferred images in this protocol instance.
|
||||
//
|
||||
@@ -474,25 +475,26 @@ EfiBootManagerDispatchDeferredImages (
|
||||
DeferredImage,
|
||||
ImageIndex,
|
||||
&ImageDevicePath,
|
||||
(VOID **) &Image,
|
||||
(VOID **)&Image,
|
||||
&ImageSize,
|
||||
&BootOption
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
break;
|
||||
}
|
||||
|
||||
ImageCount++;
|
||||
//
|
||||
// Load and start the image.
|
||||
//
|
||||
Status = gBS->LoadImage (
|
||||
BootOption,
|
||||
gImageHandle,
|
||||
ImageDevicePath,
|
||||
NULL,
|
||||
0,
|
||||
&ImageHandle
|
||||
);
|
||||
BootOption,
|
||||
gImageHandle,
|
||||
ImageDevicePath,
|
||||
NULL,
|
||||
0,
|
||||
&ImageHandle
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
//
|
||||
// With EFI_SECURITY_VIOLATION retval, the Image was loaded and an ImageHandle was created
|
||||
@@ -519,6 +521,7 @@ EfiBootManagerDispatchDeferredImages (
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Handles != NULL) {
|
||||
FreePool (Handles);
|
||||
}
|
||||
|
@@ -72,15 +72,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#include <Library/HiiLib.h>
|
||||
|
||||
#if !defined (EFI_REMOVABLE_MEDIA_FILE_NAME)
|
||||
#if defined (MDE_CPU_EBC)
|
||||
//
|
||||
// Uefi specification only defines the default boot file name for IA32, X64
|
||||
// and IPF processor, so need define boot file name for EBC architecture here.
|
||||
//
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME L"\\EFI\\BOOT\\BOOTEBC.EFI"
|
||||
#else
|
||||
#error "Can not determine the default boot file name for unknown processor type!"
|
||||
#endif
|
||||
#if defined (MDE_CPU_EBC)
|
||||
//
|
||||
// Uefi specification only defines the default boot file name for IA32, X64
|
||||
// and IPF processor, so need define boot file name for EBC architecture here.
|
||||
//
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME L"\\EFI\\BOOT\\BOOTEBC.EFI"
|
||||
#else
|
||||
#error "Can not determine the default boot file name for unknown processor type!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
@@ -95,21 +95,21 @@ typedef enum {
|
||||
|
||||
typedef
|
||||
CHAR16 *
|
||||
(* BM_GET_BOOT_DESCRIPTION) (
|
||||
IN EFI_HANDLE Handle
|
||||
(*BM_GET_BOOT_DESCRIPTION) (
|
||||
IN EFI_HANDLE Handle
|
||||
);
|
||||
|
||||
//
|
||||
// PlatformRecovery#### is the load option with the longest name
|
||||
//
|
||||
#define BM_OPTION_NAME_LEN sizeof ("PlatformRecovery####")
|
||||
#define BM_OPTION_NAME_LEN sizeof ("PlatformRecovery####")
|
||||
extern CHAR16 *mBmLoadOptionName[];
|
||||
|
||||
//
|
||||
// Maximum number of reconnect retry to repair controller; it is to limit the
|
||||
// number of recursive call of BmRepairAllControllers.
|
||||
//
|
||||
#define MAX_RECONNECT_REPAIR 10
|
||||
#define MAX_RECONNECT_REPAIR 10
|
||||
|
||||
/**
|
||||
Visitor function to be called by BmForEachVariable for each variable
|
||||
@@ -122,9 +122,9 @@ extern CHAR16 *mBmLoadOptionName[];
|
||||
typedef
|
||||
VOID
|
||||
(*BM_VARIABLE_VISITOR) (
|
||||
CHAR16 *Name,
|
||||
EFI_GUID *Guid,
|
||||
VOID *Context
|
||||
CHAR16 *Name,
|
||||
EFI_GUID *Guid,
|
||||
VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -135,15 +135,15 @@ VOID
|
||||
**/
|
||||
VOID
|
||||
BmForEachVariable (
|
||||
BM_VARIABLE_VISITOR Visitor,
|
||||
VOID *Context
|
||||
BM_VARIABLE_VISITOR Visitor,
|
||||
VOID *Context
|
||||
);
|
||||
|
||||
#define BM_BOOT_DESCRIPTION_ENTRY_SIGNATURE SIGNATURE_32 ('b', 'm', 'd', 'h')
|
||||
#define BM_BOOT_DESCRIPTION_ENTRY_SIGNATURE SIGNATURE_32 ('b', 'm', 'd', 'h')
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
EFI_BOOT_MANAGER_BOOT_DESCRIPTION_HANDLER Handler;
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
EFI_BOOT_MANAGER_BOOT_DESCRIPTION_HANDLER Handler;
|
||||
} BM_BOOT_DESCRIPTION_ENTRY;
|
||||
|
||||
/**
|
||||
@@ -154,22 +154,22 @@ typedef struct {
|
||||
**/
|
||||
VOID
|
||||
BmRepairAllControllers (
|
||||
UINTN ReconnectRepairCount
|
||||
UINTN ReconnectRepairCount
|
||||
);
|
||||
|
||||
#define BM_HOTKEY_SIGNATURE SIGNATURE_32 ('b', 'm', 'h', 'k')
|
||||
#define BM_HOTKEY_SIGNATURE SIGNATURE_32 ('b', 'm', 'h', 'k')
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
BOOLEAN IsContinue;
|
||||
UINT16 BootOption;
|
||||
UINT8 CodeCount;
|
||||
UINT8 WaitingKey;
|
||||
EFI_KEY_DATA KeyData[3];
|
||||
BOOLEAN IsContinue;
|
||||
UINT16 BootOption;
|
||||
UINT8 CodeCount;
|
||||
UINT8 WaitingKey;
|
||||
EFI_KEY_DATA KeyData[3];
|
||||
} BM_HOTKEY;
|
||||
|
||||
#define BM_HOTKEY_FROM_LINK(a) CR (a, BM_HOTKEY, Link, BM_HOTKEY_SIGNATURE)
|
||||
#define BM_HOTKEY_FROM_LINK(a) CR (a, BM_HOTKEY, Link, BM_HOTKEY_SIGNATURE)
|
||||
|
||||
/**
|
||||
Get the Option Number that wasn't used.
|
||||
@@ -184,8 +184,8 @@ typedef struct {
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmGetFreeOptionNumber (
|
||||
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE LoadOptionType,
|
||||
OUT UINT16 *FreeOptionNumber
|
||||
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE LoadOptionType,
|
||||
OUT UINT16 *FreeOptionNumber
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -200,7 +200,7 @@ BmGetFreeOptionNumber (
|
||||
**/
|
||||
VOID
|
||||
BmSetMemoryTypeInformationVariable (
|
||||
IN BOOLEAN Boot
|
||||
IN BOOLEAN Boot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -217,8 +217,8 @@ BmSetMemoryTypeInformationVariable (
|
||||
**/
|
||||
BOOLEAN
|
||||
BmMatchPartitionDevicePathNode (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath,
|
||||
IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath,
|
||||
IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -237,7 +237,7 @@ BmMatchPartitionDevicePathNode (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmConnectUsbShortFormDevicePath (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -249,8 +249,8 @@ BmConnectUsbShortFormDevicePath (
|
||||
VOID
|
||||
EFIAPI
|
||||
BmStopHotkeyService (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -288,11 +288,11 @@ BmStopHotkeyService (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BmSetVariableAndReportStatusCodeOnError (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN UINT32 Attributes,
|
||||
IN UINTN DataSize,
|
||||
IN VOID *Data
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN UINT32 Attributes,
|
||||
IN UINTN DataSize,
|
||||
IN VOID *Data
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -340,7 +340,7 @@ BmDelPartMatchInstance (
|
||||
**/
|
||||
VOID
|
||||
BmPrintDp (
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -353,7 +353,7 @@ BmPrintDp (
|
||||
**/
|
||||
UINTN
|
||||
BmCharToUint (
|
||||
IN CHAR16 Char
|
||||
IN CHAR16 Char
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -365,7 +365,7 @@ BmCharToUint (
|
||||
**/
|
||||
CHAR16 *
|
||||
BmGetBootDescription (
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_HANDLE Handle
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -377,8 +377,8 @@ BmGetBootDescription (
|
||||
**/
|
||||
VOID
|
||||
BmMakeBootOptionDescriptionUnique (
|
||||
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions,
|
||||
UINTN BootOptionCount
|
||||
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions,
|
||||
UINTN BootOptionCount
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -391,8 +391,8 @@ BmMakeBootOptionDescriptionUnique (
|
||||
**/
|
||||
EFI_DEVICE_PATH_PROTOCOL *
|
||||
BmExpandLoadFile (
|
||||
IN EFI_HANDLE LoadFileHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
|
||||
IN EFI_HANDLE LoadFileHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -404,7 +404,7 @@ BmExpandLoadFile (
|
||||
**/
|
||||
EFI_DEVICE_PATH_PROTOCOL *
|
||||
BmGetRamDiskDevicePath (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -418,7 +418,7 @@ BmGetRamDiskDevicePath (
|
||||
**/
|
||||
VOID
|
||||
BmDestroyRamDisk (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RamDiskDevicePath
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RamDiskDevicePath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -434,8 +434,8 @@ BmDestroyRamDisk (
|
||||
**/
|
||||
EFI_DEVICE_PATH_PROTOCOL *
|
||||
BmGetNextLoadOptionDevicePath (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FullPath
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FullPath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -460,9 +460,10 @@ BmGetNextLoadOptionDevicePath (
|
||||
**/
|
||||
VOID *
|
||||
BmGetNextLoadOptionBuffer (
|
||||
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE Type,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
|
||||
OUT EFI_DEVICE_PATH_PROTOCOL **FullPath,
|
||||
OUT UINTN *FileSize
|
||||
IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE Type,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
|
||||
OUT EFI_DEVICE_PATH_PROTOCOL **FullPath,
|
||||
OUT UINTN *FileSize
|
||||
);
|
||||
|
||||
#endif // _INTERNAL_BM_H_
|
||||
|
Reference in New Issue
Block a user