[edk2-devel] [PATCH v3 1/1] OvmfPkg/SmbiosPlatformDxe: use PcdFirmware*

Yao, Jiewen jiewen.yao at intel.com
Fri Dec 9 14:15:32 UTC 2022


Looks good to me.

Reviewed-by: Jiewen Yao <Jiewen.yao at intel.com>

Any further discussion?



> -----Original Message-----
> From: Gerd Hoffmann <kraxel at redhat.com>
> Sent: Monday, November 28, 2022 1:40 PM
> To: devel at edk2.groups.io
> Cc: Pawel Polawski <ppolawsk at redhat.com>; Anthony Perard
> <anthony.perard at citrix.com>; Justen, Jordan L <jordan.l.justen at intel.com>;
> Yao, Jiewen <jiewen.yao at intel.com>; Gao, Liming
> <gaoliming at byosoft.com.cn>; Julien Grall <julien at xen.org>; Oliver Steffen
> <osteffen at redhat.com>; Wang, Jian J <jian.j.wang at intel.com>; Ard
> Biesheuvel <ardb+tianocore at kernel.org>; Gerd Hoffmann
> <kraxel at 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 <kraxel at 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/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list