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@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
			
			
This commit is contained in:
		
				
					committed by
					
						![mergify[bot]](/avatar/e3df20cd7a67969c41a65f03bea54961?size=40) mergify[bot]
						mergify[bot]
					
				
			
			
				
	
			
			
			
						parent
						
							1ef86f1201
						
					
				
				
					commit
					4cb94f20b0
				
			| @@ -9,28 +9,17 @@ | |||||||
| **/ | **/ | ||||||
|  |  | ||||||
| #include <IndustryStandard/SmBios.h>          // SMBIOS_TABLE_TYPE0 | #include <IndustryStandard/SmBios.h>          // SMBIOS_TABLE_TYPE0 | ||||||
|  | #include <Library/BaseLib.h> | ||||||
|  | #include <Library/BaseMemoryLib.h> | ||||||
| #include <Library/DebugLib.h>                 // ASSERT_EFI_ERROR() | #include <Library/DebugLib.h>                 // ASSERT_EFI_ERROR() | ||||||
|  | #include <Library/MemoryAllocationLib.h> | ||||||
|  | #include <Library/PcdLib.h> | ||||||
| #include <Library/UefiBootServicesTableLib.h> // gBS | #include <Library/UefiBootServicesTableLib.h> // gBS | ||||||
| #include <Protocol/Smbios.h>                  // EFI_SMBIOS_PROTOCOL | #include <Protocol/Smbios.h>                  // EFI_SMBIOS_PROTOCOL | ||||||
|  |  | ||||||
| #include "SmbiosPlatformDxe.h" | #include "SmbiosPlatformDxe.h" | ||||||
|  |  | ||||||
| #define TYPE0_STRINGS \ | STATIC CONST SMBIOS_TABLE_TYPE0  mOvmfDefaultType0 = { | ||||||
|   "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 = { |  | ||||||
|   { |  | ||||||
|   // SMBIOS_STRUCTURE Hdr |   // SMBIOS_STRUCTURE Hdr | ||||||
|   { |   { | ||||||
|     EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type |     EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type | ||||||
| @@ -57,9 +46,6 @@ STATIC CONST OVMF_TYPE0  mOvmfDefaultType0 = { | |||||||
|   0,     // UINT8                     SystemBiosMinorRelease |   0,     // UINT8                     SystemBiosMinorRelease | ||||||
|   0xFF,  // UINT8                     EmbeddedControllerFirmwareMajorRelease |   0xFF,  // UINT8                     EmbeddedControllerFirmwareMajorRelease | ||||||
|   0xFF   // UINT8                     EmbeddedControllerFirmwareMinorRelease |   0xFF   // UINT8                     EmbeddedControllerFirmwareMinorRelease | ||||||
|   }, |  | ||||||
|   // Text strings (unformatted area) |  | ||||||
|   TYPE0_STRINGS |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -153,14 +139,55 @@ InstallAllStructures ( | |||||||
|     // |     // | ||||||
|     // Add OVMF default Type 0 (BIOS Information) table |     // 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; |     SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; | ||||||
|     Status       = Smbios->Add ( |     Status       = Smbios->Add ( | ||||||
|                              Smbios, |                              Smbios, | ||||||
|                              NULL, |                              NULL, | ||||||
|                              &SmbiosHandle, |                              &SmbiosHandle, | ||||||
|                              (EFI_SMBIOS_TABLE_HEADER *)&mOvmfDefaultType0 |                              (EFI_SMBIOS_TABLE_HEADER *)Type0 | ||||||
|                              ); |                              ); | ||||||
|     ASSERT_EFI_ERROR (Status); |     ASSERT_EFI_ERROR (Status); | ||||||
|  |  | ||||||
|  |     FreePool (Type0); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   return EFI_SUCCESS; |   return EFI_SUCCESS; | ||||||
|   | |||||||
| @@ -32,9 +32,12 @@ | |||||||
|  |  | ||||||
| [Packages] | [Packages] | ||||||
|   MdePkg/MdePkg.dec |   MdePkg/MdePkg.dec | ||||||
|  |   MdeModulePkg/MdeModulePkg.dec | ||||||
|   OvmfPkg/OvmfPkg.dec |   OvmfPkg/OvmfPkg.dec | ||||||
|  |  | ||||||
| [LibraryClasses] | [LibraryClasses] | ||||||
|  |   BaseLib | ||||||
|  |   BaseMemoryLib | ||||||
|   DebugLib |   DebugLib | ||||||
|   MemoryAllocationLib |   MemoryAllocationLib | ||||||
|   PcdLib |   PcdLib | ||||||
| @@ -45,6 +48,9 @@ | |||||||
| [Pcd] | [Pcd] | ||||||
|   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId |   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId | ||||||
|   gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated |   gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated | ||||||
|  |   gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor | ||||||
|  |   gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString | ||||||
|  |   gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareReleaseDateString | ||||||
|  |  | ||||||
| [Protocols] | [Protocols] | ||||||
|   gEfiSmbiosProtocolGuid                      # PROTOCOL ALWAYS_CONSUMED |   gEfiSmbiosProtocolGuid                      # PROTOCOL ALWAYS_CONSUMED | ||||||
|   | |||||||
| @@ -38,19 +38,26 @@ | |||||||
|  |  | ||||||
| [Packages] | [Packages] | ||||||
|   MdePkg/MdePkg.dec |   MdePkg/MdePkg.dec | ||||||
|  |   MdeModulePkg/MdeModulePkg.dec | ||||||
|  |  | ||||||
| [Packages.IA32, Packages.X64] | [Packages.IA32, Packages.X64] | ||||||
|   OvmfPkg/OvmfPkg.dec |   OvmfPkg/OvmfPkg.dec | ||||||
|  |  | ||||||
| [LibraryClasses] | [LibraryClasses] | ||||||
|  |   BaseLib | ||||||
|  |   BaseMemoryLib | ||||||
|   DebugLib |   DebugLib | ||||||
|   UefiBootServicesTableLib |   UefiBootServicesTableLib | ||||||
|   UefiDriverEntryPoint |   UefiDriverEntryPoint | ||||||
|  |  | ||||||
| [LibraryClasses.IA32, LibraryClasses.X64] | [LibraryClasses.IA32, LibraryClasses.X64] | ||||||
|   BaseLib |  | ||||||
|   HobLib |   HobLib | ||||||
|  |  | ||||||
|  | [Pcd] | ||||||
|  |   gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor | ||||||
|  |   gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString | ||||||
|  |   gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareReleaseDateString | ||||||
|  |  | ||||||
| [Protocols] | [Protocols] | ||||||
|   gEfiSmbiosProtocolGuid                      # PROTOCOL ALWAYS_CONSUMED |   gEfiSmbiosProtocolGuid                      # PROTOCOL ALWAYS_CONSUMED | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user