Re: [edk2-devel] [PATCH v2] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg

From: Rebecca Cran <rebecca_at_bsdio.com>
Date: Wed, 06 Apr 2022 17:45:44 UTC
[re-posting from my personal email account, since my mail to 
freebsd-virtualization got rejected]

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.Koehne@beckhoff.com>
> Sent: Tuesday, March 29, 2022 12:14 PM
> Cc: Corvin Köhne <C.Koehne@beckhoff.com>; Corvin Köhne <C.Koehne@beckhoff.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Jiewen Yao <jiewen.yao@intel.com>; Jordan Justen <jordan.l.justen@intel.com>; Rebecca Cran <rebecca@bsdio.com>; Peter Grehan <grehan@freebsd.org>; devel@edk2.groups.io; FreeBSD Virtualization <freebsd-virtualization@freebsd.org>; Gerd Hoffmann <kraxel@redhat.com>
> Subject: [PATCH v2] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
>
> From: Corvin Köhne <CorvinK@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.koehne@beckhoff.com>
> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
> CC: Ard Biesheuvel <ardb+tianocore@kernel.org>
> CC: Jiewen Yao <jiewen.yao@intel.com>
> CC: Jordan Justen <jordan.l.justen@intel.com>
> CC: Rebecca Cran <rebecca@bsdio.com>
> CC: Peter Grehan <grehan@freebsd.org>
> CC: devel@edk2.groups.io
> CC: FreeBSD Virtualization <freebsd-virtualization@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 (#88452): https://edk2.groups.io/g/devel/message/88452
> Mute This Topic: https://groups.io/mt/90105103/3953573
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@bsdio.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>