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:
committed by
Tim Crawford
parent
93688ae1e5
commit
a8abddc10a
@ -15,7 +15,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
|||||||
#define PRODUCT_IDENTIFICATION_LENGTH 16
|
#define PRODUCT_IDENTIFICATION_LENGTH 16
|
||||||
|
|
||||||
CONST UINT16 mBmUsbLangId = 0x0409; // English
|
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);
|
||||||
|
|
||||||
@ -146,9 +145,8 @@ BmGetDescriptionFromDiskInfo (
|
|||||||
EFI_ATAPI_IDENTIFY_DATA IdentifyData;
|
EFI_ATAPI_IDENTIFY_DATA IdentifyData;
|
||||||
EFI_SCSI_INQUIRY_DATA InquiryData;
|
EFI_SCSI_INQUIRY_DATA InquiryData;
|
||||||
CHAR16 *Description;
|
CHAR16 *Description;
|
||||||
UINTN Length;
|
CHAR16 *DescTemp;
|
||||||
CONST UINTN ModelNameLength = 40;
|
CONST UINTN ModelNameLength = 40;
|
||||||
CONST UINTN SerialNumberLength = 20;
|
|
||||||
CHAR8 *StrPtr;
|
CHAR8 *StrPtr;
|
||||||
UINT8 Temp;
|
UINT8 Temp;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
@ -174,26 +172,24 @@ BmGetDescriptionFromDiskInfo (
|
|||||||
&BufferSize
|
&BufferSize
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
Description = AllocateZeroPool ((ModelNameLength + SerialNumberLength + 2) * sizeof (CHAR16));
|
Description = AllocateZeroPool (StrSize (L"SATA: ") + ModelNameLength * sizeof (CHAR16));
|
||||||
ASSERT (Description != NULL);
|
ASSERT (Description != NULL);
|
||||||
for (Index = 0; Index + 1 < ModelNameLength; Index += 2) {
|
for (Index = 0; Index + 1 < ModelNameLength; Index += 2) {
|
||||||
Description[Index] = (CHAR16)IdentifyData.ModelName[Index + 1];
|
Description[Index] = (CHAR16)IdentifyData.ModelName[Index + 1];
|
||||||
Description[Index + 1] = (CHAR16)IdentifyData.ModelName[Index];
|
Description[Index + 1] = (CHAR16)IdentifyData.ModelName[Index];
|
||||||
}
|
}
|
||||||
|
Description[Index] = L'\0';
|
||||||
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);
|
|
||||||
|
|
||||||
BmEliminateExtraSpaces (Description);
|
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)) {
|
} else if (CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoScsiInterfaceGuid)) {
|
||||||
BufferSize = sizeof (EFI_SCSI_INQUIRY_DATA);
|
BufferSize = sizeof (EFI_SCSI_INQUIRY_DATA);
|
||||||
@ -273,7 +269,6 @@ BmGetUsbDescription (
|
|||||||
CHAR16 NullChar;
|
CHAR16 NullChar;
|
||||||
CHAR16 *Manufacturer;
|
CHAR16 *Manufacturer;
|
||||||
CHAR16 *Product;
|
CHAR16 *Product;
|
||||||
CHAR16 *SerialNumber;
|
|
||||||
CHAR16 *Description;
|
CHAR16 *Description;
|
||||||
EFI_USB_DEVICE_DESCRIPTOR DevDesc;
|
EFI_USB_DEVICE_DESCRIPTOR DevDesc;
|
||||||
UINTN DescMaxSize;
|
UINTN DescMaxSize;
|
||||||
@ -314,35 +309,21 @@ BmGetUsbDescription (
|
|||||||
Product = &NullChar;
|
Product = &NullChar;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = UsbIo->UsbGetStringDescriptor (
|
|
||||||
UsbIo,
|
|
||||||
mBmUsbLangId,
|
|
||||||
DevDesc.StrSerialNumber,
|
|
||||||
&SerialNumber
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
SerialNumber = &NullChar;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((Manufacturer == &NullChar) &&
|
if ((Manufacturer == &NullChar) &&
|
||||||
(Product == &NullChar) &&
|
(Product == &NullChar)) {
|
||||||
(SerialNumber == &NullChar)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
DescMaxSize = StrSize (Manufacturer) + StrSize (Product) + StrSize (SerialNumber);
|
DescMaxSize = StrSize (L"USB: ") + StrSize (Manufacturer) + StrSize (Product);
|
||||||
Description = AllocateZeroPool (DescMaxSize);
|
Description = AllocateZeroPool (DescMaxSize);
|
||||||
ASSERT (Description != NULL);
|
ASSERT (Description != NULL);
|
||||||
|
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L"USB: ");
|
||||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), Manufacturer);
|
StrCatS (Description, DescMaxSize/sizeof (CHAR16), Manufacturer);
|
||||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L" ");
|
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L" ");
|
||||||
|
|
||||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), Product);
|
StrCatS (Description, DescMaxSize/sizeof (CHAR16), Product);
|
||||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L" ");
|
StrCatS (Description, DescMaxSize/sizeof (CHAR16), L" ");
|
||||||
|
|
||||||
StrCatS (Description, DescMaxSize/sizeof (CHAR16), SerialNumber);
|
|
||||||
|
|
||||||
if (Manufacturer != &NullChar) {
|
if (Manufacturer != &NullChar) {
|
||||||
FreePool (Manufacturer);
|
FreePool (Manufacturer);
|
||||||
}
|
}
|
||||||
@ -351,10 +332,6 @@ BmGetUsbDescription (
|
|||||||
FreePool (Product);
|
FreePool (Product);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SerialNumber != &NullChar) {
|
|
||||||
FreePool (SerialNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
BmEliminateExtraSpaces (Description);
|
BmEliminateExtraSpaces (Description);
|
||||||
|
|
||||||
return Description;
|
return Description;
|
||||||
@ -584,6 +561,7 @@ BmGetNvmeDescription (
|
|||||||
EFI_NVM_EXPRESS_COMPLETION Completion;
|
EFI_NVM_EXPRESS_COMPLETION Completion;
|
||||||
NVME_ADMIN_CONTROLLER_DATA ControllerData;
|
NVME_ADMIN_CONTROLLER_DATA ControllerData;
|
||||||
CHAR16 *Description;
|
CHAR16 *Description;
|
||||||
|
CHAR16 *DescTemp;
|
||||||
CHAR16 *Char;
|
CHAR16 *Char;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
|
||||||
@ -653,20 +631,12 @@ BmGetNvmeDescription (
|
|||||||
*(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++) = L' ';
|
|
||||||
UnicodeValueToStringS (
|
|
||||||
Char,
|
|
||||||
sizeof (CHAR16) * (MAXIMUM_VALUE_CHARACTERS + 1),
|
|
||||||
0,
|
|
||||||
DevicePath.NvmeNamespace->NamespaceId,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
BmEliminateExtraSpaces (Description);
|
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;
|
return Description;
|
||||||
@ -801,7 +771,6 @@ BmGetBootDescription (
|
|||||||
BM_BOOT_DESCRIPTION_ENTRY *Entry;
|
BM_BOOT_DESCRIPTION_ENTRY *Entry;
|
||||||
CHAR16 *Description;
|
CHAR16 *Description;
|
||||||
CHAR16 *DefaultDescription;
|
CHAR16 *DefaultDescription;
|
||||||
CHAR16 *Temp;
|
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -811,16 +780,6 @@ BmGetBootDescription (
|
|||||||
for (Index = 0; Index < ARRAY_SIZE (mBmBootDescriptionHandlers); Index++) {
|
for (Index = 0; Index < ARRAY_SIZE (mBmBootDescriptionHandlers); Index++) {
|
||||||
DefaultDescription = mBmBootDescriptionHandlers[Index](Handle);
|
DefaultDescription = mBmBootDescriptionHandlers[Index](Handle);
|
||||||
if (DefaultDescription != NULL) {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user