mirror of https://github.com/acidanthera/audk.git
Fix bug that some boot option can *not* be displayed correct in boot manager and boot maintain manager.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8956 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
e6d4b9d5a3
commit
5caec787e1
|
@ -875,7 +875,9 @@ BOpt_GetBootOptions (
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
UINTN MenuCount;
|
UINTN MenuCount;
|
||||||
UINT8 *Ptr;
|
UINT8 *Ptr;
|
||||||
|
UINTN DevicePathType;
|
||||||
|
CHAR16 *HiiString;
|
||||||
|
|
||||||
MenuCount = 0;
|
MenuCount = 0;
|
||||||
BootOrderListSize = 0;
|
BootOrderListSize = 0;
|
||||||
BootNextSize = 0;
|
BootNextSize = 0;
|
||||||
|
@ -1010,15 +1012,58 @@ BOpt_GetBootOptions (
|
||||||
|
|
||||||
NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;
|
NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;
|
||||||
LoadOptionPtr += sizeof (UINT16);
|
LoadOptionPtr += sizeof (UINT16);
|
||||||
|
|
||||||
StringSize = StrSize ((UINT16 *) LoadOptionPtr);
|
StringSize = StrSize((UINT16*)LoadOptionPtr);
|
||||||
NewLoadContext->Description = AllocateZeroPool (StringSize);
|
//
|
||||||
|
// Get Hii description string according to device path type
|
||||||
|
//
|
||||||
|
HiiString = NULL;
|
||||||
|
DevicePathType = BdsGetBootTypeFromDevicePath (DevicePath);
|
||||||
|
switch (DevicePathType) {
|
||||||
|
case BDS_EFI_ACPI_FLOPPY_BOOT:
|
||||||
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY));
|
||||||
|
break;
|
||||||
|
case BDS_EFI_MESSAGE_SATA_BOOT:
|
||||||
|
case BDS_EFI_MESSAGE_ATAPI_BOOT:
|
||||||
|
case BDS_EFI_MEDIA_CDROM_BOOT:
|
||||||
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_DVD));
|
||||||
|
break;
|
||||||
|
case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
|
||||||
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_USB));
|
||||||
|
break;
|
||||||
|
case BDS_EFI_MESSAGE_SCSI_BOOT:
|
||||||
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI));
|
||||||
|
break;
|
||||||
|
case BDS_EFI_MESSAGE_MISC_BOOT:
|
||||||
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC));
|
||||||
|
break;
|
||||||
|
case BDS_EFI_MESSAGE_MAC_BOOT:
|
||||||
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK));
|
||||||
|
break;
|
||||||
|
case BBS_DEVICE_PATH:
|
||||||
|
//
|
||||||
|
// Do nothing for legacy boot option.
|
||||||
|
//
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUG((EFI_D_INFO, "Can not find HiiString for given device path type 0x%x\n", DevicePathType));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HiiString != NULL) {
|
||||||
|
NewLoadContext->Description = AllocateZeroPool(StrSize((UINT16*)LoadOptionPtr) + StrSize(HiiString));
|
||||||
|
StrCpy (NewLoadContext->Description, HiiString);
|
||||||
|
if (StrnCmp ((UINT16*)LoadOptionPtr, L"0", 1) != 0) {
|
||||||
|
StrCat (NewLoadContext->Description, L" ");
|
||||||
|
StrCat (NewLoadContext->Description, (UINT16*)LoadOptionPtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
FreePool (HiiString);
|
||||||
|
} else {
|
||||||
|
NewLoadContext->Description = AllocateZeroPool (StrSize((UINT16*)LoadOptionPtr));
|
||||||
|
StrCpy(NewLoadContext->Description, (UINT16*)LoadOptionPtr);
|
||||||
|
}
|
||||||
|
|
||||||
ASSERT (NewLoadContext->Description != NULL);
|
ASSERT (NewLoadContext->Description != NULL);
|
||||||
CopyMem (
|
|
||||||
NewLoadContext->Description,
|
|
||||||
(UINT16 *) LoadOptionPtr,
|
|
||||||
StringSize
|
|
||||||
);
|
|
||||||
NewMenuEntry->DisplayString = NewLoadContext->Description;
|
NewMenuEntry->DisplayString = NewLoadContext->Description;
|
||||||
|
|
||||||
LoadOptionPtr += StringSize;
|
LoadOptionPtr += StringSize;
|
||||||
|
|
|
@ -201,6 +201,7 @@ CallBootManager (
|
||||||
VOID *EndOpCodeHandle;
|
VOID *EndOpCodeHandle;
|
||||||
EFI_IFR_GUID_LABEL *StartLabel;
|
EFI_IFR_GUID_LABEL *StartLabel;
|
||||||
EFI_IFR_GUID_LABEL *EndLabel;
|
EFI_IFR_GUID_LABEL *EndLabel;
|
||||||
|
CHAR16 *HiiString;
|
||||||
CHAR16 *BootStringNumber;
|
CHAR16 *BootStringNumber;
|
||||||
UINTN DevicePathType;
|
UINTN DevicePathType;
|
||||||
|
|
||||||
|
@ -271,48 +272,59 @@ CallBootManager (
|
||||||
BootStringNumber = NULL;
|
BootStringNumber = NULL;
|
||||||
|
|
||||||
DevicePathType = BdsGetBootTypeFromDevicePath (Option->DevicePath);
|
DevicePathType = BdsGetBootTypeFromDevicePath (Option->DevicePath);
|
||||||
|
|
||||||
//
|
//
|
||||||
// store number string of boot option temporary.
|
// store number string of boot option temporary.
|
||||||
//
|
//
|
||||||
|
HiiString = NULL;
|
||||||
switch (DevicePathType) {
|
switch (DevicePathType) {
|
||||||
case BDS_EFI_ACPI_FLOPPY_BOOT:
|
case BDS_EFI_ACPI_FLOPPY_BOOT:
|
||||||
BootStringNumber = Option->Description;
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY));
|
||||||
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY));
|
|
||||||
break;
|
break;
|
||||||
case BDS_EFI_MEDIA_CDROM_BOOT:
|
case BDS_EFI_MEDIA_CDROM_BOOT:
|
||||||
BootStringNumber = Option->Description;
|
case BDS_EFI_MESSAGE_SATA_BOOT:
|
||||||
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_DVD));
|
case BDS_EFI_MESSAGE_ATAPI_BOOT:
|
||||||
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_DVD));
|
||||||
break;
|
break;
|
||||||
case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
|
case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
|
||||||
BootStringNumber = Option->Description;
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_USB));
|
||||||
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_USB));
|
|
||||||
break;
|
break;
|
||||||
case BDS_EFI_MESSAGE_SCSI_BOOT:
|
case BDS_EFI_MESSAGE_SCSI_BOOT:
|
||||||
BootStringNumber = Option->Description;
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI));
|
||||||
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI));
|
|
||||||
break;
|
break;
|
||||||
case BDS_EFI_MESSAGE_MISC_BOOT:
|
case BDS_EFI_MESSAGE_MISC_BOOT:
|
||||||
BootStringNumber = Option->Description;
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC));
|
||||||
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC));
|
|
||||||
break;
|
break;
|
||||||
case BDS_EFI_MESSAGE_MAC_BOOT:
|
case BDS_EFI_MESSAGE_MAC_BOOT:
|
||||||
BootStringNumber = Option->Description;
|
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK));
|
||||||
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK));
|
|
||||||
break;
|
break;
|
||||||
|
case BBS_DEVICE_PATH:
|
||||||
|
//
|
||||||
|
// Do nothing for legacy boot option.
|
||||||
|
//
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUG((EFI_D_INFO, "Can not find HiiString for given device path type 0x%x\n", DevicePathType));
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT (Option->Description != NULL);
|
//
|
||||||
if (BootStringNumber != NULL) {
|
// If found Hii description string then cat Hii string with original description.
|
||||||
|
//
|
||||||
|
if (HiiString != NULL) {
|
||||||
|
BootStringNumber = Option->Description;
|
||||||
|
Option->Description = AllocateZeroPool(StrSize(BootStringNumber) + StrSize(HiiString));
|
||||||
|
StrCpy (Option->Description, HiiString);
|
||||||
if (StrnCmp (BootStringNumber, L"0", 1) != 0) {
|
if (StrnCmp (BootStringNumber, L"0", 1) != 0) {
|
||||||
StrCat (Option->Description, L" ");
|
StrCat (Option->Description, L" ");
|
||||||
StrCat (Option->Description, BootStringNumber);
|
StrCat (Option->Description, BootStringNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FreePool (HiiString);
|
||||||
FreePool (BootStringNumber);
|
FreePool (BootStringNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASSERT (Option->Description != NULL);
|
||||||
|
|
||||||
Token = HiiSetString (HiiHandle, 0, Option->Description, NULL);
|
Token = HiiSetString (HiiHandle, 0, Option->Description, NULL);
|
||||||
|
|
||||||
TempStr = DevicePathToStr (Option->DevicePath);
|
TempStr = DevicePathToStr (Option->DevicePath);
|
||||||
|
|
Loading…
Reference in New Issue