From: Patryk Duda <p...@semihalf.com> This patch implements convenient way of changing strings included in SMBIOS Table1, Table2, Table3.
Strings can be altered by defining following PCDs: gMarvellTokenSpaceGuid.PcdProductManufacturer gMarvellTokenSpaceGuid.PcdProductPlatformName gMarvellTokenSpaceGuid.PcdProductVersion gMarvellTokenSpaceGuid.PcdProductSerial This patch adds also limit for length of string which can be increased if necessary in future. Signed-off-by: Patryk Duda <p...@semihalf.com> --- Silicon/Marvell/Marvell.dec | 6 ++ Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf | 4 + Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c | 79 +++++++++++++++++--- 3 files changed, 78 insertions(+), 11 deletions(-) diff --git a/Silicon/Marvell/Marvell.dec b/Silicon/Marvell/Marvell.dec index d337d3e..a84b056 100644 --- a/Silicon/Marvell/Marvell.dec +++ b/Silicon/Marvell/Marvell.dec @@ -169,6 +169,12 @@ gMarvellTokenSpaceGuid.PcdPciEAhci|{ 0x0 }|VOID*|0x3000034 gMarvellTokenSpaceGuid.PcdPciESdhci|{ 0x0 }|VOID*|0x3000035 +#Platform description + gMarvellTokenSpaceGuid.PcdProductManufacturer|"Marvell \0"|VOID*|0x50000100 + gMarvellTokenSpaceGuid.PcdProductPlatformName|"Marvell Development Board \0"|VOID*|0x50000101 + gMarvellTokenSpaceGuid.PcdProductSerial|"Serial Not Set \0"|VOID*|0x50000103 + gMarvellTokenSpaceGuid.PcdProductVersion|"Revision unknown \0"|VOID*|0x50000102 + #RTC gMarvellTokenSpaceGuid.PcdRtcBaseAddress|0x0|UINT64|0x40000052 diff --git a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf index 8b4586c..7722146 100644 --- a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf +++ b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf @@ -36,6 +36,10 @@ [FixedPcd] gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareRevision + gMarvellTokenSpaceGuid.PcdProductManufacturer + gMarvellTokenSpaceGuid.PcdProductPlatformName + gMarvellTokenSpaceGuid.PcdProductSerial + gMarvellTokenSpaceGuid.PcdProductVersion [Protocols] gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED diff --git a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c index 08f4fa7..c5b1d77 100644 --- a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c +++ b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -21,6 +21,22 @@ #include <IndustryStandard/SmBios.h> // +// SMBIOS specification indicates that there is no limit for string size. +// However, some strings are printed in UEFI and OS. Printing very big string +// can lead to unexpected behaviour. Second reason of string size definition +// is that static buffers can be used instead of dynamic ones. +// +// Nevertheless, this value can be increased if necessary +// + +#define MV_SMBIOS_STRING_MAX_SIZE 32 + +STATIC CHAR8 mSysInfoManufacturer[MV_SMBIOS_STRING_MAX_SIZE]; +STATIC CHAR8 mSysInfoProductName[MV_SMBIOS_STRING_MAX_SIZE]; +STATIC CHAR8 mSysInfoVersion[MV_SMBIOS_STRING_MAX_SIZE]; +STATIC CHAR8 mSysInfoSerial[MV_SMBIOS_STRING_MAX_SIZE]; + +// // SMBIOS tables often reference each other using // fixed constants, define a list of these constants // for our hardcoded tables @@ -101,10 +117,10 @@ STATIC SMBIOS_TABLE_TYPE1 mArmadaDefaultType1 = { }; STATIC CHAR8 CONST *mArmadaDefaultType1Strings[] = { - "Marvell \0",/* Manufacturer */ - "Armada 7k/8k Family Board \0",/* Product Name placeholder*/ - "Revision unknown \0",/* Version placeholder */ - " \0",/* 32 character buffer */ + mSysInfoManufacturer, + mSysInfoProductName, + mSysInfoVersion, + mSysInfoSerial, NULL }; @@ -129,10 +145,10 @@ STATIC SMBIOS_TABLE_TYPE2 mArmadaDefaultType2 = { }; STATIC CHAR8 CONST *mArmadaDefaultType2Strings[] = { - "Marvell \0",/* Manufacturer */ - "Armada 7k/8k Family Board \0",/* Product Name placeholder*/ - "Revision unknown \0",/* Version placeholder */ - "Serial Not Set \0",/* Serial */ + mSysInfoManufacturer, + mSysInfoProductName, + mSysInfoVersion, + mSysInfoSerial, "Base of Chassis \0",/* Board location */ NULL }; @@ -160,9 +176,9 @@ STATIC SMBIOS_TABLE_TYPE3 mArmadaDefaultType3 = { }; STATIC CHAR8 CONST *mArmadaDefaultType3Strings[] = { - "Marvell \0",/* Manufacturer placeholder */ - "Revision unknown \0",/* Version placeholder */ - "Serial Not Set \0",/* Serial placeholder */ + mSysInfoManufacturer, + mSysInfoVersion, + mSysInfoSerial, NULL }; @@ -743,6 +759,45 @@ SmbiosMemoryInstall ( } /** + Copy Type1, Type2, Type3 strings form PCD +**/ + +STATIC +VOID +MvSmbiosCopyStrings ( + VOID + ) +{ + EFI_STATUS Status; + + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductManufacturer), + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductPlatformName), + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductVersion), + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductSerial), + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); + + Status = AsciiStrCpyS (mSysInfoManufacturer, + MV_SMBIOS_STRING_MAX_SIZE, + (CHAR8 *)PcdGetPtr (PcdProductManufacturer)); + ASSERT_EFI_ERROR (Status); + Status = AsciiStrCpyS (mSysInfoProductName, + MV_SMBIOS_STRING_MAX_SIZE, + (CHAR8 *)PcdGetPtr (PcdProductPlatformName)); + ASSERT_EFI_ERROR (Status); + Status = AsciiStrCpyS (mSysInfoVersion, + MV_SMBIOS_STRING_MAX_SIZE, + (CHAR8 *)PcdGetPtr (PcdProductVersion)); + ASSERT_EFI_ERROR (Status); + Status = AsciiStrCpyS (mSysInfoSerial, + MV_SMBIOS_STRING_MAX_SIZE, + (CHAR8 *)PcdGetPtr (PcdProductSerial)); + ASSERT_EFI_ERROR (Status); +} + +/** Install all structures from the DefaultTables structure @param Smbios SMBIOS protocol @@ -760,6 +815,8 @@ SmbiosInstallAllStructures ( FirmwareMajorRevisionNumber = (PcdGet32 (PcdFirmwareRevision) >> 16) & 0xFF; FirmwareMinorRevisionNumber = PcdGet32 (PcdFirmwareRevision) & 0xFF; + MvSmbiosCopyStrings(); + // // Update Firmware Revision, CPU and DRAM frequencies. // -- 2.7.4 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#48702): https://edk2.groups.io/g/devel/message/48702 Mute This Topic: https://groups.io/mt/34471905/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-