mirror of https://github.com/acidanthera/audk.git
OvmfPkg: Update AcpiPlatformDxe to alter MADT table
RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429 In TDX the guest firmware is designed to publish a multiprocessor-wakeup structure to let the guest-bootstrap processor wake up guest-application processors with a mailbox. The mailbox is memory that the guest firmware can reserve so each guest virtual processor can have the guest OS send a message to them. The address of the mailbox is recorded in the MADT table. See [ACPI]. To maintain the simplicity of the AcpiPlatformDxe, the MADT ACPI table will be altered in another driver (TdxDxe) by installing a protocol to notify that the ACPI table provided by Qemu is ready. Then in TdxDxe a notification functioin will be called to alter the MADT table to recorded the mailbox address. The protocol is gQemuAcpiTableNotifyProtocolGuid. Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: Erdem Aktas <erdemaktas@google.com> Cc: James Bottomley <jejb@linux.ibm.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Min Xu <min.m.xu@intel.com>
This commit is contained in:
parent
cf17156d7d
commit
9fdc70af6b
|
@ -49,6 +49,7 @@
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||||
gEfiPciIoProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
|
gEfiPciIoProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
|
||||||
|
gQemuAcpiTableNotifyProtocolGuid # PROTOCOL PRODUCES
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gRootBridgesConnectedEventGroupGuid
|
gRootBridgesConnectedEventGroupGuid
|
||||||
|
|
|
@ -19,7 +19,10 @@
|
||||||
#include <Library/QemuFwCfgS3Lib.h> // QemuFwCfgS3Enabled()
|
#include <Library/QemuFwCfgS3Lib.h> // QemuFwCfgS3Enabled()
|
||||||
#include <Library/UefiBootServicesTableLib.h> // gBS
|
#include <Library/UefiBootServicesTableLib.h> // gBS
|
||||||
|
|
||||||
|
#include <Protocol/QemuAcpiTableNotify.h>
|
||||||
#include "AcpiPlatform.h"
|
#include "AcpiPlatform.h"
|
||||||
|
EFI_HANDLE mQemuAcpiHandle = NULL;
|
||||||
|
QEMU_ACPI_TABLE_NOTIFY_PROTOCOL mAcpiNotifyProtocol;
|
||||||
|
|
||||||
//
|
//
|
||||||
// The user structure for the ordered collection that will track the fw_cfg
|
// The user structure for the ordered collection that will track the fw_cfg
|
||||||
|
@ -1273,7 +1276,16 @@ UninstallAcpiTables:
|
||||||
AcpiProtocol->UninstallAcpiTable (AcpiProtocol, InstalledKey[Installed]);
|
AcpiProtocol->UninstallAcpiTable (AcpiProtocol, InstalledKey[Installed]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DEBUG ((DEBUG_INFO, "%a: installed %d tables\n", __FUNCTION__, Installed));
|
//
|
||||||
|
// Install a protocol to notify that the ACPI table provided by Qemu is
|
||||||
|
// ready.
|
||||||
|
//
|
||||||
|
gBS->InstallProtocolInterface (
|
||||||
|
&mQemuAcpiHandle,
|
||||||
|
&gQemuAcpiTableNotifyProtocolGuid,
|
||||||
|
EFI_NATIVE_INTERFACE,
|
||||||
|
&mAcpiNotifyProtocol
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (SeenPointerEntry = OrderedCollectionMin (SeenPointers);
|
for (SeenPointerEntry = OrderedCollectionMin (SeenPointers);
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/** @file
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef QEMU_ACPI_TABLE_NOTIFY_H_
|
||||||
|
#define QEMU_ACPI_TABLE_NOTIFY_H_
|
||||||
|
|
||||||
|
#define QEMU_ACPI_TABLE_NOTIFY_GUID \
|
||||||
|
{ 0x928939b2, 0x4235, 0x462f, { 0x95, 0x80, 0xf6, 0xa2, 0xb2, 0xc2, 0x1a, 0x4f } };
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Forward declaration
|
||||||
|
///
|
||||||
|
typedef struct _QEMU_ACPI_TABLE_NOTIFY_PROTOCOL QEMU_ACPI_TABLE_NOTIFY_PROTOCOL;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Protocol structure
|
||||||
|
///
|
||||||
|
struct _QEMU_ACPI_TABLE_NOTIFY_PROTOCOL {
|
||||||
|
UINT8 Notify;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern EFI_GUID gQemuAcpiTableNotifyProtocolGuid;
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue