From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx2.freebsd.org (mx2.freebsd.org [96.47.72.81]) by mx.groups.io with SMTP id smtpd.web11.58616.1683810996014133256 for ; Thu, 11 May 2023 06:16:36 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@freebsd.org header.s=dkim header.b=COvz1dJQ; spf=pass (domain: freebsd.org, ip: 96.47.72.81, mailfrom: corvink@freebsd.org) Received: from mx1.freebsd.org (mx1.freebsd.org [96.47.72.80]) (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 4QHC8g0rSqz3W33; Thu, 11 May 2023 13:16:35 +0000 (UTC) (envelope-from corvink@FreeBSD.org) 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 4QHC8f5xd8z4DRT; Thu, 11 May 2023 13:16:34 +0000 (UTC) (envelope-from corvink@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1683810994; 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: in-reply-to:in-reply-to:references:references; bh=oNafszSqgeffKL9GrbZ3VxPXpdfU85Y3sQSk7jdJnJs=; b=COvz1dJQtvSEjzVKQYyomJ5o8L4wv+qu5LERgrhkY9NL534/JcByOkTldJqLYSUWT752CG Fe1bzsrl0PTj7XvZTqrH8ozX2cPKVJGwMwztTHojCyvKJxVadi4CSe0wN0rVwIKYz5YcrH seflwAabVm3IZPgKb3DNd/RTkqFamKoTCwFWjInMk2hXrK17ccq+SnYgcdnyFMuNmLFEcA 0tr4tSWq4IT/xeuCZ9tB9LCWY8gVMml4qDz6u6OfJT44cq/fHNWTXcVaiNp5wOcd6DZjn4 VOi9pSJf/T1+8m6/HxcQW8tVWNuRCWo/2MmI8CSerWw6/CJ+xkSRa1aq/Jti4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1683810994; 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: in-reply-to:in-reply-to:references:references; bh=oNafszSqgeffKL9GrbZ3VxPXpdfU85Y3sQSk7jdJnJs=; b=ngEz/rTbHQykR6YcUBcwNlRr6SOAq2smwCFdMKckyjFsVcAmkiBdMay07Rj89Nu23UK/vW k2pCmsvavhnkBZWyinoaipqblc9Hcp8W4DOsgu8yutI+if8Kbl4BFlCeCHFXbyH0KxUXJS Dpg9Z6FLOYXi+Dmkx2Nu/6cV8Bq2nYtw37YAbxxCIKUI0g7tsRyS04V/WSu2b/IpQp/nuc a3QFixPDrMLcwnQ18iM6ynUUkrDhXI0navVMT8V1Mu4EwPoxdHNK9EpGa/gKoAKdKn2uib Ci30FiMhnzvwvbkOqnuPzKvLRUHvMPMRxpe4a29ZdlFTRK5n0lobzb+UgidhUg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1683810994; a=rsa-sha256; cv=none; b=JgVXz4KZgKUv/I6tuul0ere2i9ajj1V0Yu5T2ITofD9YQbf+2bIrX1n5XhI2TfR9Bnn+Yt WvK36OHdt8gfaPcIiw70MqlGdyx6dPGcILeb5oBKXYzB00QW1ibNa3u/xYToqGf7wdqfVy B/dGxPk0pxgDA/7aOEL8UrTAAGakJfQrOsT/WZrZcB3PAE2Oge/+ezpaHfyNLmrQGPAbid URCFIPuR3H6Soo6kAJ17lY7x4gBM0n2bCjbcCpoBA1Gp2moUf+6enlvO/soK+GTHXFu/mO x7uyPiNq8twTlXrhBNSTBSLolpXFfZRE//DiWLuTEGxwpyyFGuGPmBDcimIanw== Received: from [IPv6:2001:9e8:da76:7b00:9ecd:454c:c57e:cada] (unknown [IPv6:2001:9e8:da76:7b00:9ecd:454c:c57e:cada]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) (Authenticated sender: corvink) by smtp.freebsd.org (Postfix) with ESMTPSA id 4QHC8d4nvHzHKc; Thu, 11 May 2023 13:16:33 +0000 (UTC) (envelope-from corvink@FreeBSD.org) Message-ID: Subject: Re: [edk2-devel] [PATCH v5 2/3] OvmfPkg/Xen: export AcpiTable installation into AcpiPlatformLib From: =?UTF-8?B?Q29ydmluIEvDtmhuZQ==?= To: devel@edk2.groups.io, rebecca@bsdio.com, grehan@FreeBSD.org Cc: Gerd Hoffmann , Ard Biesheuvel , Jiewen Yao , Jordan Justen , Anthony Perard , Julien Grall Date: Thu, 11 May 2023 15:16:32 +0200 In-Reply-To: <27804822-1d6e-de40-a953-b46cf639c05d@bsdio.com> References: <20230511120239.695237-1-corvink@FreeBSD.org> <20230511120239.695237-2-corvink@FreeBSD.org> <27804822-1d6e-de40-a953-b46cf639c05d@bsdio.com> User-Agent: Evolution 3.46.4 MIME-Version: 1.0 X-Groupsio-MsgNum: 104701 Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-w9amXXGMfGWnkBWjZeEG" --=-w9amXXGMfGWnkBWjZeEG Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 2023-05-11 at 07:04 -0600, Rebecca Cran wrote: > Could you cc me on _all_ of the patches in a series please? >=20 > I seem to have been missed on this one, and only cc'd on 3/3. >=20 >=20 Sry, I've updated my cc list. So, you'll be included in my next update. --=20 Kind regards, Corvin On 5/11/23 06:02, Corvin K=C3=B6hne wrote: > This makes the function reuseable by bhyve. > > Signed-off-by: Corvin K=C3=B6hne > Acked-by: Gerd Hoffmann > Cc: Ard Biesheuvel > Cc: Jiewen Yao > Cc: Jordan Justen > Cc: Anthony Perard > Cc: Julien Grall > --- > .../XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf | 1 - > OvmfPkg/Include/Library/AcpiPlatformLib.h | 25 ++ > .../AcpiPlatformLib/DxeAcpiPlatformLib.c | 185 +++++++++++++ > OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c | 47 +++- > OvmfPkg/XenAcpiPlatformDxe/Xen.c | 257 --------------- --- > 5 files changed, 254 insertions(+), 261 deletions(-) > delete mode 100644 OvmfPkg/XenAcpiPlatformDxe/Xen.c > > diff --git a/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf b/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf > index 65374569ddc2..be175d290f92 100644 > --- a/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf > +++ b/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf > @@ -25,7 +25,6 @@ [Sources] > AcpiPlatform.c > AcpiPlatform.h > EntryPoint.c > - Xen.c > =20 > [Packages] > MdePkg/MdePkg.dec > diff --git a/OvmfPkg/Include/Library/AcpiPlatformLib.h b/OvmfPkg/Include/Library/AcpiPlatformLib.h > index b0a3c5bd0048..73a170636032 100644 > --- a/OvmfPkg/Include/Library/AcpiPlatformLib.h > +++ b/OvmfPkg/Include/Library/AcpiPlatformLib.h > @@ -4,6 +4,8 @@ > SPDX-License-Identifier: BSD-2-Clause-Patent > **/ > =20 > +#include > + > /** > Searches and returns the address of the ACPI Root System Description Pointer (RSDP) in system memory. > =20 > @@ -22,3 +24,26 @@ GetAcpiRsdpFromMemory ( > IN UINT64 EndAddress, > OUT EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER **RsdpPtr > ); > + > +/** > + Get Acpi tables from the RSDP structure. And installs ACPI tables > + into the RSDT/XSDT using InstallAcpiTable. Some signature of the installed > + ACPI tables are: FACP, APIC, HPET, WAET, SSDT, FACS, DSDT. > + > + @param AcpiProtocol Protocol instance pointer. > + > + @return EFI_SUCCESS The table was successfully inserted. > + @return EFI_INVALID_PARAMETER Either AcpiTableBuffer is NULL, TableHandle is > + NULL, or AcpiTableBufferSize and the size > + field embedded in the ACPI table pointed to > + by AcpiTableBuffer are not in sync. > + @return EFI_OUT_OF_RESOURCES Insufficient resources exist to complete the > +request. > + > +**/ > +EFI_STATUS > +EFIAPI > +InstallAcpiTablesFromRsdp ( > + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, > + IN EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp > + ); > diff --git a/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c b/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c > index ce52ad31cf25..06b9b88eb347 100644 > --- a/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c > +++ b/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c > @@ -60,3 +60,188 @@ GetAcpiRsdpFromMemory ( > =20 > return EFI_NOT_FOUND; > } > + > +EFI_STATUS > +EFIAPI > +InstallAcpiTablesFromRsdp ( > + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, > + IN EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp > + ) > +{ > + EFI_STATUS Status; > + UINTN TableHandle; > + > + EFI_ACPI_DESCRIPTION_HEADER *Rsdt; > + EFI_ACPI_DESCRIPTION_HEADER *Xsdt; > + VOID *CurrentTableEntry; > + UINTN CurrentTablePointer; > + EFI_ACPI_DESCRIPTION_HEADER *CurrentTable; > + UINTN Index; > + UINTN =20 NumberOfTableEntries; > + EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table; > + EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt1Table; > + EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs2Table; > + EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs1Table; > + EFI_ACPI_DESCRIPTION_HEADER *DsdtTable; > + > + Fadt2Table =3D NULL; > + Fadt1Table =3D NULL; > + Facs2Table =3D NULL; > + Facs1Table =3D NULL; > + DsdtTable =3D NULL; > + TableHandle =3D 0; > + NumberOfTableEntries =3D 0; > + > + // > + // If XSDT table is find, just install its tables. > + // Otherwise, try to find and install the RSDT tables. > + // > + if (Rsdp->XsdtAddress) { > + // > + // Retrieve the addresses of XSDT and > + // calculate the number of its table entries. > + // > + Xsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->XsdtAddress; > + NumberOfTableEntries =3D > + (Xsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof (UINT64); > + > + // > + // Install ACPI tables found in XSDT. > + // > + for (Index =3D 0; Index < NumberOfTableEntries; Index++) { > + // > + // Get the table entry from XSDT > + // > + CurrentTableEntry =3D > + (VOID *)((UINT8 *)Xsdt + sizeof (EFI_ACPI_DESCRIPTION_HEADER) + > + Index * sizeof (UINT64)); > + CurrentTablePointer =3D (UINTN)*(UINT64 *)CurrentTableEntry; > + CurrentTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer; > + > + // > + // Install the XSDT tables > + // > + Status =3D AcpiProtocol->InstallAcpiTable ( > + AcpiProtocol, > + CurrentTable, > + CurrentTable->Length, > + &TableHandle > + ); > + > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + // > + // Get the FACS and DSDT table address from the table FADT > + // > + if (!AsciiStrnCmp ((CHAR8 *)&CurrentTable->Signature, "FACP", 4)) { > + Fadt2Table =3D (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *)(UINTN) > + CurrentTablePointer; > + Facs2Table =3D (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)(UINTN) > + Fadt2Table->FirmwareCtrl; > + DsdtTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt2Table->Dsdt; > + } > + } > + } else if (Rsdp->RsdtAddress) { > + // > + // Retrieve the addresses of RSDT and > + // calculate the number of its table entries. > + // > + Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->RsdtAddress; > + NumberOfTableEntries =3D > + (Rsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof (UINT32); > + > + // > + // Install ACPI tables found in XSDT. > + // > + for (Index =3D 0; Index < NumberOfTableEntries; Index++) { > + // > + // Get the table entry from RSDT > + // > + CurrentTableEntry =3D > + (UINT32 *)((UINT8 *)Rsdt + sizeof (EFI_ACPI_DESCRIPTION_HEADER) + > + Index * sizeof (UINT32)); > + CurrentTablePointer =3D *(UINT32 *)CurrentTableEntry; > + CurrentTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer; > + > + // > + // Install the RSDT tables > + // > + Status =3D AcpiProtocol->InstallAcpiTable ( > + AcpiProtocol, > + CurrentTable, > + CurrentTable->Length, > + &TableHandle > + ); > + > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + // > + // Get the FACS and DSDT table address from the table FADT > + // > + if (!AsciiStrnCmp ((CHAR8 *)&CurrentTable->Signature, "FACP", 4)) { > + Fadt1Table =3D (EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *)(UINTN) > + CurrentTablePointer; > + Facs1Table =3D (EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)(UINTN) > + Fadt1Table->FirmwareCtrl; > + DsdtTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt1Table->Dsdt; > + } > + } > + } > + > + // > + // Install the FACS table. > + // > + if (Fadt2Table) { > + // > + // FACS 2.0 > + // > + Status =3D AcpiProtocol->InstallAcpiTable ( > + AcpiProtocol, > + Facs2Table, > + Facs2Table->Length, > + &TableHandle > + ); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + } else if (Fadt1Table) { > + // > + // FACS 1.0 > + // > + Status =3D AcpiProtocol->InstallAcpiTable ( > + AcpiProtocol, > + Facs1Table, > + Facs1Table->Length, > + &TableHandle > + ); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + } > + > + // > + // Install DSDT table. If we reached this point without finding the DSDT, > + // then we're out of sync with the hypervisor, and cannot continue. > + // > + if (DsdtTable =3D=3D NULL) { > + DEBUG ((DEBUG_ERROR, "%a: no DSDT found\n", __func__)); > + ASSERT (FALSE); > + CpuDeadLoop (); > + } > + > + Status =3D AcpiProtocol->InstallAcpiTable ( > + AcpiProtocol, > + DsdtTable, > + DsdtTable->Length, > + &TableHandle > + ); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + return EFI_SUCCESS; > +} > diff --git a/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c b/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c > index e06bb25dfc15..2dbc812953d2 100644 > --- a/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c > +++ b/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c > @@ -7,10 +7,15 @@ > =20 > **/ > =20 > -#include // XenDetected() > +#include // InstallAcpiTablesFromMemory() > +#include // DEBUG() > +#include // XenDetected() > =20 > #include "AcpiPlatform.h" > =20 > +#define XEN_ACPI_PHYSICAL_ADDRESS 0x000EA020 > +#define XEN_BIOS_PHYSICAL_END 0x000FFFFF > + > /** > Effective entrypoint of Acpi Platform driver. > =20 > @@ -28,10 +33,46 @@ InstallAcpiTables ( > IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable > ) > { > - EFI_STATUS Status; > + EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr; > + EFI_XEN_INFO *XenInfo; > + EFI_STATUS Status; > =20 > if (XenDetected ()) { > - Status =3D InstallXenTables (AcpiTable); > + // > + // 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 > + )); > + RsdpStructurePtr =3D XenInfo->RsdpPvh; > + } else { > + // > + // Otherwise, look for the HVM one > + // > + Status =3D GetAcpiRsdpFromMemory ( > + XEN_ACPI_PHYSICAL_ADDRESS, > + XEN_BIOS_PHYSICAL_END, > + &RsdpStructurePtr > + ); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + } > + > + Status =3D InstallAcpiTablesFromRsdp ( > + AcpiTable, > + RsdpStructurePtr > + ); > } else { > Status =3D EFI_UNSUPPORTED; > } > diff --git a/OvmfPkg/XenAcpiPlatformDxe/Xen.c b/OvmfPkg/XenAcpiPlatformDxe/Xen.c > deleted file mode 100644 > index a3812cb8d6d9..000000000000 > --- a/OvmfPkg/XenAcpiPlatformDxe/Xen.c > +++ /dev/null > @@ -1,257 +0,0 @@ > -/** @file > - OVMF ACPI Xen 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 // CpuDeadLoop() > -#include // DEBUG() > -#include // XenGetInfoHOB() > - > -#include "AcpiPlatform.h" > - > -#define XEN_ACPI_PHYSICAL_ADDRESS 0x000EA020 > -#define XEN_BIOS_PHYSICAL_END 0x000FFFFF > - > -EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER=20 *XenAcpiRsdpStructurePtr =3D NULL; > - > -/** > - Get Xen Acpi tables from the RSDP structure. And installs Xen ACPI tables > - into the RSDT/XSDT using InstallAcpiTable. Some signature of the installed > - ACPI tables are: FACP, APIC, HPET, WAET, SSDT, FACS, DSDT. > - > - @param AcpiProtocol Protocol instance pointer. > - > - @return EFI_SUCCESS The table was successfully inserted. > - @return EFI_INVALID_PARAMETER Either AcpiTableBuffer is NULL, TableHandle is > - NULL, or AcpiTableBufferSize and the size > - field embedded in the ACPI table pointed to > - by AcpiTableBuffer are not in sync. > - @return EFI_OUT_OF_RESOURCES Insufficient resources exist to complete the request. > - > -**/ > -EFI_STATUS > -EFIAPI > -InstallXenTables ( > - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol > - ) > -{ > - EFI_STATUS Status; > - UINTN TableHandle; > - > - EFI_ACPI_DESCRIPTION_HEADER *Rsdt; > - EFI_ACPI_DESCRIPTION_HEADER *Xsdt; > - VOID *CurrentTableEntry; > - UINTN CurrentTablePointer; > - EFI_ACPI_DESCRIPTION_HEADER *CurrentTable; > - UINTN Index; > - UINTN =20 NumberOfTableEntries; > - EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table; > - EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt1Table; > - 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; > - > - Fadt2Table =3D NULL; > - Fadt1Table =3D NULL; > - Facs2Table =3D NULL; > - Facs1Table =3D NULL; > - DsdtTable =3D NULL; > - TableHandle =3D 0; > - NumberOfTableEntries =3D 0; > - > - // > - // 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 > - )); > - 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; > - } > - } > - > - // > - // If XSDT table is find, just install its tables. > - // Otherwise, try to find and install the RSDT tables. > - // > - if (XenAcpiRsdpStructurePtr->XsdtAddress) { > - // > - // Retrieve the addresses of XSDT and > - // calculate the number of its table entries. > - // > - Xsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) > - XenAcpiRsdpStructurePtr->XsdtAddress; > - NumberOfTableEntries =3D (Xsdt->Length - > - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / > - sizeof (UINT64); > - > - // > - // Install ACPI tables found in XSDT. > - // > - for (Index =3D 0; Index < NumberOfTableEntries; Index++) { > - // > - // Get the table entry from XSDT > - // > - CurrentTableEntry =3D (VOID *)((UINT8 *)Xsdt + > - sizeof (EFI_ACPI_DESCRIPTION_HEADER) + > - Index * sizeof (UINT64)); > - CurrentTablePointer =3D (UINTN)*(UINT64 *)CurrentTableEntry; > - CurrentTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer; > - > - // > - // Install the XSDT tables > - // > - Status =3D AcpiProtocol->InstallAcpiTable ( > - AcpiProtocol, > - CurrentTable, > - CurrentTable->Length, > - &TableHandle > - ); > - > - if (EFI_ERROR (Status)) { > - return Status; > - } > - > - // > - // Get the FACS and DSDT table address from the table FADT > - // > - if (!AsciiStrnCmp ((CHAR8 *)&CurrentTable->Signature, "FACP", 4)) { > - Fadt2Table =3D (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *) > - (UINTN)CurrentTablePointer; > - Facs2Table =3D (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) > - (UINTN)Fadt2Table->FirmwareCtrl; > - DsdtTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt2Table->Dsdt; > - } > - } > - } else if (XenAcpiRsdpStructurePtr->RsdtAddress) { > - // > - // Retrieve the addresses of RSDT and > - // calculate the number of its table entries. > - // > - Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) > - XenAcpiRsdpStructurePtr->RsdtAddress; > - NumberOfTableEntries =3D (Rsdt->Length - > - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / > - sizeof (UINT32); > - > - // > - // Install ACPI tables found in XSDT. > - // > - for (Index =3D 0; Index < NumberOfTableEntries; Index++) { > - // > - // Get the table entry from RSDT > - // > - CurrentTableEntry =3D (UINT32 *)((UINT8 *)Rsdt + > - sizeof (EFI_ACPI_DESCRIPTION_HEADER) + > - Index * sizeof (UINT32)); > - CurrentTablePointer =3D *(UINT32 *)CurrentTableEntry; > - CurrentTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer; > - > - // > - // Install the RSDT tables > - // > - Status =3D AcpiProtocol->InstallAcpiTable ( > - AcpiProtocol, > - CurrentTable, > - CurrentTable->Length, > - &TableHandle > - ); > - > - if (EFI_ERROR (Status)) { > - return Status; > - } > - > - // > - // Get the FACS and DSDT table address from the table FADT > - // > - if (!AsciiStrnCmp ((CHAR8 *)&CurrentTable->Signature, "FACP", 4)) { > - Fadt1Table =3D (EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *) > - (UINTN)CurrentTablePointer; > - Facs1Table =3D (EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) > - (UINTN)Fadt1Table->FirmwareCtrl; > - DsdtTable =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt1Table->Dsdt; > - } > - } > - } > - > - // > - // Install the FACS table. > - // > - if (Fadt2Table) { > - // > - // FACS 2.0 > - // > - Status =3D AcpiProtocol->InstallAcpiTable ( > - AcpiProtocol, > - Facs2Table, > - Facs2Table->Length, > - &TableHandle > - ); > - if (EFI_ERROR (Status)) { > - return Status; > - } > - } else if (Fadt1Table) { > - // > - // FACS 1.0 > - // > - Status =3D AcpiProtocol->InstallAcpiTable ( > - AcpiProtocol, > - Facs1Table, > - Facs1Table->Length, > - &TableHandle > - ); > - if (EFI_ERROR (Status)) { > - return Status; > - } > - } > - > - // > - // Install DSDT table. If we reached this point without finding the DSDT, > - // then we're out of sync with the hypervisor, and cannot continue. > - // > - if (DsdtTable =3D=3D NULL) { > - DEBUG ((DEBUG_ERROR, "%a: no DSDT found\n", __func__)); > - ASSERT (FALSE); > - CpuDeadLoop (); > - } > - > - Status =3D AcpiProtocol->InstallAcpiTable ( > - AcpiProtocol, > - DsdtTable, > - DsdtTable->Length, > - &TableHandle > - ); > - if (EFI_ERROR (Status)) { > - return Status; > - } > - > - return EFI_SUCCESS; > -} --=-w9amXXGMfGWnkBWjZeEG Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEgvRSla3m2t/H2U9G2FTaVjFeAmoFAmRc6rAACgkQ2FTaVjFe AmolERAAj+qp6ElkGOPvzh3rLvdKTybM7+BUpvT7SBHGXQrI6QPAmwpT8CWJPQsT tZ9+Srp4C/hX/6RrJSD1hQtqEK+KOQV9pHSnYqgdlp6SzyjurOKBnUfQ31NJqr0K 5D56vjNlVkm1Jbrv+ov9/WtQT9401H5VNN9NBBb5ZVfb96kV1m8mB/yk3ReKiuTm f78bdjPkaaawmkX/ufLAOQXuj/prA10RE1YZtZATl23F6NyHH6T9z6ooHEVflu3D JY37gVytrnFmkjKFNuDyge2fKH/0wXR4RWerLwANxNxs/3aLGxvv7n6VWm3NFvpO dpc9khWRwbx3U3m1nDrrNjKlYIXOc73LSJdC1nMy2ovJP4G+mLNVhs5d+o8H78NC onozLB5YjNkwBth0nuWXKMKx/ZoDQzJj8CLuDLxcj+4eG1x8TRSvNYiXyPqf1Spj xq275KQ/+XciF25hhyaAjY52eCZgyp3ACzERlVfMBTQbRO5QNKXCzkUTd0Lpodm5 XLzrNrmYArjIpY4TjJZendyiDS8XF8qOToHe35XELGSPrtlMQfOqsSd/GzcmzEu6 RzfMpiyQAnv3MWnnDKWHM7Vy8K41kGUGId1N5zh34Yu7ItoLKJePylFQlg3Ddk1G sPPjpm9u/iYRI+m/2n3BnTbX3oHlvY2Asys3dRxZrApEzJ+LUhQ= =CS6m -----END PGP SIGNATURE----- --=-w9amXXGMfGWnkBWjZeEG--