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; 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;

View File

@ -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);