diff --git a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c index 9d5e337e1a..950c3f7e0a 100644 --- a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c +++ b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c @@ -27,6 +27,7 @@ typedef union { SMBIOS_TABLE_ENTRY_POINT V2; + SMBIOS_TABLE_3_0_ENTRY_POINT V3; } QEMU_SMBIOS_ANCHOR; RETURN_STATUS @@ -73,6 +74,22 @@ DetectSmbiosVersion ( QemuAnchor.V2.MinorVersion); break; + case sizeof QemuAnchor.V3: + QemuFwCfgReadBytes (AnchorSize, &QemuAnchor); + + if (QemuAnchor.V3.MajorVersion != 3 || + QemuAnchor.V3.TableMaximumSize != TablesSize || + CompareMem (QemuAnchor.V3.AnchorString, "_SM3_", 5) != 0) { + return RETURN_SUCCESS; + } + SmbiosVersion = (UINT16)(QemuAnchor.V3.MajorVersion << 8 | + QemuAnchor.V3.MinorVersion); + + DEBUG ((EFI_D_INFO, "%a: SMBIOS 3.x DocRev from QEMU: 0x%02x\n", + __FUNCTION__, QemuAnchor.V3.DocRev)); + PcdSet8 (PcdSmbiosDocRev, QemuAnchor.V3.DocRev); + break; + default: return RETURN_SUCCESS; } diff --git a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf index 8487e73e46..45d953a015 100644 --- a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf +++ b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf @@ -49,4 +49,5 @@ [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 6353f1da9b..4ab618d395 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -362,6 +362,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0208 + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev|0x0 gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE ################################################################################ diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 47baeb80ce..90ca42a4d9 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -368,6 +368,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0208 + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev|0x0 gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE ################################################################################ diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index dd8148d0a9..b72eaa92f8 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -367,6 +367,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0208 + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev|0x0 gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE ################################################################################