Looks good to me. Reviewed-by: Jiewen Yao <jiewen....@intel.com>
Any further discussion? > -----Original Message----- > From: Gerd Hoffmann <kra...@redhat.com> > Sent: Monday, November 28, 2022 1:40 PM > To: devel@edk2.groups.io > Cc: Pawel Polawski <ppola...@redhat.com>; Anthony Perard > <anthony.per...@citrix.com>; Justen, Jordan L <jordan.l.jus...@intel.com>; > Yao, Jiewen <jiewen....@intel.com>; Gao, Liming > <gaolim...@byosoft.com.cn>; Julien Grall <jul...@xen.org>; Oliver Steffen > <ostef...@redhat.com>; Wang, Jian J <jian.j.w...@intel.com>; Ard > Biesheuvel <ardb+tianoc...@kernel.org>; Gerd Hoffmann > <kra...@redhat.com> > Subject: [PATCH v3 1/1] OvmfPkg/SmbiosPlatformDxe: use PcdFirmware* > > Instead of using hard-coded strings ("0.0.0" for BiosVersion etc) > which is mostly useless read the PCDs (PcdFirmwareVendor, > PcdFirmwareVersionString and PcdFirmwareReleaseDateString) and > build the string table dynamuically at runtime. > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > .../SmbiosPlatformDxe/SmbiosPlatformDxe.inf | 6 + > .../XenSmbiosPlatformDxe.inf | 9 +- > OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c | 115 +++++++++++--- > ---- > 3 files changed, 85 insertions(+), 45 deletions(-) > > diff --git a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf > b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf > index 0066bbc9229c..52689c96e5af 100644 > --- a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf > +++ b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf > @@ -32,9 +32,12 @@ [Sources] > > [Packages] > MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > OvmfPkg/OvmfPkg.dec > > [LibraryClasses] > + BaseLib > + BaseMemoryLib > DebugLib > MemoryAllocationLib > PcdLib > @@ -45,6 +48,9 @@ [LibraryClasses] > [Pcd] > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId > gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareReleaseDateString > > [Protocols] > gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED > diff --git a/OvmfPkg/SmbiosPlatformDxe/XenSmbiosPlatformDxe.inf > b/OvmfPkg/SmbiosPlatformDxe/XenSmbiosPlatformDxe.inf > index 7f4588e33d1e..e646c88741b6 100644 > --- a/OvmfPkg/SmbiosPlatformDxe/XenSmbiosPlatformDxe.inf > +++ b/OvmfPkg/SmbiosPlatformDxe/XenSmbiosPlatformDxe.inf > @@ -38,19 +38,26 @@ [Sources.ARM, Sources.AARCH64] > > [Packages] > MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > > [Packages.IA32, Packages.X64] > OvmfPkg/OvmfPkg.dec > > [LibraryClasses] > + BaseLib > + BaseMemoryLib > DebugLib > UefiBootServicesTableLib > UefiDriverEntryPoint > > [LibraryClasses.IA32, LibraryClasses.X64] > - BaseLib > HobLib > > +[Pcd] > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareReleaseDateString > + > [Protocols] > gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED > > diff --git a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c > b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c > index 94249d3ff1b0..dc1e6aed634f 100644 > --- a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c > +++ b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c > @@ -9,57 +9,43 @@ > **/ > > #include <IndustryStandard/SmBios.h> // SMBIOS_TABLE_TYPE0 > +#include <Library/BaseLib.h> > +#include <Library/BaseMemoryLib.h> > #include <Library/DebugLib.h> // ASSERT_EFI_ERROR() > +#include <Library/MemoryAllocationLib.h> > +#include <Library/PcdLib.h> > #include <Library/UefiBootServicesTableLib.h> // gBS > #include <Protocol/Smbios.h> // EFI_SMBIOS_PROTOCOL > > #include "SmbiosPlatformDxe.h" > > -#define TYPE0_STRINGS \ > - "EFI Development Kit II / OVMF\0" /* Vendor */ \ > - "0.0.0\0" /* BiosVersion */ \ > - "02/06/2015\0" /* BiosReleaseDate */ > -// > -// Type definition and contents of the default Type 0 SMBIOS table. > -// > -#pragma pack(1) > -typedef struct { > - SMBIOS_TABLE_TYPE0 Base; > - UINT8 Strings[sizeof (TYPE0_STRINGS)]; > -} OVMF_TYPE0; > -#pragma pack() > - > -STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { > +STATIC CONST SMBIOS_TABLE_TYPE0 mOvmfDefaultType0 = { > + // SMBIOS_STRUCTURE Hdr > { > - // SMBIOS_STRUCTURE Hdr > - { > - EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type > - sizeof (SMBIOS_TABLE_TYPE0), // UINT8 Length > - }, > - 1, // SMBIOS_TABLE_STRING Vendor > - 2, // SMBIOS_TABLE_STRING BiosVersion > - 0xE800, // UINT16 BiosSegment > - 3, // SMBIOS_TABLE_STRING BiosReleaseDate > - 0, // UINT8 BiosSize > - { // MISC_BIOS_CHARACTERISTICS BiosCharacteristics > - 0, // Reserved :2 > - 0, // Unknown :1 > - 1, // BiosCharacteristicsNotSupported :1 > - // Remaining BiosCharacteristics bits left unset :60 > - }, > - { // BIOSCharacteristicsExtensionBytes[2] > - 0, // BiosReserved > - 0x1C // SystemReserved = VirtualMachineSupported | > - // UefiSpecificationSupported | > - // TargetContentDistributionEnabled > - }, > - 0, // UINT8 SystemBiosMajorRelease > - 0, // UINT8 SystemBiosMinorRelease > - 0xFF, // UINT8 > EmbeddedControllerFirmwareMajorRelease > - 0xFF // UINT8 > EmbeddedControllerFirmwareMinorRelease > + EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type > + sizeof (SMBIOS_TABLE_TYPE0), // UINT8 Length > }, > - // Text strings (unformatted area) > - TYPE0_STRINGS > + 1, // SMBIOS_TABLE_STRING Vendor > + 2, // SMBIOS_TABLE_STRING BiosVersion > + 0xE800, // UINT16 BiosSegment > + 3, // SMBIOS_TABLE_STRING BiosReleaseDate > + 0, // UINT8 BiosSize > + { // MISC_BIOS_CHARACTERISTICS BiosCharacteristics > + 0, // Reserved :2 > + 0, // Unknown :1 > + 1, // BiosCharacteristicsNotSupported :1 > + // Remaining BiosCharacteristics bits left unset :60 > + }, > + { // BIOSCharacteristicsExtensionBytes[2] > + 0, // BiosReserved > + 0x1C // SystemReserved = VirtualMachineSupported | > + // UefiSpecificationSupported | > + // TargetContentDistributionEnabled > + }, > + 0, // UINT8 SystemBiosMajorRelease > + 0, // UINT8 SystemBiosMinorRelease > + 0xFF, // UINT8 EmbeddedControllerFirmwareMajorRelease > + 0xFF // UINT8 EmbeddedControllerFirmwareMinorRelease > }; > > /** > @@ -153,14 +139,55 @@ InstallAllStructures ( > // > // Add OVMF default Type 0 (BIOS Information) table > // > + CHAR16 *VendStr, *VersStr, *DateStr; > + UINTN VendLen, VersLen, DateLen; > + CHAR8 *Type0; > + > + VendStr = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVendor); > + VendLen = StrLen (VendStr); > + if (VendLen < 3) { > + VendStr = L"unknown"; > + VendLen = StrLen (VendStr); > + } > + > + VersStr = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionString); > + VersLen = StrLen (VersStr); > + if (VersLen < 3) { > + VersStr = L"unknown"; > + VersLen = StrLen (VersStr); > + } > + > + DateStr = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareReleaseDateString); > + DateLen = StrLen (DateStr); > + if (DateLen < 3) { > + DateStr = L"unknown"; > + DateLen = StrLen (DateStr); > + } > + > + DEBUG ((DEBUG_INFO, "FirmwareVendor: \"%s\" (%d chars)\n", > VendStr, VendLen)); > + DEBUG ((DEBUG_INFO, "FirmwareVersionString: \"%s\" (%d chars)\n", > VersStr, VersLen)); > + DEBUG ((DEBUG_INFO, "FirmwareReleaseDateString: \"%s\" (%d > chars)\n", DateStr, DateLen)); > + > + Type0 = AllocateZeroPool (sizeof (mOvmfDefaultType0) + VendLen + > VersLen + DateLen + 4); > + if (Type0 == NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + CopyMem (Type0, &mOvmfDefaultType0, sizeof (mOvmfDefaultType0)); > + UnicodeStrToAsciiStrS (VendStr, Type0 + sizeof (mOvmfDefaultType0), > VendLen + 1); > + UnicodeStrToAsciiStrS (VersStr, Type0 + sizeof (mOvmfDefaultType0) + > VendLen + 1, VersLen + 1); > + UnicodeStrToAsciiStrS (DateStr, Type0 + sizeof (mOvmfDefaultType0) + > VendLen + VersLen + 2, DateLen + 1); > + > SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; > Status = Smbios->Add ( > Smbios, > NULL, > &SmbiosHandle, > - (EFI_SMBIOS_TABLE_HEADER *)&mOvmfDefaultType0 > + (EFI_SMBIOS_TABLE_HEADER *)Type0 > ); > ASSERT_EFI_ERROR (Status); > + > + FreePool (Type0); > } > > return EFI_SUCCESS; > -- > 2.38.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#97185): https://edk2.groups.io/g/devel/message/97185 Mute This Topic: https://groups.io/mt/95304965/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-