diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 07d5a87e66..a7bde48beb 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -232,6 +232,11 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640 gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 + # + # SMBIOS entry point version + # + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0300 + ################################################################################ # # Components Section - list of all EDK II Modules needed by this Platform diff --git a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c index 8f60e21789..814bb5c55e 100644 --- a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c +++ b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c @@ -19,9 +19,48 @@ #include #include +#include + +#include +#include #include #include + +/** + Set the SMBIOS entry point version for the generic SmbiosDxe driver. +**/ +STATIC +VOID +SmbiosVersionInitialization ( + VOID + ) +{ + FIRMWARE_CONFIG_ITEM Anchor; + UINTN AnchorSize; + SMBIOS_TABLE_ENTRY_POINT QemuAnchor; + UINT16 SmbiosVersion; + + if (RETURN_ERROR (QemuFwCfgFindFile ("etc/smbios/smbios-anchor", &Anchor, + &AnchorSize)) || + AnchorSize != sizeof QemuAnchor) { + return; + } + + QemuFwCfgSelectItem (Anchor); + QemuFwCfgReadBytes (AnchorSize, &QemuAnchor); + if (CompareMem (QemuAnchor.AnchorString, "_SM_", 4) != 0 || + CompareMem (QemuAnchor.IntermediateAnchorString, "_DMI_", 5) != 0) { + return; + } + + SmbiosVersion = (UINT16)(QemuAnchor.MajorVersion << 8 | + QemuAnchor.MinorVersion); + DEBUG ((EFI_D_INFO, "%a: SMBIOS version from QEMU: 0x%04x\n", __FUNCTION__, + SmbiosVersion)); + PcdSet16 (PcdSmbiosVersion, SmbiosVersion); +} + EFI_STATUS EFIAPI ParseQemuFwCfgToPcd ( @@ -29,5 +68,6 @@ ParseQemuFwCfgToPcd ( IN EFI_SYSTEM_TABLE *SystemTable ) { + SmbiosVersionInitialization (); return EFI_SUCCESS; } diff --git a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf index a9983becef..649cfdc141 100644 --- a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf +++ b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf @@ -29,14 +29,18 @@ [Packages] MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec OvmfPkg/OvmfPkg.dec [LibraryClasses] + BaseMemoryLib + DebugLib PcdLib QemuFwCfgLib UefiDriverEntryPoint [Pcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion [Depex] TRUE