I seem to remember seeing previous feedback that Bhyve developers strongly preferred the BhyveFwCtl mechanism. I've been out of the loop though (busy with $dayjob) so I don't know if things have changed. Hopefully other people can provide feedback.

--
Rebecca Cran

On 4/6/22 01:00, Corvin Köhne wrote:
Any comments from bhyve folks on that?


Best regards
Corvin

Beckhoff Automation GmbH & Co. KG | Managing Director: Dipl. Phys. Hans Beckhoff
Registered office: Verl, Germany | Register court: Guetersloh HRA 7075


-----Original Message-----
From: Corvin Köhne <c.koe...@beckhoff.com>
Sent: Tuesday, March 29, 2022 12:14 PM
Cc: Corvin Köhne <c.koe...@beckhoff.com>; Corvin Köhne <c.koe...@beckhoff.com>; Ard Biesheuvel 
<ardb+tianoc...@kernel.org>; Jiewen Yao <jiewen....@intel.com>; Jordan Justen <jordan.l.jus...@intel.com>; Rebecca 
Cran <rebe...@bsdio.com>; Peter Grehan <gre...@freebsd.org>; devel@edk2.groups.io; FreeBSD Virtualization 
<freebsd-virtualizat...@freebsd.org>; Gerd Hoffmann <kra...@redhat.com>
Subject: [PATCH v2] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg

From: Corvin Köhne <corv...@beckhoff.com>

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.koe...@beckhoff.com>
Acked-by: Gerd Hoffmann <kra...@redhat.com>
CC: Ard Biesheuvel <ardb+tianoc...@kernel.org>
CC: Jiewen Yao <jiewen....@intel.com>
CC: Jordan Justen <jordan.l.jus...@intel.com>
CC: Rebecca Cran <rebe...@bsdio.com>
CC: Peter Grehan <gre...@freebsd.org>
CC: devel@edk2.groups.io
CC: FreeBSD Virtualization <freebsd-virtualizat...@freebsd.org>
---
  OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf |  1 +
  OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c             | 41 ++++++++++++++++++++---
  OvmfPkg/Bhyve/BhyveX64.dsc                        |  4 +--
  3 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf 
b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf
index 595fd055f9..94c65f32dc 100644
--- a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf
+++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf
@@ -43,6 +43,7 @@
    MemoryAllocationLib
    OrderedCollectionLib
    PcdLib
+  QemuFwCfgLib
    UefiBootServicesTableLib
    UefiDriverEntryPoint
    UefiLib
diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c 
b/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c
index 8e80aa33e1..e216a21bfa 100644
--- a/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c
+++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c
@@ -11,6 +11,41 @@
  #include <Library/BaseMemoryLib.h>
  #include <Library/BhyveFwCtlLib.h>
  #include <Library/MemoryAllocationLib.h>
+#include <Library/QemuFwCfgLib.h>             // QemuFwCfgFindFile()
+
+STATIC
+EFI_STATUS
+EFIAPI
+BhyveGetCpuCount (
+  OUT UINT32  *CpuCount
+  )
+{
+  FIRMWARE_CONFIG_ITEM  Item;
+  UINTN                 Size;
+
+  if (QemuFwCfgIsAvailable ()) {
+    if (EFI_ERROR (QemuFwCfgFindFile ("opt/bhyve/hw.ncpu", &Item, &Size))) {
+      return EFI_NOT_FOUND;
+    } else if (Size != sizeof (*CpuCount)) {
+      return EFI_BAD_BUFFER_SIZE;
+    }
+
+    QemuFwCfgSelectItem (Item);
+    QemuFwCfgReadBytes (Size, CpuCount);
+
+    return EFI_SUCCESS;
+  }
+
+  //
+  // QemuFwCfg not available, try BhyveFwCtl.
+  //
+  Size = sizeof (*CpuCount);
+  if (BhyveFwCtlGet ("hw.ncpu", CpuCount, &Size) == RETURN_SUCCESS) {
+    return EFI_SUCCESS;
+  }
+
+  return EFI_UNSUPPORTED;
+}

  STATIC
  EFI_STATUS
@@ -23,7 +58,6 @@ BhyveInstallAcpiMadtTable (
    )
  {
    UINT32                                               CpuCount;
-  UINTN                                                cSize;
    UINTN                                                NewBufferSize;
    EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER  *Madt;
    EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE          *LocalApic;
@@ -36,9 +70,8 @@ BhyveInstallAcpiMadtTable (
    ASSERT (AcpiTableBufferSize >= sizeof (EFI_ACPI_DESCRIPTION_HEADER));

    // Query the host for the number of vCPUs
-  CpuCount = 0;
-  cSize    = sizeof (CpuCount);
-  if (BhyveFwCtlGet ("hw.ncpu", &CpuCount, &cSize) == RETURN_SUCCESS) {
+  Status = BhyveGetCpuCount (&CpuCount);
+  if (!EFI_ERROR (Status)) {
      DEBUG ((DEBUG_INFO, "Retrieved CpuCount %d\n", CpuCount));
      ASSERT (CpuCount >= 1);
    } else {
diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc
index 5fa08bebd7..14070fd6dd 100644
--- a/OvmfPkg/Bhyve/BhyveX64.dsc
+++ b/OvmfPkg/Bhyve/BhyveX64.dsc
@@ -163,8 +163,7 @@
    
SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
    UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
    
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
-  QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf
-  QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf
+  QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf
    BhyveFwCtlLib|OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.inf
    VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
    
MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf
@@ -355,6 +354,7 @@
  !endif
    PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
    MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf
+  QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf

  [LibraryClasses.common.UEFI_APPLICATION]
    PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
--
2.11.0

Beckhoff Automation GmbH & Co. KG | Managing Director: Dipl. Phys. Hans Beckhoff
Registered office: Verl, Germany | Register court: Guetersloh HRA 7075











-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#88474): https://edk2.groups.io/g/devel/message/88474
Mute This Topic: https://groups.io/mt/90105103/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to