[edk2-devel] [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
Corvin Köhne
c.koehne at beckhoff.com
Tue Apr 26 13:08:32 UTC 2022
Hi Yao and Rebecca,
@Yao thanks for clarification.
@Rebecca you're right. There's a spelling mistake. Thanks for your Reviewed-by.
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: Rebecca Cran <rebecca at bsdio.com>
Sent: Tuesday, April 26, 2022 4:39 AM
To: Corvin Köhne <C.Koehne at beckhoff.com>
Cc: Corvin Köhne <C.Koehne at beckhoff.com>; Ard Biesheuvel <ardb+tianocore at kernel.org>; Jordan Justen <jordan.l.justen at intel.com>; devel at edk2.groups.io; FreeBSD Virtualization <freebsd-virtualization at freebsd.org>; Jiewen Yao <jiewen.yao at intel.com>; Gerd Hoffmann <kraxel at redhat.com>; Peter Grehan <grehan at freebsd.org>
Subject: Re: [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
CAUTION: External Email!!
Reviewed-by: Rebecca Cran <rebecca at bsdio.com>
Maybe I'm misunderstanding, but the commit message looks wrong: there's
no OvmfPkg/BhyveBhfPkg - it's OvmfPkg/Bhyve .
--
Rebecca Cran
On 4/8/22 02:15, Corvin Köhne wrote:
> From: Corvin Köhne <CorvinK at 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 at beckhoff.com>
> Acked-by: Gerd Hoffmann <kraxel at redhat.com>
> Acked-by: Rebecca Cran <rebecca at bsdio.com>
> Acked-by: Peter Grehan <grehan at freebsd.org>
> Acked-by: Jiewen Yao <jiewen.yao at intel.com>
> CC: Ard Biesheuvel <ardb+tianocore at kernel.org>
> CC: Jordan Justen <jordan.l.justen at intel.com>
> CC: devel at edk2.groups.io
> CC: FreeBSD Virtualization <freebsd-virtualization at 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
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#89329): https://edk2.groups.io/g/devel/message/89329
Mute This Topic: https://groups.io/mt/90331362/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list