mirror of https://github.com/acidanthera/audk.git
OvmfPkg/XenAcpiPlatformDxe: remove OVMF's built-in ACPI tables
Xen is an advanced hypervisor; no Xen guest can function correctly without the hypervisor's dynamically provided ACPI tables. Remove the built-in (fallback) tables from XenAcpiPlatformDxe -- and the OvmfXen platform. Remove any dependencies from XenAcpiPlatformDxe that are no longer needed. Cc: Anthony Perard <anthony.perard@citrix.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Julien Grall <julien@xen.org> Cc: Philippe Mathieu-Daudé <philmd@redhat.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2122 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Message-Id: <20210526201446.12554-17-lersek@redhat.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
parent
3f975ee570
commit
8f8d3d90c5
|
@ -653,7 +653,6 @@
|
||||||
#
|
#
|
||||||
MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
||||||
OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
|
OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
|
||||||
OvmfPkg/AcpiTables/AcpiTables.inf
|
|
||||||
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
|
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
|
||||||
MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
|
MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
|
||||||
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
||||||
|
|
|
@ -353,7 +353,6 @@ INF OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
|
||||||
|
|
||||||
INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
||||||
INF OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
|
INF OvmfPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
|
||||||
INF RuleOverride=ACPITABLE OvmfPkg/AcpiTables/AcpiTables.inf
|
|
||||||
INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
|
INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
|
||||||
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
|
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
|
||||||
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
||||||
|
@ -524,12 +523,6 @@ FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
|
||||||
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
|
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
|
||||||
}
|
}
|
||||||
|
|
||||||
[Rule.Common.USER_DEFINED.ACPITABLE]
|
|
||||||
FILE FREEFORM = $(NAMED_GUID) {
|
|
||||||
RAW ACPI |.acpi
|
|
||||||
RAW ASL |.aml
|
|
||||||
}
|
|
||||||
|
|
||||||
[Rule.Common.USER_DEFINED.CSM]
|
[Rule.Common.USER_DEFINED.CSM]
|
||||||
FILE FREEFORM = $(NAMED_GUID) {
|
FILE FREEFORM = $(NAMED_GUID) {
|
||||||
RAW BIN |.bin
|
RAW BIN |.bin
|
||||||
|
|
|
@ -7,208 +7,10 @@
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include <Library/DebugLib.h> // ASSERT_EFI_ERROR()
|
|
||||||
#include <Library/UefiBootServicesTableLib.h> // gBS
|
|
||||||
#include <Library/XenPlatformLib.h> // XenDetected()
|
#include <Library/XenPlatformLib.h> // XenDetected()
|
||||||
#include <Protocol/FirmwareVolume2.h> // gEfiFirmwareVolume2Protocol...
|
|
||||||
|
|
||||||
#include "AcpiPlatform.h"
|
#include "AcpiPlatform.h"
|
||||||
|
|
||||||
/**
|
|
||||||
Locate the first instance of a protocol. If the protocol requested is an
|
|
||||||
FV protocol, then it will return the first FV that contains the ACPI table
|
|
||||||
storage file.
|
|
||||||
|
|
||||||
@param Instance Return pointer to the first instance of the protocol
|
|
||||||
|
|
||||||
@return EFI_SUCCESS The function completed successfully.
|
|
||||||
@return EFI_NOT_FOUND The protocol could not be located.
|
|
||||||
@return EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
LocateFvInstanceWithTables (
|
|
||||||
OUT EFI_FIRMWARE_VOLUME2_PROTOCOL **Instance
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
EFI_HANDLE *HandleBuffer;
|
|
||||||
UINTN NumberOfHandles;
|
|
||||||
EFI_FV_FILETYPE FileType;
|
|
||||||
UINT32 FvStatus;
|
|
||||||
EFI_FV_FILE_ATTRIBUTES Attributes;
|
|
||||||
UINTN Size;
|
|
||||||
UINTN Index;
|
|
||||||
EFI_FIRMWARE_VOLUME2_PROTOCOL *FvInstance;
|
|
||||||
|
|
||||||
FvStatus = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Locate protocol.
|
|
||||||
//
|
|
||||||
Status = gBS->LocateHandleBuffer (
|
|
||||||
ByProtocol,
|
|
||||||
&gEfiFirmwareVolume2ProtocolGuid,
|
|
||||||
NULL,
|
|
||||||
&NumberOfHandles,
|
|
||||||
&HandleBuffer
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
//
|
|
||||||
// Defined errors at this time are not found and out of resources.
|
|
||||||
//
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Looking for FV with ACPI storage file
|
|
||||||
//
|
|
||||||
for (Index = 0; Index < NumberOfHandles; Index++) {
|
|
||||||
//
|
|
||||||
// Get the protocol on this handle
|
|
||||||
// This should not fail because of LocateHandleBuffer
|
|
||||||
//
|
|
||||||
Status = gBS->HandleProtocol (
|
|
||||||
HandleBuffer[Index],
|
|
||||||
&gEfiFirmwareVolume2ProtocolGuid,
|
|
||||||
(VOID**) &FvInstance
|
|
||||||
);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
|
|
||||||
//
|
|
||||||
// See if it has the ACPI storage file
|
|
||||||
//
|
|
||||||
Status = FvInstance->ReadFile (
|
|
||||||
FvInstance,
|
|
||||||
(EFI_GUID*)PcdGetPtr (PcdAcpiTableStorageFile),
|
|
||||||
NULL,
|
|
||||||
&Size,
|
|
||||||
&FileType,
|
|
||||||
&Attributes,
|
|
||||||
&FvStatus
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// If we found it, then we are done
|
|
||||||
//
|
|
||||||
if (Status == EFI_SUCCESS) {
|
|
||||||
*Instance = FvInstance;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Our exit status is determined by the success of the previous operations
|
|
||||||
// If the protocol was found, Instance already points to it.
|
|
||||||
//
|
|
||||||
|
|
||||||
//
|
|
||||||
// Free any allocated buffers
|
|
||||||
//
|
|
||||||
gBS->FreePool (HandleBuffer);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Find ACPI tables in an FV and install them.
|
|
||||||
|
|
||||||
This is now a fall-back path. Normally, we will search for tables provided
|
|
||||||
by the VMM first.
|
|
||||||
|
|
||||||
If that fails, we use this function to load the ACPI tables from an FV. The
|
|
||||||
sources for the FV based tables is located under OvmfPkg/AcpiTables.
|
|
||||||
|
|
||||||
@param AcpiTable Protocol instance pointer
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
InstallOvmfFvTables (
|
|
||||||
IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
|
|
||||||
INTN Instance;
|
|
||||||
EFI_ACPI_COMMON_HEADER *CurrentTable;
|
|
||||||
UINTN TableHandle;
|
|
||||||
UINT32 FvStatus;
|
|
||||||
UINTN TableSize;
|
|
||||||
UINTN Size;
|
|
||||||
|
|
||||||
Instance = 0;
|
|
||||||
CurrentTable = NULL;
|
|
||||||
TableHandle = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
// set FwVol (and use an ASSERT() below) to suppress incorrect
|
|
||||||
// compiler/analyzer warnings
|
|
||||||
//
|
|
||||||
FwVol = NULL;
|
|
||||||
//
|
|
||||||
// Locate the firmware volume protocol
|
|
||||||
//
|
|
||||||
Status = LocateFvInstanceWithTables (&FwVol);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return EFI_ABORTED;
|
|
||||||
}
|
|
||||||
ASSERT (FwVol != NULL);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Read tables from the storage file.
|
|
||||||
//
|
|
||||||
while (Status == EFI_SUCCESS) {
|
|
||||||
|
|
||||||
Status = FwVol->ReadSection (
|
|
||||||
FwVol,
|
|
||||||
(EFI_GUID*)PcdGetPtr (PcdAcpiTableStorageFile),
|
|
||||||
EFI_SECTION_RAW,
|
|
||||||
Instance,
|
|
||||||
(VOID**) &CurrentTable,
|
|
||||||
&Size,
|
|
||||||
&FvStatus
|
|
||||||
);
|
|
||||||
if (!EFI_ERROR (Status)) {
|
|
||||||
//
|
|
||||||
// Add the table
|
|
||||||
//
|
|
||||||
TableHandle = 0;
|
|
||||||
|
|
||||||
TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *) CurrentTable)->Length;
|
|
||||||
ASSERT (Size >= TableSize);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Install ACPI table
|
|
||||||
//
|
|
||||||
Status = AcpiTable->InstallAcpiTable (
|
|
||||||
AcpiTable,
|
|
||||||
CurrentTable,
|
|
||||||
TableSize,
|
|
||||||
&TableHandle
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Free memory allocated by ReadSection
|
|
||||||
//
|
|
||||||
gBS->FreePool (CurrentTable);
|
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return EFI_ABORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Increment the instance
|
|
||||||
//
|
|
||||||
Instance++;
|
|
||||||
CurrentTable = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Effective entrypoint of Acpi Platform driver.
|
Effective entrypoint of Acpi Platform driver.
|
||||||
|
|
||||||
|
@ -234,10 +36,6 @@ InstallAcpiTables (
|
||||||
Status = EFI_UNSUPPORTED;
|
Status = EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
Status = InstallOvmfFvTables (AcpiTable);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,13 +42,11 @@
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||||
gEfiFirmwareVolume2ProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
|
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gRootBridgesConnectedEventGroupGuid
|
gRootBridgesConnectedEventGroupGuid
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiTableStorageFile
|
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
|
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
|
||||||
|
|
||||||
[Depex]
|
[Depex]
|
||||||
|
|
Loading…
Reference in New Issue