diff --git a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c index 98e84b4ea8..0928605dc4 100644 --- a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c +++ b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c @@ -2,6 +2,7 @@ SCSI disk driver that layers on every SCSI IO protocol in the system. Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+Copyright (c) 1985 - 2022, American Megatrends International LLC.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -67,6 +68,33 @@ FreeAlignedBuffer ( } } +/** + Remove trailing spaces from the string. + + @param String The ASCII string to remove the trailing spaces. + + @retval the new length of the string. +**/ +UINTN +RemoveTrailingSpaces ( + IN OUT CHAR8 *String + ) +{ + UINTN Length; + + Length = AsciiStrLen (String); + if (Length == 0) { + return 0; + } + + while ((Length > 0) && (String[Length-1] == ' ')) { + Length--; + } + + String[Length] = '\0'; + return Length; +} + /** The user Entry Point for module ScsiDisk. @@ -203,6 +231,9 @@ ScsiDiskDriverBindingStart ( UINT8 MaxRetry; BOOLEAN NeedRetry; BOOLEAN MustReadCapacity; + CHAR8 VendorStr[VENDOR_IDENTIFICATION_LENGTH + 1]; + CHAR8 ProductStr[PRODUCT_IDENTIFICATION_LENGTH + 1]; + CHAR16 DeviceStr[VENDOR_IDENTIFICATION_LENGTH + PRODUCT_IDENTIFICATION_LENGTH + 2]; MustReadCapacity = TRUE; @@ -354,19 +385,37 @@ ScsiDiskDriverBindingStart ( } } + CopyMem ( + VendorStr, + &ScsiDiskDevice->InquiryData.Reserved_5_95[VENDOR_IDENTIFICATION_OFFSET], + VENDOR_IDENTIFICATION_LENGTH + ); + VendorStr[VENDOR_IDENTIFICATION_LENGTH] = 0; + RemoveTrailingSpaces (VendorStr); + + CopyMem ( + ProductStr, + &ScsiDiskDevice->InquiryData.Reserved_5_95[PRODUCT_IDENTIFICATION_OFFSET], + PRODUCT_IDENTIFICATION_LENGTH + ); + ProductStr[PRODUCT_IDENTIFICATION_LENGTH] = 0; + RemoveTrailingSpaces (ProductStr); + + UnicodeSPrint (DeviceStr, sizeof (DeviceStr), L"%a %a", VendorStr, ProductStr); + ScsiDiskDevice->ControllerNameTable = NULL; AddUnicodeString2 ( "eng", gScsiDiskComponentName.SupportedLanguages, &ScsiDiskDevice->ControllerNameTable, - L"SCSI Disk Device", + DeviceStr, TRUE ); AddUnicodeString2 ( "en", gScsiDiskComponentName2.SupportedLanguages, &ScsiDiskDevice->ControllerNameTable, - L"SCSI Disk Device", + DeviceStr, FALSE ); return EFI_SUCCESS; diff --git a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.h b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.h index d54282df5f..5b4047e1db 100644 --- a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.h +++ b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.h @@ -2,6 +2,7 @@ Header file for SCSI Disk Driver. Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
+Copyright (c) 1985 - 2022, American Megatrends International LLC.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -30,6 +31,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +#include #include #include @@ -179,6 +181,13 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gScsiDiskComponentName2; #define SCSI_COMMAND_VERSION_2 0x02 #define SCSI_COMMAND_VERSION_3 0x03 +// Per SCSI spec, EFI_SCSI_INQUIRY_DATA.Reserved_5_95[3 - 10] has the Vendor identification +// EFI_SCSI_INQUIRY_DATA.Reserved_5_95[11 - 26] has the product identification +#define VENDOR_IDENTIFICATION_OFFSET 3 +#define VENDOR_IDENTIFICATION_LENGTH 8 +#define PRODUCT_IDENTIFICATION_OFFSET 11 +#define PRODUCT_IDENTIFICATION_LENGTH 16 + // // SCSI Disk Timeout Experience Value // diff --git a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf index 40818e669b..26227132e8 100644 --- a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf +++ b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf @@ -4,6 +4,7 @@ # the device handle. # # Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+# Copyright (c) 1985 - 2022, American Megatrends International LLC.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -46,6 +47,7 @@ UefiDriverEntryPoint DebugLib DevicePathLib + PrintLib [Protocols] gEfiDiskInfoProtocolGuid ## BY_START