From nobody Fri Apr 08 05:53:19 2022 X-Original-To: freebsd-virtualization@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 95DDF1A84A84 for ; Fri, 8 Apr 2022 05:53:54 +0000 (UTC) (envelope-from C.Koehne@beckhoff.com) Received: from Internet2.beckhoff.com (internet2.beckhoff.com [194.25.186.210]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "*.beckhoff.com", Issuer "Thawte TLS RSA CA G1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KZS9Y2zZvz4vHS; Fri, 8 Apr 2022 05:53:53 +0000 (UTC) (envelope-from C.Koehne@beckhoff.com) DKIM-Signature: v=1; c=relaxed/relaxed; d=beckhoff.com; s=mail2022e; t=1649397226; bh=H7KurMcmspHAOH24IS2OLKN3vHZeBxOlVPAokOKuwDE=; h= "Subject:Subject:From:From:Date:Date:ReplyTo:ReplyTo:Cc:Cc:Message-Id:Message-Id"; a=ed25519-sha256; b= xYpbH5f9kgV2exS72VmSXpCN1bQUe4bPJpulpllOUz3MtKIsCE21lfzHfZIECroC2QCPr2klqLzf7DagRubwDA== DKIM-Signature: v=1; c=relaxed/relaxed; d=beckhoff.com; s=mail2022r; t=1649397226; bh=H7KurMcmspHAOH24IS2OLKN3vHZeBxOlVPAokOKuwDE=; h= "Subject:Subject:From:From:Date:Date:ReplyTo:ReplyTo:Cc:Cc:Message-Id:Message-Id"; a=rsa-sha256; b= S42svLvaDOEZY6La5UFKEKgQwAkw6BYFu03oowo66v/FBz5jy03S9LmZqZh5n9QocVCJiiR3fKQuEkuPoMAFcU2oKZ4nx2w+RRNT7oW6R1AJOYQ8pR0QidQSVVlBfAFRrpNiAAlL39HXtXtD1EbrTYNWy9BbqXtdFnWhMz3z+ea/FKDJFf2mTroZT0d4qzl+tz+VZAX1vOTxlfKOmzx2RW9PauO0krSyeA1/heey5IqPu9VsR1FCVL7qRVasgj9Xd9kKaYiwPdhuHw2IxGKGsYx5BlibnutlGT/AOv2YzRXoGb/0eP7SqPIeh8bgA2niI+8NE0XqV8jj2vUqhPDulw== Received: from 172.17.5.170 by Internet2.beckhoff.com (Tls12, Aes256, Sha384, DiffieHellmanEllipticKey256); Fri, 08 Apr 2022 05:53:46 GMT Received: from CorvinK-NB03.fritz.box (172.17.204.212) by ex04.beckhoff.com (172.17.5.170) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.24; Fri, 8 Apr 2022 07:53:44 +0200 From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: CC: =?UTF-8?q?Corvin=20K=C3=B6hne?= , =?UTF-8?q?Corvin=20K=C3=B6hne?= , Ard Biesheuvel , Jiewen Yao , Jordan Justen , , FreeBSD Virtualization , Gerd Hoffmann , Rebecca Cran , Peter Grehan Subject: [PATCH v3] OvmfPkg/BhyveBhfPkg: add support for QemuFwCfg Date: Fri, 8 Apr 2022 07:53:19 +0200 Message-ID: <20220408055320.107-1-c.koehne@beckhoff.com> X-Mailer: git-send-email 2.11.0 List-Id: Discussion List-Archive: https://lists.freebsd.org/archives/freebsd-virtualization List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-virtualization@freebsd.org X-BeenThere: freebsd-virtualization@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [172.17.204.212] X-ClientProxiedBy: ex01.beckhoff.com (172.17.2.168) To ex04.beckhoff.com (172.17.5.170) X-OLX-Disclaimer: EX04.BECKHOFF.COM X-Rspamd-Queue-Id: 4KZS9Y2zZvz4vHS X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; dkim=pass header.d=beckhoff.com header.s=mail2022e header.b=xYpbH5f9; dkim=pass header.d=beckhoff.com header.s=mail2022r header.b=S42svLva; dmarc=none; spf=pass (mx1.freebsd.org: domain of C.Koehne@beckhoff.com designates 194.25.186.210 as permitted sender) smtp.mailfrom=C.Koehne@beckhoff.com X-Spamd-Result: default: False [-1.00 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; R_DKIM_ALLOW(-0.20)[beckhoff.com:s=mail2022e,beckhoff.com:s=mail2022r]; HAS_XOIP(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+mx]; NEURAL_HAM_LONG(-1.00)[-1.000]; TAGGED_RCPT(0.00)[tianocore]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[beckhoff.com]; RCVD_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DKIM_TRACE(0.00)[beckhoff.com:+]; NEURAL_HAM_SHORT(-1.00)[-0.997]; RCPT_COUNT_SEVEN(0.00)[10]; MID_CONTAINS_FROM(1.00)[]; MLMMJ_DEST(0.00)[freebsd-virtualization]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:3320, ipnet:194.25.0.0/16, country:DE]; RCVD_IN_DNSWL_NONE(0.00)[194.25.186.210:from]; SUSPICIOUS_RECIPS(1.50)[] X-ThisMailContainsUnwantedMimeParts: N =EF=BB=BFFrom: Corvin K=C3=B6hne 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=C3=B6hne Acked-by: Gerd Hoffmann Acked-by: Rebecca Cran Acked-by: Peter Grehan CC: Ard Biesheuvel CC: Jiewen Yao CC: Jordan Justen CC: devel@edk2.groups.io CC: FreeBSD Virtualization --- 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/Bh= yve/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/AcpiPlat= formDxe/Bhyve.c index 8e80aa33e1..e216a21bfa 100644 --- a/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c +++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c @@ -11,6 +11,41 @@ #include #include #include +#include // 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 !=3D sizeof (*CpuCount)) { + return EFI_BAD_BUFFER_SIZE; + } + + QemuFwCfgSelectItem (Item); + QemuFwCfgReadBytes (Size, CpuCount); + + return EFI_SUCCESS; + } + + // + // QemuFwCfg not available, try BhyveFwCtl. + // + Size =3D sizeof (*CpuCount); + if (BhyveFwCtlGet ("hw.ncpu", CpuCount, &Size) =3D=3D RETURN_SUCCESS) { + return EFI_SUCCESS; + } + + return EFI_UNSUPPORTED; +} =20 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 >=3D sizeof (EFI_ACPI_DESCRIPTION_HEADER)); =20 // Query the host for the number of vCPUs - CpuCount =3D 0; - cSize =3D sizeof (CpuCount); - if (BhyveFwCtlGet ("hw.ncpu", &CpuCount, &cSize) =3D=3D RETURN_SUCCESS) = { + Status =3D BhyveGetCpuCount (&CpuCount); + if (!EFI_ERROR (Status)) { DEBUG ((DEBUG_INFO, "Retrieved CpuCount %d\n", CpuCount)); ASSERT (CpuCount >=3D 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/DxeS= ecurityManagementLib.inf UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVar= iablesLib.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/DxeMemEncryptSevLi= b.inf @@ -355,6 +354,7 @@ !endif PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf + QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf =20 [LibraryClasses.common.UEFI_APPLICATION] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf --=20 2.11.0 Beckhoff Automation GmbH & Co. KG | Managing Director: Dipl. Phys. Hans Bec= khoff Registered office: Verl, Germany | Register court: Guetersloh HRA 7075