mirror of https://github.com/acidanthera/audk.git
OvmfPkg/Bhyve: add support for QemuFwCfg
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> Reviewed-by: Rebecca Cran <rebecca@bsdio.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Peter Grehan <grehan@freebsd.org> Acked-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
parent
cabd96ad03
commit
4092f1d397
|
@ -43,6 +43,7 @@
|
|||
MemoryAllocationLib
|
||||
OrderedCollectionLib
|
||||
PcdLib
|
||||
QemuFwCfgLib
|
||||
UefiBootServicesTableLib
|
||||
UefiDriverEntryPoint
|
||||
UefiLib
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -164,8 +164,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
|
||||
|
@ -358,6 +357,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
|
||||
|
|
Loading…
Reference in New Issue