mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +02:00
OvmfPkg: define CPU_HOT_EJECT_DATA
Define CPU_HOT_EJECT_DATA and add PCD PcdCpuHotEjectDataAddress, which will be used to share CPU ejection state between OvmfPkg/CpuHotPlugSmm and PiSmmCpuDxeSmm. Cc: Laszlo Ersek <lersek@redhat.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Aaron Young <aaron.young@oracle.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3132 Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com> Message-Id: <20210312062656.2477515-6-ankur.a.arora@oracle.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
15e6ae8ea4
commit
8ade9d425a
60
OvmfPkg/Include/Pcd/CpuHotEjectData.h
Normal file
60
OvmfPkg/Include/Pcd/CpuHotEjectData.h
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/** @file
|
||||||
|
Definition for the CPU_HOT_EJECT_DATA structure, which shares
|
||||||
|
CPU hot-eject state between OVMF's SmmCpuFeaturesLib instance in
|
||||||
|
PiSmmCpuDxeSmm, and CpuHotplugSmm.
|
||||||
|
|
||||||
|
CPU_HOT_EJECT_DATA is allocated in SMRAM, and pointed-to by
|
||||||
|
PcdCpuHotEjectDataAddress.
|
||||||
|
|
||||||
|
PcdCpuHotEjectDataAddress is valid when SMM_REQUIRE is TRUE
|
||||||
|
and PcdCpuMaxLogicalProcessorNumber > 1.
|
||||||
|
|
||||||
|
Copyright (C) 2021, Oracle Corporation.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef CPU_HOT_EJECT_DATA_H_
|
||||||
|
#define CPU_HOT_EJECT_DATA_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
CPU Hot-eject handler, called from SmmCpuFeaturesRendezvousExit()
|
||||||
|
on each CPU at exit from SMM.
|
||||||
|
|
||||||
|
@param[in] ProcessorNum ProcessorNum denotes the CPU exiting SMM,
|
||||||
|
and will be used as an index into
|
||||||
|
CPU_HOT_EJECT_DATA->QemuSelectorMap. It is
|
||||||
|
identical to the processor handle in
|
||||||
|
EFI_SMM_CPU_SERVICE_PROTOCOL.
|
||||||
|
**/
|
||||||
|
typedef
|
||||||
|
VOID
|
||||||
|
(EFIAPI *CPU_HOT_EJECT_HANDLER) (
|
||||||
|
IN UINTN ProcessorNum
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// CPU_EJECT_QEMU_SELECTOR_INVALID marks CPUs not being ejected in
|
||||||
|
// CPU_HOT_EJECT_DATA->QemuSelectorMap.
|
||||||
|
//
|
||||||
|
// QEMU CPU Selector is UINT32, so we choose an invalid value larger
|
||||||
|
// than that type.
|
||||||
|
//
|
||||||
|
#define CPU_EJECT_QEMU_SELECTOR_INVALID (MAX_UINT64)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
//
|
||||||
|
// Maps ProcessorNum -> QemuSelector for pending hot-ejects
|
||||||
|
//
|
||||||
|
volatile UINT64 *QemuSelectorMap;
|
||||||
|
//
|
||||||
|
// Handler to do the CPU ejection
|
||||||
|
//
|
||||||
|
volatile CPU_HOT_EJECT_HANDLER Handler;
|
||||||
|
//
|
||||||
|
// Entries in the QemuSelectorMap
|
||||||
|
//
|
||||||
|
UINT32 ArrayLength;
|
||||||
|
} CPU_HOT_EJECT_DATA;
|
||||||
|
|
||||||
|
#endif // CPU_HOT_EJECT_DATA_H_
|
@ -352,6 +352,10 @@
|
|||||||
# This PCD is only accessed if PcdSmmSmramRequire is TRUE (see below).
|
# This PCD is only accessed if PcdSmmSmramRequire is TRUE (see below).
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdQ35SmramAtDefaultSmbase|FALSE|BOOLEAN|0x34
|
gUefiOvmfPkgTokenSpaceGuid.PcdQ35SmramAtDefaultSmbase|FALSE|BOOLEAN|0x34
|
||||||
|
|
||||||
|
## This PCD adds a communication channel between OVMF's SmmCpuFeaturesLib
|
||||||
|
# instance in PiSmmCpuDxeSmm, and CpuHotplugSmm.
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdCpuHotEjectDataAddress|0|UINT64|0x46
|
||||||
|
|
||||||
[PcdsFeatureFlag]
|
[PcdsFeatureFlag]
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderPciTranslation|TRUE|BOOLEAN|0x1c
|
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderPciTranslation|TRUE|BOOLEAN|0x1c
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderMmioTranslation|FALSE|BOOLEAN|0x1d
|
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderMmioTranslation|FALSE|BOOLEAN|0x1d
|
||||||
|
Loading…
x
Reference in New Issue
Block a user