summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/Library/SmbiosVersionLib
diff options
context:
space:
mode:
Diffstat (limited to 'OvmfPkg/Library/SmbiosVersionLib')
-rw-r--r--OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c113
1 files changed, 68 insertions, 45 deletions
diff --git a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
index 4d2c23cfb3..69c2d36400 100644
--- a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
+++ b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
@@ -20,8 +20,8 @@
#include <Library/QemuFwCfgLib.h>
typedef union {
- SMBIOS_TABLE_ENTRY_POINT V2;
- SMBIOS_TABLE_3_0_ENTRY_POINT V3;
+ SMBIOS_TABLE_ENTRY_POINT V2;
+ SMBIOS_TABLE_3_0_ENTRY_POINT V3;
} QEMU_SMBIOS_ANCHOR;
RETURN_STATUS
@@ -30,11 +30,11 @@ DetectSmbiosVersion (
VOID
)
{
- FIRMWARE_CONFIG_ITEM Anchor, Tables;
- UINTN AnchorSize, TablesSize;
- QEMU_SMBIOS_ANCHOR QemuAnchor;
- UINT16 SmbiosVersion;
- RETURN_STATUS PcdStatus;
+ FIRMWARE_CONFIG_ITEM Anchor, Tables;
+ UINTN AnchorSize, TablesSize;
+ QEMU_SMBIOS_ANCHOR QemuAnchor;
+ UINT16 SmbiosVersion;
+ RETURN_STATUS PcdStatus;
if (PcdGetBool (PcdQemuSmbiosValidated)) {
//
@@ -45,53 +45,76 @@ DetectSmbiosVersion (
return RETURN_SUCCESS;
}
- if (RETURN_ERROR (QemuFwCfgFindFile (
- "etc/smbios/smbios-anchor", &Anchor, &AnchorSize)) ||
- RETURN_ERROR (QemuFwCfgFindFile (
- "etc/smbios/smbios-tables", &Tables, &TablesSize)) ||
- TablesSize == 0) {
+ if (RETURN_ERROR (
+ QemuFwCfgFindFile (
+ "etc/smbios/smbios-anchor",
+ &Anchor,
+ &AnchorSize
+ )
+ ) ||
+ RETURN_ERROR (
+ QemuFwCfgFindFile (
+ "etc/smbios/smbios-tables",
+ &Tables,
+ &TablesSize
+ )
+ ) ||
+ (TablesSize == 0))
+ {
return RETURN_SUCCESS;
}
QemuFwCfgSelectItem (Anchor);
switch (AnchorSize) {
- case sizeof QemuAnchor.V2:
- QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);
-
- if (QemuAnchor.V2.MajorVersion != 2 ||
- QemuAnchor.V2.TableLength != TablesSize ||
- CompareMem (QemuAnchor.V2.AnchorString, "_SM_", 4) != 0 ||
- CompareMem (QemuAnchor.V2.IntermediateAnchorString, "_DMI_", 5) != 0) {
- return RETURN_SUCCESS;
- }
- SmbiosVersion = (UINT16)(QemuAnchor.V2.MajorVersion << 8 |
- 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) {
+ case sizeof QemuAnchor.V2:
+ QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);
+
+ if ((QemuAnchor.V2.MajorVersion != 2) ||
+ (QemuAnchor.V2.TableLength != TablesSize) ||
+ (CompareMem (QemuAnchor.V2.AnchorString, "_SM_", 4) != 0) ||
+ (CompareMem (QemuAnchor.V2.IntermediateAnchorString, "_DMI_", 5) != 0))
+ {
+ return RETURN_SUCCESS;
+ }
+
+ SmbiosVersion = (UINT16)(QemuAnchor.V2.MajorVersion << 8 |
+ 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 ((
+ DEBUG_INFO,
+ "%a: SMBIOS 3.x DocRev from QEMU: 0x%02x\n",
+ __FUNCTION__,
+ QemuAnchor.V3.DocRev
+ ));
+ PcdStatus = PcdSet8S (PcdSmbiosDocRev, QemuAnchor.V3.DocRev);
+ ASSERT_RETURN_ERROR (PcdStatus);
+ break;
+
+ default:
return RETURN_SUCCESS;
- }
- SmbiosVersion = (UINT16)(QemuAnchor.V3.MajorVersion << 8 |
- QemuAnchor.V3.MinorVersion);
-
- DEBUG ((DEBUG_INFO, "%a: SMBIOS 3.x DocRev from QEMU: 0x%02x\n",
- __FUNCTION__, QemuAnchor.V3.DocRev));
- PcdStatus = PcdSet8S (PcdSmbiosDocRev, QemuAnchor.V3.DocRev);
- ASSERT_RETURN_ERROR (PcdStatus);
- break;
-
- default:
- return RETURN_SUCCESS;
}
- DEBUG ((DEBUG_INFO, "%a: SMBIOS version from QEMU: 0x%04x\n", __FUNCTION__,
- SmbiosVersion));
+ DEBUG ((
+ DEBUG_INFO,
+ "%a: SMBIOS version from QEMU: 0x%04x\n",
+ __FUNCTION__,
+ SmbiosVersion
+ ));
PcdStatus = PcdSet16S (PcdSmbiosVersion, SmbiosVersion);
ASSERT_RETURN_ERROR (PcdStatus);