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]
|
||||
gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiPciIoProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
|
||||
gQemuAcpiTableNotifyProtocolGuid # PROTOCOL PRODUCES
|
||||
|
||||
[Guids]
|
||||
gRootBridgesConnectedEventGroupGuid
|
||||
|
|
|
@ -19,7 +19,10 @@
|
|||
#include <Library/QemuFwCfgS3Lib.h> // QemuFwCfgS3Enabled()
|
||||
#include <Library/UefiBootServicesTableLib.h> // gBS
|
||||
|
||||
#include <Protocol/QemuAcpiTableNotify.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
|
||||
|
@ -1273,7 +1276,16 @@ UninstallAcpiTables:
|
|||
AcpiProtocol->UninstallAcpiTable (AcpiProtocol, InstalledKey[Installed]);
|
||||
}
|
||||
} 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);
|
||||
|
|
|
@ -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