X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=OvmfPkg%2FLibrary%2FSmbiosVersionLib%2FDetectSmbiosVersionLib.c;h=69c2d3640037fcf25477d8944a5eca66e9b246d0;hb=ac0a286f4d74;hp=4d2c23cfb39f346cc9b8be46aab75c60b95b0718;hpb=d1050b9dff1cace252aff86630bfdb59dff5f507;p=mirror_edk2.git 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 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);