* [PATCH v6 0/3] OvmfPkg/Bhyve: install ACPI tables from memory
@ 2023-06-06 9:21 Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 1/3] OvmfPkg/Xen: export search of RSDP into a library function Corvin Köhne
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Corvin Köhne @ 2023-06-06 9:21 UTC (permalink / raw)
To: devel; +Cc: Corvin Köhne
CI: https://github.com/tianocore/edk2/pull/4379/checks
Corvin Köhne (3):
OvmfPkg/Xen: export search of RSDP into a library function
OvmfPkg/Xen: export AcpiTable installation into AcpiPlatformLib
OvmfPkg/Bhyve: install ACPI tables from memory
OvmfPkg/OvmfPkg.dec | 4 +
OvmfPkg/Bhyve/BhyveX64.dsc | 1 +
OvmfPkg/OvmfXen.dsc | 1 +
.../Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf | 1 +
.../AcpiPlatformLib/DxeAcpiPlatformLib.inf | 26 ++++
.../XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf | 2 +-
OvmfPkg/Include/Library/AcpiPlatformLib.h | 49 ++++++
OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c | 37 ++++-
.../AcpiPlatformLib/DxeAcpiPlatformLib.c} | 140 +++++-------------
OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c | 47 +++++-
10 files changed, 200 insertions(+), 108 deletions(-)
create mode 100644 OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf
create mode 100644 OvmfPkg/Include/Library/AcpiPlatformLib.h
rename OvmfPkg/{XenAcpiPlatformDxe/Xen.c => Library/AcpiPlatformLib/DxeAcpiPlatformLib.c} (61%)
--
2.40.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v6 1/3] OvmfPkg/Xen: export search of RSDP into a library function
2023-06-06 9:21 [PATCH v6 0/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
@ 2023-06-06 9:21 ` Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 2/3] OvmfPkg/Xen: export AcpiTable installation into AcpiPlatformLib Corvin Köhne
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Corvin Köhne @ 2023-06-06 9:21 UTC (permalink / raw)
To: devel
Cc: Corvin Köhne, Anthony PERARD, Gerd Hoffmann, Ard Biesheuvel,
Jiewen Yao, Jordan Justen, Julien Grall, Rebecca Cran,
Peter Grehan
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öhne <corvink@FreeBSD.org>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Julien Grall <julien@xen.org>
Cc: Rebecca Cran <rebecca@bsdio.com>
Cc: Peter Grehan <grehan@freebsd.org>
---
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
[LibraryClasses]
+ ## @libraryclass Search and install ACPI tables.
+ #
+ AcpiPlatformLib|Include/Library/AcpiPlatformLib.h
+
## @libraryclass Access bhyve's firmware control interface.
BhyveFwCtlLib|Include/Library/BhyveFwCtlLib.h
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
[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/OvmfPkg/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öhne <corvink@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = DxeAcpiPlatformLib
+ FILE_GUID = 578F441A-4A4C-4D24-B9BE-F783152B46F6
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = AcpiPlatformLib
+
+[Sources]
+ DxeAcpiPlatformLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ OvmfPkg/OvmfPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
diff --git a/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf b/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
index d3a6353a50a6..65374569ddc2 100644
--- a/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
+++ b/OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
@@ -32,6 +32,7 @@ [Packages]
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
+ AcpiPlatformLib
BaseLib
DebugLib
UefiBootServicesTableLib
diff --git a/OvmfPkg/Include/Library/AcpiPlatformLib.h b/OvmfPkg/Include/Library/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öhne <corvink@FreeBSD.org>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+/**
+ Searches and returns the address of the ACPI Root System Description Pointer (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.<BR>
+ Copyright (c) 2012, Bei Guan <gbtju85@gmail.com>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/AcpiPlatformLib.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+
+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 = (UINT8 *)StartAddress;
+ AcpiPtr < (UINT8 *)EndAddress;
+ AcpiPtr += 0x10)
+ {
+ RsdpStructurePtr = (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 = CalculateSum8 (
+ (CONST UINT8 *)RsdpStructurePtr,
+ sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER)
+ );
+ if (Sum != 0) {
+ return EFI_ABORTED;
+ }
+
+ if (RsdpStructurePtr->Revision >= 2) {
+ //
+ // RSDP ACPI 2.0/3.0 checksum, this is the entire table
+ //
+ Sum = CalculateSum8 (
+ (CONST UINT8 *)RsdpStructurePtr,
+ sizeof (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER)
+ );
+ if (Sum != 0) {
+ return EFI_ABORTED;
+ }
+ }
+
+ *RsdpPtr = 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 @@
**/
+#include <Library/AcpiPlatformLib.h>
#include <Library/BaseLib.h> // CpuDeadLoop()
#include <Library/DebugLib.h> // DEBUG()
#include <Library/XenPlatformLib.h> // XenGetInfoHOB()
@@ -20,92 +21,6 @@
EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *XenAcpiRsdpStructurePtr = NULL;
-/**
- 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 integrated.
-
-**/
-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 = XenGetInfoHOB ();
- ASSERT (XenInfo != NULL);
- if (XenInfo->RsdpPvh != NULL) {
- DEBUG ((
- DEBUG_INFO,
- "%a: Use ACPI RSDP table at 0x%p\n",
- gEfiCallerBaseName,
- XenInfo->RsdpPvh
- ));
- *RsdpPtr = XenInfo->RsdpPvh;
- return EFI_SUCCESS;
- }
-
- //
- // Otherwise, look for the HVM one
- //
- for (XenAcpiPtr = (UINT8 *)(UINTN)XEN_ACPI_PHYSICAL_ADDRESS;
- XenAcpiPtr < (UINT8 *)(UINTN)XEN_BIOS_PHYSICAL_END;
- XenAcpiPtr += 0x10)
- {
- RsdpStructurePtr = (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 = CalculateSum8 (
- (CONST UINT8 *)RsdpStructurePtr,
- sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER)
- );
- if (Sum != 0) {
- return EFI_ABORTED;
- }
-
- if (RsdpStructurePtr->Revision >= 2) {
- //
- // RSDP ACPI 2.0/3.0 checksum, this is the entire table
- //
- Sum = CalculateSum8 (
- (CONST UINT8 *)RsdpStructurePtr,
- sizeof (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER)
- );
- if (Sum != 0) {
- return EFI_ABORTED;
- }
- }
-
- *RsdpPtr = 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 installed
@@ -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;
Fadt2Table = NULL;
Fadt1Table = NULL;
@@ -152,11 +68,34 @@ InstallXenTables (
NumberOfTableEntries = 0;
//
- // Try to find Xen ACPI tables
+ // Detect the RSDP structure
//
- Status = GetXenAcpiRsdp (&XenAcpiRsdpStructurePtr);
- if (EFI_ERROR (Status)) {
- return Status;
+
+ //
+ // First look for PVH one
+ //
+ XenInfo = XenGetInfoHOB ();
+ ASSERT (XenInfo != NULL);
+ if (XenInfo->RsdpPvh != NULL) {
+ DEBUG ((
+ DEBUG_INFO,
+ "%a: Use ACPI RSDP table at 0x%p\n",
+ gEfiCallerBaseName,
+ XenInfo->RsdpPvh
+ ));
+ XenAcpiRsdpStructurePtr = XenInfo->RsdpPvh;
+ } else {
+ //
+ // Otherwise, look for the HVM one
+ //
+ Status = GetAcpiRsdpFromMemory (
+ XEN_ACPI_PHYSICAL_ADDRESS,
+ XEN_BIOS_PHYSICAL_END,
+ &XenAcpiRsdpStructurePtr
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
}
//
--
2.40.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v6 2/3] OvmfPkg/Xen: export AcpiTable installation into AcpiPlatformLib
2023-06-06 9:21 [PATCH v6 0/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 1/3] OvmfPkg/Xen: export search of RSDP into a library function Corvin Köhne
@ 2023-06-06 9:21 ` Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 3/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
2023-06-06 11:00 ` [edk2-devel] [PATCH v6 0/3] " Ard Biesheuvel
3 siblings, 0 replies; 5+ messages in thread
From: Corvin Köhne @ 2023-06-06 9:21 UTC (permalink / raw)
To: devel
Cc: Corvin Köhne, Anthony PERARD, Gerd Hoffmann, Ard Biesheuvel,
Jiewen Yao, Jordan Justen, Julien Grall, Rebecca Cran,
Peter Grehan
This makes the function reuseable by bhyve.
Signed-off-by: Corvin Köhne <corvink@FreeBSD.org>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Julien Grall <julien@xen.org>
Cc: Rebecca Cran <rebecca@bsdio.com>
Cc: Peter Grehan <grehan@freebsd.org>
---
.../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
[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
**/
+#include <Protocol/AcpiTable.h>
+
/**
Searches and returns the address of the ACPI Root System Description Pointer (RSDP) in system memory.
@@ -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 9dd9026edb12..228cb20ee697 100644
--- a/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c
+++ b/OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.c
@@ -65,3 +65,188 @@ GetAcpiRsdpFromMemory (
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 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 = NULL;
+ Fadt1Table = NULL;
+ Facs2Table = NULL;
+ Facs1Table = NULL;
+ DsdtTable = NULL;
+ TableHandle = 0;
+ NumberOfTableEntries = 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 = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->XsdtAddress;
+ NumberOfTableEntries =
+ (Xsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof (UINT64);
+
+ //
+ // Install ACPI tables found in XSDT.
+ //
+ for (Index = 0; Index < NumberOfTableEntries; Index++) {
+ //
+ // Get the table entry from XSDT
+ //
+ CurrentTableEntry =
+ (VOID *)((UINT8 *)Xsdt + sizeof (EFI_ACPI_DESCRIPTION_HEADER) +
+ Index * sizeof (UINT64));
+ CurrentTablePointer = (UINTN)*(UINT64 *)CurrentTableEntry;
+ CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer;
+
+ //
+ // Install the XSDT tables
+ //
+ Status = 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 = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *)(UINTN)
+ CurrentTablePointer;
+ Facs2Table = (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)(UINTN)
+ Fadt2Table->FirmwareCtrl;
+ DsdtTable = (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 = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->RsdtAddress;
+ NumberOfTableEntries =
+ (Rsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof (UINT32);
+
+ //
+ // Install ACPI tables found in XSDT.
+ //
+ for (Index = 0; Index < NumberOfTableEntries; Index++) {
+ //
+ // Get the table entry from RSDT
+ //
+ CurrentTableEntry =
+ (UINT32 *)((UINT8 *)Rsdt + sizeof (EFI_ACPI_DESCRIPTION_HEADER) +
+ Index * sizeof (UINT32));
+ CurrentTablePointer = *(UINT32 *)CurrentTableEntry;
+ CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer;
+
+ //
+ // Install the RSDT tables
+ //
+ Status = 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 = (EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *)(UINTN)
+ CurrentTablePointer;
+ Facs1Table = (EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)(UINTN)
+ Fadt1Table->FirmwareCtrl;
+ DsdtTable = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt1Table->Dsdt;
+ }
+ }
+ }
+
+ //
+ // Install the FACS table.
+ //
+ if (Fadt2Table) {
+ //
+ // FACS 2.0
+ //
+ Status = AcpiProtocol->InstallAcpiTable (
+ AcpiProtocol,
+ Facs2Table,
+ Facs2Table->Length,
+ &TableHandle
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ } else if (Fadt1Table) {
+ //
+ // FACS 1.0
+ //
+ Status = 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 == NULL) {
+ DEBUG ((DEBUG_ERROR, "%a: no DSDT found\n", __func__));
+ ASSERT (FALSE);
+ CpuDeadLoop ();
+ }
+
+ Status = 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 @@
**/
-#include <Library/XenPlatformLib.h> // XenDetected()
+#include <Library/AcpiPlatformLib.h> // InstallAcpiTablesFromMemory()
+#include <Library/DebugLib.h> // DEBUG()
+#include <Library/XenPlatformLib.h> // XenDetected()
#include "AcpiPlatform.h"
+#define XEN_ACPI_PHYSICAL_ADDRESS 0x000EA020
+#define XEN_BIOS_PHYSICAL_END 0x000FFFFF
+
/**
Effective entrypoint of Acpi Platform driver.
@@ -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;
if (XenDetected ()) {
- Status = InstallXenTables (AcpiTable);
+ //
+ // Detect the RSDP structure
+ //
+
+ //
+ // First look for PVH one
+ //
+ XenInfo = XenGetInfoHOB ();
+ ASSERT (XenInfo != NULL);
+ if (XenInfo->RsdpPvh != NULL) {
+ DEBUG ((
+ DEBUG_INFO,
+ "%a: Use ACPI RSDP table at 0x%p\n",
+ gEfiCallerBaseName,
+ XenInfo->RsdpPvh
+ ));
+ RsdpStructurePtr = XenInfo->RsdpPvh;
+ } else {
+ //
+ // Otherwise, look for the HVM one
+ //
+ Status = GetAcpiRsdpFromMemory (
+ XEN_ACPI_PHYSICAL_ADDRESS,
+ XEN_BIOS_PHYSICAL_END,
+ &RsdpStructurePtr
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ }
+
+ Status = InstallAcpiTablesFromRsdp (
+ AcpiTable,
+ RsdpStructurePtr
+ );
} else {
Status = 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.<BR>
- Copyright (c) 2012, Bei Guan <gbtju85@gmail.com>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Library/AcpiPlatformLib.h>
-#include <Library/BaseLib.h> // CpuDeadLoop()
-#include <Library/DebugLib.h> // DEBUG()
-#include <Library/XenPlatformLib.h> // XenGetInfoHOB()
-
-#include "AcpiPlatform.h"
-
-#define XEN_ACPI_PHYSICAL_ADDRESS 0x000EA020
-#define XEN_BIOS_PHYSICAL_END 0x000FFFFF
-
-EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *XenAcpiRsdpStructurePtr = 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 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 = NULL;
- Fadt1Table = NULL;
- Facs2Table = NULL;
- Facs1Table = NULL;
- DsdtTable = NULL;
- TableHandle = 0;
- NumberOfTableEntries = 0;
-
- //
- // Detect the RSDP structure
- //
-
- //
- // First look for PVH one
- //
- XenInfo = XenGetInfoHOB ();
- ASSERT (XenInfo != NULL);
- if (XenInfo->RsdpPvh != NULL) {
- DEBUG ((
- DEBUG_INFO,
- "%a: Use ACPI RSDP table at 0x%p\n",
- gEfiCallerBaseName,
- XenInfo->RsdpPvh
- ));
- XenAcpiRsdpStructurePtr = XenInfo->RsdpPvh;
- } else {
- //
- // Otherwise, look for the HVM one
- //
- Status = 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 = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)
- XenAcpiRsdpStructurePtr->XsdtAddress;
- NumberOfTableEntries = (Xsdt->Length -
- sizeof (EFI_ACPI_DESCRIPTION_HEADER)) /
- sizeof (UINT64);
-
- //
- // Install ACPI tables found in XSDT.
- //
- for (Index = 0; Index < NumberOfTableEntries; Index++) {
- //
- // Get the table entry from XSDT
- //
- CurrentTableEntry = (VOID *)((UINT8 *)Xsdt +
- sizeof (EFI_ACPI_DESCRIPTION_HEADER) +
- Index * sizeof (UINT64));
- CurrentTablePointer = (UINTN)*(UINT64 *)CurrentTableEntry;
- CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer;
-
- //
- // Install the XSDT tables
- //
- Status = 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 = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *)
- (UINTN)CurrentTablePointer;
- Facs2Table = (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)
- (UINTN)Fadt2Table->FirmwareCtrl;
- DsdtTable = (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 = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)
- XenAcpiRsdpStructurePtr->RsdtAddress;
- NumberOfTableEntries = (Rsdt->Length -
- sizeof (EFI_ACPI_DESCRIPTION_HEADER)) /
- sizeof (UINT32);
-
- //
- // Install ACPI tables found in XSDT.
- //
- for (Index = 0; Index < NumberOfTableEntries; Index++) {
- //
- // Get the table entry from RSDT
- //
- CurrentTableEntry = (UINT32 *)((UINT8 *)Rsdt +
- sizeof (EFI_ACPI_DESCRIPTION_HEADER) +
- Index * sizeof (UINT32));
- CurrentTablePointer = *(UINT32 *)CurrentTableEntry;
- CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer;
-
- //
- // Install the RSDT tables
- //
- Status = 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 = (EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *)
- (UINTN)CurrentTablePointer;
- Facs1Table = (EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)
- (UINTN)Fadt1Table->FirmwareCtrl;
- DsdtTable = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt1Table->Dsdt;
- }
- }
- }
-
- //
- // Install the FACS table.
- //
- if (Fadt2Table) {
- //
- // FACS 2.0
- //
- Status = AcpiProtocol->InstallAcpiTable (
- AcpiProtocol,
- Facs2Table,
- Facs2Table->Length,
- &TableHandle
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- } else if (Fadt1Table) {
- //
- // FACS 1.0
- //
- Status = 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 == NULL) {
- DEBUG ((DEBUG_ERROR, "%a: no DSDT found\n", __func__));
- ASSERT (FALSE);
- CpuDeadLoop ();
- }
-
- Status = AcpiProtocol->InstallAcpiTable (
- AcpiProtocol,
- DsdtTable,
- DsdtTable->Length,
- &TableHandle
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- return EFI_SUCCESS;
-}
--
2.40.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v6 3/3] OvmfPkg/Bhyve: install ACPI tables from memory
2023-06-06 9:21 [PATCH v6 0/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 1/3] OvmfPkg/Xen: export search of RSDP into a library function Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 2/3] OvmfPkg/Xen: export AcpiTable installation into AcpiPlatformLib Corvin Köhne
@ 2023-06-06 9:21 ` Corvin Köhne
2023-06-06 11:00 ` [edk2-devel] [PATCH v6 0/3] " Ard Biesheuvel
3 siblings, 0 replies; 5+ messages in thread
From: Corvin Köhne @ 2023-06-06 9:21 UTC (permalink / raw)
To: devel
Cc: Corvin Köhne, Rebecca Cran, Peter Grehan, Gerd Hoffmann,
Ard Biesheuvel, Jiewen Yao, Jordan Justen
It's much easier to create configuration dependend ACPI tables for bhyve
than for OVMF. For this reason, don't use the statically created ACPI
tables provided by OVMF. Instead prefer the dynamically created ACPI
tables of bhyve. If bhyve provides no ACPI tables or we are unable to
detect those, fall back to OVMF tables.
Ideally, we use the qemu fwcfg interface to pass the ACPI tables from
bhyve to OVMF. bhyve will support this in the future. However, current
bhyve executables don't support passing ACPI tables by the qemu fwcfg
interface. They just copy the ACPI into main memory. For that reason,
pick up the ACPI tables from main memory.
Signed-off-by: Corvin Köhne <corvink@FreeBSD.org>
Reviewed-by: Rebecca Cran <rebecca@bsdio.com>
Acked-by: Peter Grehan <grehan@freebsd.org>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
---
OvmfPkg/Bhyve/BhyveX64.dsc | 1 +
.../Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf | 1 +
OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c | 37 ++++++++++++++++++-
3 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc
index bb317a50e6af..7b974706f958 100644
--- a/OvmfPkg/Bhyve/BhyveX64.dsc
+++ b/OvmfPkg/Bhyve/BhyveX64.dsc
@@ -341,6 +341,7 @@ [LibraryClasses.common.UEFI_DRIVER]
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
[LibraryClasses.common.DXE_DRIVER]
+ AcpiPlatformLib|OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf
index 94c65f32dcab..75ed8e4a7deb 100644
--- a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf
+++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf
@@ -35,6 +35,7 @@ [Packages]
UefiCpuPkg/UefiCpuPkg.dec
[LibraryClasses]
+ AcpiPlatformLib
BaseLib
BaseMemoryLib
BhyveFwCtlLib
diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c
index 999e9f151ebb..1e1c90614ea1 100644
--- a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c
+++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c
@@ -10,6 +10,11 @@
#include "AcpiPlatform.h"
+#include <Library/AcpiPlatformLib.h> // InstallAcpiTablesFromMemory()
+
+#define BHYVE_ACPI_PHYSICAL_ADDRESS ((UINTN)0x000F2400)
+#define BHYVE_BIOS_PHYSICAL_END ((UINTN)0x00100000)
+
EFI_STATUS
EFIAPI
InstallAcpiTable (
@@ -241,7 +246,37 @@ InstallAcpiTables (
IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable
)
{
- EFI_STATUS Status;
+ EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp;
+ EFI_STATUS Status;
+
+ Status = GetAcpiRsdpFromMemory (
+ BHYVE_ACPI_PHYSICAL_ADDRESS,
+ BHYVE_BIOS_PHYSICAL_END,
+ &Rsdp
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = InstallAcpiTablesFromRsdp (
+ AcpiTable,
+ Rsdp
+ );
+ if (!EFI_ERROR (Status)) {
+ return EFI_SUCCESS;
+ }
+
+ if (Status != EFI_NOT_FOUND) {
+ DEBUG (
+ (
+ DEBUG_WARN,
+ "%a: unable to install bhyve's ACPI tables (%r)\n",
+ __func__,
+ Status
+ )
+ );
+ return Status;
+ }
Status = InstallOvmfFvTables (AcpiTable);
--
2.40.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [edk2-devel] [PATCH v6 0/3] OvmfPkg/Bhyve: install ACPI tables from memory
2023-06-06 9:21 [PATCH v6 0/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
` (2 preceding siblings ...)
2023-06-06 9:21 ` [PATCH v6 3/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
@ 2023-06-06 11:00 ` Ard Biesheuvel
3 siblings, 0 replies; 5+ messages in thread
From: Ard Biesheuvel @ 2023-06-06 11:00 UTC (permalink / raw)
To: devel, corvink
On Tue, 6 Jun 2023 at 11:22, Corvin Köhne <corvink@freebsd.org> wrote:
>
> CI: https://github.com/tianocore/edk2/pull/4379/checks
>
> Corvin Köhne (3):
> OvmfPkg/Xen: export search of RSDP into a library function
> OvmfPkg/Xen: export AcpiTable installation into AcpiPlatformLib
> OvmfPkg/Bhyve: install ACPI tables from memory
>
Merged as #4521
Thanks
> OvmfPkg/OvmfPkg.dec | 4 +
> OvmfPkg/Bhyve/BhyveX64.dsc | 1 +
> OvmfPkg/OvmfXen.dsc | 1 +
> .../Bhyve/AcpiPlatformDxe/AcpiPlatformDxe.inf | 1 +
> .../AcpiPlatformLib/DxeAcpiPlatformLib.inf | 26 ++++
> .../XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf | 2 +-
> OvmfPkg/Include/Library/AcpiPlatformLib.h | 49 ++++++
> OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c | 37 ++++-
> .../AcpiPlatformLib/DxeAcpiPlatformLib.c} | 140 +++++-------------
> OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c | 47 +++++-
> 10 files changed, 200 insertions(+), 108 deletions(-)
> create mode 100644 OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf
> create mode 100644 OvmfPkg/Include/Library/AcpiPlatformLib.h
> rename OvmfPkg/{XenAcpiPlatformDxe/Xen.c => Library/AcpiPlatformLib/DxeAcpiPlatformLib.c} (61%)
>
> --
> 2.40.1
>
>
>
>
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-06-06 11:01 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-06 9:21 [PATCH v6 0/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 1/3] OvmfPkg/Xen: export search of RSDP into a library function Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 2/3] OvmfPkg/Xen: export AcpiTable installation into AcpiPlatformLib Corvin Köhne
2023-06-06 9:21 ` [PATCH v6 3/3] OvmfPkg/Bhyve: install ACPI tables from memory Corvin Köhne
2023-06-06 11:00 ` [edk2-devel] [PATCH v6 0/3] " Ard Biesheuvel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox