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:
klu2 2009-07-16 06:54:41 +00:00
parent e6d4b9d5a3
commit 5caec787e1
2 changed files with 84 additions and 27 deletions

View File

@ -875,7 +875,9 @@ BOpt_GetBootOptions (
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN MenuCount;
UINT8 *Ptr;
UINTN DevicePathType;
CHAR16 *HiiString;
MenuCount = 0;
BootOrderListSize = 0;
BootNextSize = 0;
@ -1010,15 +1012,58 @@ BOpt_GetBootOptions (
NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;
LoadOptionPtr += sizeof (UINT16);
StringSize = StrSize ((UINT16 *) LoadOptionPtr);
NewLoadContext->Description = AllocateZeroPool (StringSize);
StringSize = StrSize((UINT16*)LoadOptionPtr);
//
// 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);
CopyMem (
NewLoadContext->Description,
(UINT16 *) LoadOptionPtr,
StringSize
);
NewMenuEntry->DisplayString = NewLoadContext->Description;
LoadOptionPtr += StringSize;

View File

@ -201,6 +201,7 @@ CallBootManager (
VOID *EndOpCodeHandle;
EFI_IFR_GUID_LABEL *StartLabel;
EFI_IFR_GUID_LABEL *EndLabel;
CHAR16 *HiiString;
CHAR16 *BootStringNumber;
UINTN DevicePathType;
@ -271,48 +272,59 @@ CallBootManager (
BootStringNumber = NULL;
DevicePathType = BdsGetBootTypeFromDevicePath (Option->DevicePath);
//
// store number string of boot option temporary.
//
HiiString = NULL;
switch (DevicePathType) {
case BDS_EFI_ACPI_FLOPPY_BOOT:
BootStringNumber = Option->Description;
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY));
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY));
break;
case BDS_EFI_MEDIA_CDROM_BOOT:
BootStringNumber = Option->Description;
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_DVD));
case BDS_EFI_MESSAGE_SATA_BOOT:
case BDS_EFI_MESSAGE_ATAPI_BOOT:
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_DVD));
break;
case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
BootStringNumber = Option->Description;
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_USB));
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_USB));
break;
case BDS_EFI_MESSAGE_SCSI_BOOT:
BootStringNumber = Option->Description;
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI));
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI));
break;
case BDS_EFI_MESSAGE_MISC_BOOT:
BootStringNumber = Option->Description;
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC));
HiiString = GetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC));
break;
case BDS_EFI_MESSAGE_MAC_BOOT:
BootStringNumber = Option->Description;
Option->Description = GetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK));
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));
}
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) {
StrCat (Option->Description, L" ");
StrCat (Option->Description, BootStringNumber);
}
}
FreePool (HiiString);
FreePool (BootStringNumber);
}
ASSERT (Option->Description != NULL);
Token = HiiSetString (HiiHandle, 0, Option->Description, NULL);
TempStr = DevicePathToStr (Option->DevicePath);