--- /dev/null
+/** @file\r
+ Definition for the CPU_HOT_EJECT_DATA structure, which shares\r
+ CPU hot-eject state between OVMF's SmmCpuFeaturesLib instance in\r
+ PiSmmCpuDxeSmm, and CpuHotplugSmm.\r
+\r
+ CPU_HOT_EJECT_DATA is allocated in SMRAM, and pointed-to by\r
+ PcdCpuHotEjectDataAddress.\r
+\r
+ PcdCpuHotEjectDataAddress is valid when SMM_REQUIRE is TRUE\r
+ and PcdCpuMaxLogicalProcessorNumber > 1.\r
+\r
+ Copyright (C) 2021, Oracle Corporation.\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+**/\r
+\r
+#ifndef CPU_HOT_EJECT_DATA_H_\r
+#define CPU_HOT_EJECT_DATA_H_\r
+\r
+/**\r
+ CPU Hot-eject handler, called from SmmCpuFeaturesRendezvousExit()\r
+ on each CPU at exit from SMM.\r
+\r
+ @param[in] ProcessorNum ProcessorNum denotes the CPU exiting SMM,\r
+ and will be used as an index into\r
+ CPU_HOT_EJECT_DATA->QemuSelectorMap. It is\r
+ identical to the processor handle in\r
+ EFI_SMM_CPU_SERVICE_PROTOCOL.\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *CPU_HOT_EJECT_HANDLER) (\r
+ IN UINTN ProcessorNum\r
+ );\r
+\r
+//\r
+// CPU_EJECT_QEMU_SELECTOR_INVALID marks CPUs not being ejected in\r
+// CPU_HOT_EJECT_DATA->QemuSelectorMap.\r
+//\r
+// QEMU CPU Selector is UINT32, so we choose an invalid value larger\r
+// than that type.\r
+//\r
+#define CPU_EJECT_QEMU_SELECTOR_INVALID (MAX_UINT64)\r
+\r
+typedef struct {\r
+ //\r
+ // Maps ProcessorNum -> QemuSelector for pending hot-ejects\r
+ //\r
+ volatile UINT64 *QemuSelectorMap;\r
+ //\r
+ // Handler to do the CPU ejection\r
+ //\r
+ volatile CPU_HOT_EJECT_HANDLER Handler;\r
+ //\r
+ // Entries in the QemuSelectorMap\r
+ //\r
+ UINT32 ArrayLength;\r
+} CPU_HOT_EJECT_DATA;\r
+\r
+#endif // CPU_HOT_EJECT_DATA_H_\r
# This PCD is only accessed if PcdSmmSmramRequire is TRUE (see below).\r
gUefiOvmfPkgTokenSpaceGuid.PcdQ35SmramAtDefaultSmbase|FALSE|BOOLEAN|0x34\r
\r
+ ## This PCD adds a communication channel between OVMF's SmmCpuFeaturesLib\r
+ # instance in PiSmmCpuDxeSmm, and CpuHotplugSmm.\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdCpuHotEjectDataAddress|0|UINT64|0x46\r
+\r
[PcdsFeatureFlag]\r
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderPciTranslation|TRUE|BOOLEAN|0x1c\r
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderMmioTranslation|FALSE|BOOLEAN|0x1d\r