MdeModulePkg/BmBootDesciption: Improve device descriptions

Add device type prefixes for USB, IDE, SATA, and NVMe drives.
Remove UEFI prefix, remove serial numbers.

Signed-off-by: Matt DeVillier <matt.devillier@gmail.com>
This commit is contained in:
Matt DeVillier
2020-02-12 10:03:31 -07:00
committed by Tim Crawford
parent 93688ae1e5
commit a8abddc10a

View File

@ -15,7 +15,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define PRODUCT_IDENTIFICATION_LENGTH 16
CONST UINT16 mBmUsbLangId = 0x0409; // English
CHAR16 mBmUefiPrefix[] = L"UEFI ";
LIST_ENTRY mPlatformBootDescriptionHandlers = INITIALIZE_LIST_HEAD_VARIABLE (mPlatformBootDescriptionHandlers);
@ -146,9 +145,8 @@ BmGetDescriptionFromDiskInfo (
EFI_ATAPI_IDENTIFY_DATA IdentifyData;
EFI_SCSI_INQUIRY_DATA InquiryData;
CHAR16 *Description;
UINTN Length;
CHAR16 *DescTemp;
CONST UINTN ModelNameLength = 40;
CONST UINTN SerialNumberLength = 20;
CHAR8 *StrPtr;
UINT8 Temp;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
@ -174,26 +172,24 @@ BmGetDescriptionFromDiskInfo (
&BufferSize
);
if (!EFI_ERROR (Status)) {
Description = AllocateZeroPool ((ModelNameLength + SerialNumberLength + 2) * sizeof (CHAR16));
Description = AllocateZeroPool (StrSize (L"SATA: ") + ModelNameLength * 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];
}
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];
}
Length += Index;
Description[Length++] = L'\0';
ASSERT (Length == ModelNameLength + SerialNumberLength + 2);
Description[Index] = L'\0';
BmEliminateExtraSpaces (Description);
DescTemp = AllocateZeroPool (0x60);
if (CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoAhciInterfaceGuid)) {
StrCatS (DescTemp, 0x60 / sizeof (CHAR16), L"SATA: ");
} else {
StrCatS (DescTemp, 0x60 / sizeof (CHAR16), L"IDE: ");
}
StrCatS (DescTemp, 0x60 / sizeof (CHAR16), Description);
StrCpyS(Description, StrSize (DescTemp) / sizeof (CHAR16), DescTemp);
FreePool (DescTemp);
}
} else if (CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoScsiInterfaceGuid)) {
BufferSize = sizeof (EFI_SCSI_INQUIRY_DATA);
@ -273,7 +269,6 @@ BmGetUsbDescription (
CHAR16 NullChar;
CHAR16 *Manufacturer;
CHAR16 *Product;
CHAR16 *SerialNumber;
CHAR16 *Description;
EFI_USB_DEVICE_DESCRIPTOR DevDesc;
UINTN DescMaxSize;
@ -314,35 +309,21 @@ BmGetUsbDescription (
Product = &NullChar;
}
Status = UsbIo->UsbGetStringDescriptor (
UsbIo,
mBmUsbLangId,
DevDesc.StrSerialNumber,
&SerialNumber
);
if (EFI_ERROR (Status)) {
SerialNumber = &NullChar;
}
if ((Manufacturer == &NullChar) &&
(Product == &NullChar) &&
(SerialNumber == &NullChar)
)
{
(Product == &NullChar)) {
return NULL;
}
DescMaxSize = StrSize (Manufacturer) + StrSize (Product) + StrSize (SerialNumber);
DescMaxSize = StrSize (L"USB: ") + StrSize (Manufacturer) + StrSize (Product);
Description = AllocateZeroPool (DescMaxSize);
ASSERT (Description != NULL);
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L"USB: ");
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), SerialNumber);
if (Manufacturer != &NullChar) {
FreePool (Manufacturer);
}
@ -351,10 +332,6 @@ BmGetUsbDescription (
FreePool (Product);
}
if (SerialNumber != &NullChar) {
FreePool (SerialNumber);
}
BmEliminateExtraSpaces (Description);
return Description;
@ -584,6 +561,7 @@ BmGetNvmeDescription (
EFI_NVM_EXPRESS_COMPLETION Completion;
NVME_ADMIN_CONTROLLER_DATA ControllerData;
CHAR16 *Description;
CHAR16 *DescTemp;
CHAR16 *Char;
UINTN Index;
@ -653,20 +631,12 @@ BmGetNvmeDescription (
*(Char++) = (CHAR16)ControllerData.Mn[Index];
}
*(Char++) = L' ';
for (Index = 0; Index < ARRAY_SIZE (ControllerData.Sn); Index++) {
*(Char++) = (CHAR16)ControllerData.Sn[Index];
}
*(Char++) = L' ';
UnicodeValueToStringS (
Char,
sizeof (CHAR16) * (MAXIMUM_VALUE_CHARACTERS + 1),
0,
DevicePath.NvmeNamespace->NamespaceId,
0
);
BmEliminateExtraSpaces (Description);
DescTemp = AllocateZeroPool (0x60);
StrCatS (DescTemp, 0x60 / sizeof (CHAR16), L"NVMe: ");
StrCatS (DescTemp, 0x60 / sizeof (CHAR16), Description);
StrCpyS(Description, StrSize (DescTemp) / sizeof (CHAR16), DescTemp);
FreePool (DescTemp);
}
return Description;
@ -801,7 +771,6 @@ BmGetBootDescription (
BM_BOOT_DESCRIPTION_ENTRY *Entry;
CHAR16 *Description;
CHAR16 *DefaultDescription;
CHAR16 *Temp;
UINTN Index;
//
@ -811,16 +780,6 @@ BmGetBootDescription (
for (Index = 0; Index < ARRAY_SIZE (mBmBootDescriptionHandlers); Index++) {
DefaultDescription = mBmBootDescriptionHandlers[Index](Handle);
if (DefaultDescription != NULL) {
//
// Avoid description confusion between UEFI & Legacy boot option by adding "UEFI " prefix
// ONLY for core provided boot description handler.
//
Temp = AllocatePool (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix));
ASSERT (Temp != NULL);
StrCpyS (Temp, (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix)) / sizeof (CHAR16), mBmUefiPrefix);
StrCatS (Temp, (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix)) / sizeof (CHAR16), DefaultDescription);
FreePool (DefaultDescription);
DefaultDescription = Temp;
break;
}
}