From nobody Tue Feb 10 13:16:32 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+105774+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+105774+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1686043329464809.7760035305749; Tue, 6 Jun 2023 02:22:09 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id dFLkYY1788612xQgCb1zBb0a; Tue, 06 Jun 2023 02:22:09 -0700 X-Received: from mx2.freebsd.org (mx2.freebsd.org [96.47.72.81]) by mx.groups.io with SMTP id smtpd.web10.4469.1686043327504211706 for ; Tue, 06 Jun 2023 02:22:08 -0700 X-Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits)) (Client CN "mx1.freebsd.org", Issuer "R3" (verified OK)) by mx2.freebsd.org (Postfix) with ESMTPS id 4Qb4k661qJz49D1; Tue, 6 Jun 2023 09:22:06 +0000 (UTC) (envelope-from corvink@FreeBSD.org) X-Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Qb4k64wyhz4DBq; Tue, 6 Jun 2023 09:22:06 +0000 (UTC) (envelope-from corvink@FreeBSD.org) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1686043326; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GPRXbAZ2qgyRFPmXy8zMgJob/c+1BPi9Gx51ZLqrXnM=; b=jw+sl8vnAFBqRs0KQhd/xyrj5MUg9rprD2TzrWTm3BqCTa9iUmXuKXK/gQb58rhQ22JUXs 2VnuH2REdaKeN7hxOA8Ss28Kxkl6MO5OL3nS1ObniRIE2JTo1dbSrfpwQWwWc0EU29eAEa 4EohE+0jzD0IIRx+6pbAwuZMPYQn9zQ46pjecX5D+LZi8l/DQHaAuKzNzyeHzQcdUWcXWC rttKpBsDMGRa6IOt/MHs2rwpoXlW0JjYoFr5ULvm0LZahycFl/SZCqvxiikR5tJXPgz3Rl 9BJ09oi8Ewz+6LkY867ZXcCwDFjSmVrvzo1NMr3QUHXIWMkLJSWZdJ1SbW0Siw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1686043326; a=rsa-sha256; cv=none; b=BcZ5WMkfv76jfRFwlcJX5Cu6algyjdxnIrcQWu8cPCplYBTw2R+W0tPUttk0MPhASkxnW+ r+2SrYmaSr6nMlRLYyB3yBMmZ38l6w/+rGvoINu9NZ3Qrlv/zSrM88tAdpjL8EXY7oRK/x oo1JJSL9jdzem0/E4MqmB/+wLKIy+F9/G/8ErPGuZOICdr5RRnjO8rPK837XfnNl4QWy6W M3IoqxxUdlzzfyWM5EaQdYtRN19lGWIN4aNsG59u5Q16fim+PvOOdeijjGNh7G/jCAzOab KWZkZZEdHl6OQ4IWM0G3MxnSq6NsCq0EejNc2zc2Vap1wCzPmjCj4KSic/FJPA== X-Received: from corvink-nb.beckhoff.com (unknown [IPv6:2001:9e8:da59:8e00:1c7e:7163:67b2:a7d8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: corvink) by smtp.freebsd.org (Postfix) with ESMTPSA id 4Qb4k53SgxzgFN; Tue, 6 Jun 2023 09:22:05 +0000 (UTC) (envelope-from corvink@FreeBSD.org) From: =?UTF-8?B?Q29ydmluIEvDtmhuZQ==?= To: devel@edk2.groups.io Cc: =?UTF-8?q?Corvin=20K=C3=B6hne?= , Anthony PERARD , Gerd Hoffmann , Ard Biesheuvel , Jiewen Yao , Jordan Justen , Julien Grall , Rebecca Cran , Peter Grehan Subject: [edk2-devel] [PATCH v6 1/3] OvmfPkg/Xen: export search of RSDP into a library function Date: Tue, 6 Jun 2023 11:21:37 +0200 Message-Id: <20230606092139.115800-2-corvink@FreeBSD.org> In-Reply-To: <20230606092139.115800-1-corvink@FreeBSD.org> References: <20230606092139.115800-1-corvink@FreeBSD.org> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,corvink@FreeBSD.org X-Gm-Message-State: GmC6TxHjcyY7xCDbYg7KKpIfx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1686043329; bh=xDFHpoZIOMkfWRuEaRF1OP3+X32Su82Gks5LrxxByaU=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=ZtIyfj1PC4Wcwq7w0FzPhTGWYAIkgVzzRQ++Wr42GbVt+aGPkjx9/B65MDcaTlVrt/1 riVQ+kYSTB63mDNBrj7OoTrjeU5CLm7K8Vc16S0vQZlKOTxDhJsv7SMUjgDNRlgIj87Sx TA90FHyZJDjv8yxKhOyuq/KT2L+TktxXVIg= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1686043330260100005 Content-Type: text/plain; charset="utf-8" Xen and bhyve are placing ACPI tables into system memory. So, they can share the same code. Therefore, create a new library which searches and installs ACPI tables from system memory. Signed-off-by: Corvin K=C3=B6hne Reviewed-by: Anthony PERARD Acked-by: Gerd Hoffmann Cc: Ard Biesheuvel Cc: Jiewen Yao Cc: Jordan Justen Cc: Julien Grall Cc: Rebecca Cran Cc: Peter Grehan --- OvmfPkg/OvmfPkg.dec | 4 + OvmfPkg/OvmfXen.dsc | 1 + .../AcpiPlatformLib/DxeAcpiPlatformLib.inf | 26 ++++ .../XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf | 1 + OvmfPkg/Include/Library/AcpiPlatformLib.h | 24 ++++ .../AcpiPlatformLib/DxeAcpiPlatformLib.c | 67 ++++++++++ OvmfPkg/XenAcpiPlatformDxe/Xen.c | 119 +++++------------- 7 files changed, 152 insertions(+), 90 deletions(-) create mode 100644 OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf create mode 100644 OvmfPkg/Include/Library/AcpiPlatformLib.h create mode 100644 OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index cc5a4ceead25..e3861e5c1b39 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -20,6 +20,10 @@ [Includes] Csm/Include =20 [LibraryClasses] + ## @libraryclass Search and install ACPI tables. + # + AcpiPlatformLib|Include/Library/AcpiPlatformLib.h + ## @libraryclass Access bhyve's firmware control interface. BhyveFwCtlLib|Include/Library/BhyveFwCtlLib.h =20 diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc index 02d7f204d418..210578c1d74d 100644 --- a/OvmfPkg/OvmfXen.dsc +++ b/OvmfPkg/OvmfXen.dsc @@ -322,6 +322,7 @@ [LibraryClasses.common.UEFI_DRIVER] PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf =20 [LibraryClasses.common.DXE_DRIVER] + AcpiPlatformLib|OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf ResetSystemLib|OvmfPkg/Library/ResetSystemLib/DxeResetSystemLib.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf diff --git a/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf b/OvmfP= kg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf new file mode 100644 index 000000000000..dfe0e5623d32 --- /dev/null +++ b/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf @@ -0,0 +1,26 @@ +## @file +# ACPI Platform Library Instance. +# +# Copyright (C) 2023, Corvin K=C3=B6hne +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D DxeAcpiPlatformLib + FILE_GUID =3D 578F441A-4A4C-4D24-B9BE-F783152B46F6 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D AcpiPlatformLib + +[Sources] + DxeAcpiPlatformLib.c + +[Packages] + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + +[LibraryClasses] + BaseLib + DebugLib diff --git a/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf b/OvmfPkg/Xe= nAcpiPlatformDxe/XenAcpiPlatformDxe.inf index d3a6353a50a6..65374569ddc2 100644 --- a/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf +++ b/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf @@ -32,6 +32,7 @@ [Packages] OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] + AcpiPlatformLib BaseLib DebugLib UefiBootServicesTableLib diff --git a/OvmfPkg/Include/Library/AcpiPlatformLib.h b/OvmfPkg/Include/Li= brary/AcpiPlatformLib.h new file mode 100644 index 000000000000..b0a3c5bd0048 --- /dev/null +++ b/OvmfPkg/Include/Library/AcpiPlatformLib.h @@ -0,0 +1,24 @@ +/** @file + Copyright (c) 2023, Corvin K=C3=B6hne + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +/** + Searches and returns the address of the ACPI Root System Description Poi= nter (RSDP) in system memory. + + @param StartAddress Start address of search range. + @param EndAddress End address of search range. + @param RsdpPtr Return pointer to RSDP. + + @retval EFI_SUCCESS RSDP successfully found. + @retval EFI_NOT_FOUND Couldn't find RSDP. + @retval EFI_ABORTED Invalid RSDP found. +**/ +EFI_STATUS +EFIAPI +GetAcpiRsdpFromMemory ( + IN UINT64 StartAddress, + IN UINT64 EndAddress, + OUT EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER **RsdpPtr + ); diff --git a/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c b/OvmfPkg= /Library/AcpiPlatformLib/DxeAcpiPlatformLib.c new file mode 100644 index 000000000000..9dd9026edb12 --- /dev/null +++ b/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c @@ -0,0 +1,67 @@ +/** @file + OVMF ACPI support + + Copyright (C) 2021, Red Hat, Inc. + Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.
+ Copyright (c) 2012, Bei Guan + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +EFI_STATUS +EFIAPI +GetAcpiRsdpFromMemory ( + IN UINTN StartAddress, + IN UINTN EndAddress, + OUT EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER **RsdpPtr + ) +{ + EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr; + UINT8 *AcpiPtr; + UINT8 Sum; + + for (AcpiPtr =3D (UINT8 *)StartAddress; + AcpiPtr < (UINT8 *)EndAddress; + AcpiPtr +=3D 0x10) + { + RsdpStructurePtr =3D (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) + (UINTN)AcpiPtr; + + if (!AsciiStrnCmp ((CHAR8 *)&RsdpStructurePtr->Signature, "RSD PTR ", = 8)) { + // + // RSDP ACPI 1.0 checksum for 1.0/2.0/3.0 table. + // This is only the first 20 bytes of the structure + // + Sum =3D CalculateSum8 ( + (CONST UINT8 *)RsdpStructurePtr, + sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER) + ); + if (Sum !=3D 0) { + return EFI_ABORTED; + } + + if (RsdpStructurePtr->Revision >=3D 2) { + // + // RSDP ACPI 2.0/3.0 checksum, this is the entire table + // + Sum =3D CalculateSum8 ( + (CONST UINT8 *)RsdpStructurePtr, + sizeof (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER) + ); + if (Sum !=3D 0) { + return EFI_ABORTED; + } + } + + *RsdpPtr =3D RsdpStructurePtr; + return EFI_SUCCESS; + } + } + + return EFI_NOT_FOUND; +} diff --git a/OvmfPkg/XenAcpiPlatformDxe/Xen.c b/OvmfPkg/XenAcpiPlatformDxe/= Xen.c index a80a24628c08..a3812cb8d6d9 100644 --- a/OvmfPkg/XenAcpiPlatformDxe/Xen.c +++ b/OvmfPkg/XenAcpiPlatformDxe/Xen.c @@ -9,6 +9,7 @@ =20 **/ =20 +#include #include // CpuDeadLoop() #include // DEBUG() #include // XenGetInfoHOB() @@ -20,92 +21,6 @@ =20 EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *XenAcpiRsdpStructurePtr =3D= NULL; =20 -/** - Get the address of Xen ACPI Root System Description Pointer (RSDP) - structure. - - @param RsdpStructurePtr Return pointer to RSDP structure - - @return EFI_SUCCESS Find Xen RSDP structure successfully. - @return EFI_NOT_FOUND Don't find Xen RSDP structure. - @return EFI_ABORTED Find Xen RSDP structure, but it's not integra= ted. - -**/ -EFI_STATUS -EFIAPI -GetXenAcpiRsdp ( - OUT EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER **RsdpPtr - ) -{ - EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr; - UINT8 *XenAcpiPtr; - UINT8 Sum; - EFI_XEN_INFO *XenInfo; - - // - // Detect the RSDP structure - // - - // - // First look for PVH one - // - XenInfo =3D XenGetInfoHOB (); - ASSERT (XenInfo !=3D NULL); - if (XenInfo->RsdpPvh !=3D NULL) { - DEBUG (( - DEBUG_INFO, - "%a: Use ACPI RSDP table at 0x%p\n", - gEfiCallerBaseName, - XenInfo->RsdpPvh - )); - *RsdpPtr =3D XenInfo->RsdpPvh; - return EFI_SUCCESS; - } - - // - // Otherwise, look for the HVM one - // - for (XenAcpiPtr =3D (UINT8 *)(UINTN)XEN_ACPI_PHYSICAL_ADDRESS; - XenAcpiPtr < (UINT8 *)(UINTN)XEN_BIOS_PHYSICAL_END; - XenAcpiPtr +=3D 0x10) - { - RsdpStructurePtr =3D (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) - (UINTN)XenAcpiPtr; - - if (!AsciiStrnCmp ((CHAR8 *)&RsdpStructurePtr->Signature, "RSD PTR ", = 8)) { - // - // RSDP ACPI 1.0 checksum for 1.0/2.0/3.0 table. - // This is only the first 20 bytes of the structure - // - Sum =3D CalculateSum8 ( - (CONST UINT8 *)RsdpStructurePtr, - sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER) - ); - if (Sum !=3D 0) { - return EFI_ABORTED; - } - - if (RsdpStructurePtr->Revision >=3D 2) { - // - // RSDP ACPI 2.0/3.0 checksum, this is the entire table - // - Sum =3D CalculateSum8 ( - (CONST UINT8 *)RsdpStructurePtr, - sizeof (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER) - ); - if (Sum !=3D 0) { - return EFI_ABORTED; - } - } - - *RsdpPtr =3D RsdpStructurePtr; - return EFI_SUCCESS; - } - } - - return EFI_NOT_FOUND; -} - /** Get Xen Acpi tables from the RSDP structure. And installs Xen ACPI tables into the RSDT/XSDT using InstallAcpiTable. Some signature of the install= ed @@ -142,6 +57,7 @@ InstallXenTables ( EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs2Table; EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs1Table; EFI_ACPI_DESCRIPTION_HEADER *DsdtTable; + EFI_XEN_INFO *XenInfo; =20 Fadt2Table =3D NULL; Fadt1Table =3D NULL; @@ -152,11 +68,34 @@ InstallXenTables ( NumberOfTableEntries =3D 0; =20 // - // Try to find Xen ACPI tables + // Detect the RSDP structure // - Status =3D GetXenAcpiRsdp (&XenAcpiRsdpStructurePtr); - if (EFI_ERROR (Status)) { - return Status; + + // + // First look for PVH one + // + XenInfo =3D XenGetInfoHOB (); + ASSERT (XenInfo !=3D NULL); + if (XenInfo->RsdpPvh !=3D NULL) { + DEBUG (( + DEBUG_INFO, + "%a: Use ACPI RSDP table at 0x%p\n", + gEfiCallerBaseName, + XenInfo->RsdpPvh + )); + XenAcpiRsdpStructurePtr =3D XenInfo->RsdpPvh; + } else { + // + // Otherwise, look for the HVM one + // + Status =3D GetAcpiRsdpFromMemory ( + XEN_ACPI_PHYSICAL_ADDRESS, + XEN_BIOS_PHYSICAL_END, + &XenAcpiRsdpStructurePtr + ); + if (EFI_ERROR (Status)) { + return Status; + } } =20 // --=20 2.40.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105774): https://edk2.groups.io/g/devel/message/105774 Mute This Topic: https://groups.io/mt/99359677/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-