Merged https://github.com/tianocore/edk2/pull/3745
> -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Yao, > Jiewen > Sent: Friday, December 9, 2022 10:16 PM > To: Gerd Hoffmann <kra...@redhat.com>; devel@edk2.groups.io > Cc: Pawel Polawski <ppola...@redhat.com>; Anthony Perard > <anthony.per...@citrix.com>; Justen, Jordan L <jordan.l.jus...@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> > Subject: Re: [edk2-devel] [PATCH v3 1/1] OvmfPkg/SmbiosPlatformDxe: use > PcdFirmware* > > 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 (#97230): https://edk2.groups.io/g/devel/message/97230 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] -=-=-=-=-=-=-=-=-=-=-=-