RE: [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
- In reply to: Rebecca Cran : "Re: [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 26 Apr 2022 13:08:32 UTC
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@bsdio.com> Sent: Tuesday, April 26, 2022 4:39 AM To: Corvin Köhne <C.Koehne@beckhoff.com> Cc: Corvin Köhne <C.Koehne@beckhoff.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Jordan Justen <jordan.l.justen@intel.com>; devel@edk2.groups.io; FreeBSD Virtualization <freebsd-virtualization@freebsd.org>; Jiewen Yao <jiewen.yao@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Peter Grehan <grehan@freebsd.org> Subject: Re: [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg CAUTION: External Email!! Reviewed-by: Rebecca Cran <rebecca@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@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> > Acked-by: Rebecca Cran <rebecca@bsdio.com> > Acked-by: Peter Grehan <grehan@freebsd.org> > Acked-by: Jiewen Yao <jiewen.yao@intel.com> > CC: Ard Biesheuvel <ardb+tianocore@kernel.org> > CC: Jordan Justen <jordan.l.justen@intel.com> > 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