]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/Bhyve: add support for QemuFwCfg
authorCorvin Köhne <c.koehne@beckhoff.com>
Wed, 13 Oct 2021 09:19:36 +0000 (11:19 +0200)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 2 May 2022 16:38:23 +0000 (16:38 +0000)
QemuFwCfg is much more powerful than BhyveFwCtl. Sadly, BhyveFwCtl
decided to use the same IO ports as QemuFwCfg. It's not possible to use
both interfaces simultaneously. So, prefer QemuFwCfg over BhyveFwCtl.

Signed-off-by: Corvin Köhne <c.koehne@beckhoff.com>
Reviewed-by: Rebecca Cran <rebecca@bsdio.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Peter Grehan <grehan@freebsd.org>
Acked-by: Jiewen Yao <jiewen.yao@intel.com>
OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf
OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c
OvmfPkg/Bhyve/BhyveX64.dsc

index 595fd055f98a6d10d94f4bf5ac3838efd1047597..94c65f32dcab2659ec2c0eb852d695b480634adf 100644 (file)
@@ -43,6 +43,7 @@
   MemoryAllocationLib\r
   OrderedCollectionLib\r
   PcdLib\r
+  QemuFwCfgLib\r
   UefiBootServicesTableLib\r
   UefiDriverEntryPoint\r
   UefiLib\r
index 8e80aa33e19e2cffacf31474d2a005b519475638..e216a21bfaed164bbe5c034686e1eeb293fe9008 100644 (file)
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/BhyveFwCtlLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
+#include <Library/QemuFwCfgLib.h>             // QemuFwCfgFindFile()\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+BhyveGetCpuCount (\r
+  OUT UINT32  *CpuCount\r
+  )\r
+{\r
+  FIRMWARE_CONFIG_ITEM  Item;\r
+  UINTN                 Size;\r
+\r
+  if (QemuFwCfgIsAvailable ()) {\r
+    if (EFI_ERROR (QemuFwCfgFindFile ("opt/bhyve/hw.ncpu", &Item, &Size))) {\r
+      return EFI_NOT_FOUND;\r
+    } else if (Size != sizeof (*CpuCount)) {\r
+      return EFI_BAD_BUFFER_SIZE;\r
+    }\r
+\r
+    QemuFwCfgSelectItem (Item);\r
+    QemuFwCfgReadBytes (Size, CpuCount);\r
+\r
+    return EFI_SUCCESS;\r
+  }\r
+\r
+  //\r
+  // QemuFwCfg not available, try BhyveFwCtl.\r
+  //\r
+  Size = sizeof (*CpuCount);\r
+  if (BhyveFwCtlGet ("hw.ncpu", CpuCount, &Size) == RETURN_SUCCESS) {\r
+    return EFI_SUCCESS;\r
+  }\r
+\r
+  return EFI_UNSUPPORTED;\r
+}\r
 \r
 STATIC\r
 EFI_STATUS\r
@@ -23,7 +58,6 @@ BhyveInstallAcpiMadtTable (
   )\r
 {\r
   UINT32                                               CpuCount;\r
-  UINTN                                                cSize;\r
   UINTN                                                NewBufferSize;\r
   EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER  *Madt;\r
   EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE          *LocalApic;\r
@@ -36,9 +70,8 @@ BhyveInstallAcpiMadtTable (
   ASSERT (AcpiTableBufferSize >= sizeof (EFI_ACPI_DESCRIPTION_HEADER));\r
 \r
   // Query the host for the number of vCPUs\r
-  CpuCount = 0;\r
-  cSize    = sizeof (CpuCount);\r
-  if (BhyveFwCtlGet ("hw.ncpu", &CpuCount, &cSize) == RETURN_SUCCESS) {\r
+  Status = BhyveGetCpuCount (&CpuCount);\r
+  if (!EFI_ERROR (Status)) {\r
     DEBUG ((DEBUG_INFO, "Retrieved CpuCount %d\n", CpuCount));\r
     ASSERT (CpuCount >= 1);\r
   } else {\r
index a8fa4d38ab60c26d453dd33f9d60bce200fd4fe6..002cef32a3557b75bfd1626044d70899863aec00 100644 (file)
   SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf\r
   UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf\r
   SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf\r
-  QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf\r
-  QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf\r
+  QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf\r
   BhyveFwCtlLib|OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.inf\r
   VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf\r
   MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf\r
 !endif\r
   PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf\r
   MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf\r
+  QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf\r
 \r
 [LibraryClasses.common.UEFI_APPLICATION]\r
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r