mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-02 13:03:28 +01:00
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_
|