#include <Library/BaseMemoryLib.h>\r
#include <Library/BhyveFwCtlLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
+#include <Library/QemuFwCfgLib.h> // QemuFwCfgFindFile()\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+BhyveGetCpuCount (\r
+ OUT UINT32 *CpuCount\r
+ )\r
+{\r
+ FIRMWARE_CONFIG_ITEM Item;\r
+ UINTN Size;\r
+\r
+ if (QemuFwCfgIsAvailable ()) {\r
+ if (EFI_ERROR (QemuFwCfgFindFile ("opt/bhyve/hw.ncpu", &Item, &Size))) {\r
+ return EFI_NOT_FOUND;\r
+ } else if (Size != sizeof (*CpuCount)) {\r
+ return EFI_BAD_BUFFER_SIZE;\r
+ }\r
+\r
+ QemuFwCfgSelectItem (Item);\r
+ QemuFwCfgReadBytes (Size, CpuCount);\r
+\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ //\r
+ // QemuFwCfg not available, try BhyveFwCtl.\r
+ //\r
+ Size = sizeof (*CpuCount);\r
+ if (BhyveFwCtlGet ("hw.ncpu", CpuCount, &Size) == RETURN_SUCCESS) {\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ return EFI_UNSUPPORTED;\r
+}\r
\r
STATIC\r
EFI_STATUS\r
)\r
{\r
UINT32 CpuCount;\r
- UINTN cSize;\r
UINTN NewBufferSize;\r
EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *Madt;\r
EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE *LocalApic;\r
ASSERT (AcpiTableBufferSize >= sizeof (EFI_ACPI_DESCRIPTION_HEADER));\r
\r
// Query the host for the number of vCPUs\r
- CpuCount = 0;\r
- cSize = sizeof (CpuCount);\r
- if (BhyveFwCtlGet ("hw.ncpu", &CpuCount, &cSize) == RETURN_SUCCESS) {\r
+ Status = BhyveGetCpuCount (&CpuCount);\r
+ if (!EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_INFO, "Retrieved CpuCount %d\n", CpuCount));\r
ASSERT (CpuCount >= 1);\r
} else {\r
SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf\r
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf\r
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf\r
- QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf\r
- QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf\r
+ QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf\r
BhyveFwCtlLib|OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.inf\r
VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf\r
MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf\r
!endif\r
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf\r
MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf\r
+ QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf\r
\r
[LibraryClasses.common.UEFI_APPLICATION]\r
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r