mirror of https://github.com/acidanthera/audk.git
61 lines
1.7 KiB
C
61 lines
1.7 KiB
C
/** @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_
|