* [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
@ 2022-04-08 8:15 Corvin Köhne
2022-04-25 11:53 ` Corvin Köhne
2022-04-26 2:38 ` Rebecca Cran
0 siblings, 2 replies; 5+ messages in thread
From: Corvin Köhne @ 2022-04-08 8:15 UTC (permalink / raw)
Cc: Corvin Köhne, Corvin Köhne, Ard Biesheuvel,
Jordan Justen, devel, FreeBSD Virtualization, Jiewen Yao,
Gerd Hoffmann, Rebecca Cran, Peter Grehan
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
--
2.11.0
Beckhoff Automation GmbH & Co. KG | Managing Director: Dipl. Phys. Hans Beckhoff
Registered office: Verl, Germany | Register court: Guetersloh HRA 7075
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
2022-04-08 8:15 [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg Corvin Köhne
@ 2022-04-25 11:53 ` Corvin Köhne
2022-04-26 2:19 ` [edk2-devel] " Yao, Jiewen
2022-04-26 2:38 ` Rebecca Cran
1 sibling, 1 reply; 5+ messages in thread
From: Corvin Köhne @ 2022-04-25 11:53 UTC (permalink / raw)
Cc: Ard Biesheuvel, Jordan Justen, devel@edk2.groups.io,
FreeBSD Virtualization, Jiewen Yao, Gerd Hoffmann, Rebecca Cran,
Peter Grehan
Hi,
does it require more review to get merged?
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: Friday, April 8, 2022 10:15 AM
Cc: Corvin Köhne <C.Koehne@beckhoff.com>; 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>; Rebecca Cran <rebecca@bsdio.com>; Peter Grehan <grehan@freebsd.org>
Subject: [PATCH v4] 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>
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
--
2.11.0
Beckhoff Automation GmbH & Co. KG | Managing Director: Dipl. Phys. Hans Beckhoff
Registered office: Verl, Germany | Register court: Guetersloh HRA 7075
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [edk2-devel] [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
2022-04-25 11:53 ` Corvin Köhne
@ 2022-04-26 2:19 ` Yao, Jiewen
0 siblings, 0 replies; 5+ messages in thread
From: Yao, Jiewen @ 2022-04-26 2:19 UTC (permalink / raw)
To: devel@edk2.groups.io, Köhne, Corvin
Cc: Ard Biesheuvel, Justen, Jordan L, FreeBSD Virtualization,
Gerd Hoffmann, Rebecca Cran, Peter Grehan
Hi Corvin
According to the process, we need
1) Reviewed-by from package maintainer. (or)
2) Reviewed-by from feature review + Acked-by from package maintainer.
You got 4 Acked-by now, including package maintainer.
We need one Reviewed-by at least, from either Bhyve reviewer or Ovmf maintainer.
Since I do not know enough on Bhyve, I will delegate to Bhyve reviewer or Ard.
Thank you
Yao Jiewen
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Corvin
> Köhne
> Sent: Monday, April 25, 2022 7:54 PM
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Justen, Jordan L
> <jordan.l.justen@intel.com>; devel@edk2.groups.io; FreeBSD Virtualization
> <freebsd-virtualization@freebsd.org>; Yao, Jiewen <jiewen.yao@intel.com>;
> Gerd Hoffmann <kraxel@redhat.com>; Rebecca Cran <rebecca@bsdio.com>;
> Peter Grehan <grehan@freebsd.org>
> Subject: Re: [edk2-devel] [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for
> QemuFwCfg
>
> Hi,
>
> does it require more review to get merged?
>
>
> 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: Friday, April 8, 2022 10:15 AM
> Cc: Corvin Köhne <C.Koehne@beckhoff.com>; 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>; Rebecca Cran
> <rebecca@bsdio.com>; Peter Grehan <grehan@freebsd.org>
> Subject: [PATCH v4] 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>
> 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/D
> xeSecurityManagementLib.inf
> UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
>
> SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLi
> b.inf
> - QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf
> -
> QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNu
> ll.inf
> + QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf
> BhyveFwCtlLib|OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.inf
> VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
>
> MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptS
> evLib.inf
> @@ -355,6 +354,7 @@
> !endif
> PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
> MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf
> +
> QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwC
> fg.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
>
>
>
>
>
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
2022-04-08 8:15 [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg Corvin Köhne
2022-04-25 11:53 ` Corvin Köhne
@ 2022-04-26 2:38 ` Rebecca Cran
2022-04-26 13:08 ` Corvin Köhne
1 sibling, 1 reply; 5+ messages in thread
From: Rebecca Cran @ 2022-04-26 2:38 UTC (permalink / raw)
To: Corvin Köhne
Cc: Corvin Köhne, Ard Biesheuvel, Jordan Justen, devel,
FreeBSD Virtualization, Jiewen Yao, Gerd Hoffmann, Peter Grehan
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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg
2022-04-26 2:38 ` Rebecca Cran
@ 2022-04-26 13:08 ` Corvin Köhne
0 siblings, 0 replies; 5+ messages in thread
From: Corvin Köhne @ 2022-04-26 13:08 UTC (permalink / raw)
To: Rebecca Cran
Cc: Ard Biesheuvel, Jordan Justen, devel@edk2.groups.io,
FreeBSD Virtualization, Jiewen Yao, Gerd Hoffmann, Peter Grehan
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
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-04-26 13:08 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-08 8:15 [PATCH v4] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg Corvin Köhne
2022-04-25 11:53 ` Corvin Köhne
2022-04-26 2:19 ` [edk2-devel] " Yao, Jiewen
2022-04-26 2:38 ` Rebecca Cran
2022-04-26 13:08 ` Corvin Köhne
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox