mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/CpuCommonFeaturesLib: Merge machine check code to same file.
Original code about Local Machine Check exception feature saves in a discrete file, because features related to machine check architecture all saved in MachineCheck.c file. This patch moved LMCE logic to same file for easy maintenance. Cc: Michael Kinney <michael.d.kinney@intel.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
parent
ac40197558
commit
306a5bcc6b
|
@ -48,7 +48,6 @@
|
|||
PendingBreak.c
|
||||
X2Apic.c
|
||||
Ppin.c
|
||||
Lmce.c
|
||||
ProcTrace.c
|
||||
|
||||
[Packages]
|
||||
|
|
|
@ -229,3 +229,84 @@ McgCtlInitialize (
|
|||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Detects if Local machine check exception feature supported on current
|
||||
processor.
|
||||
|
||||
@param[in] ProcessorNumber The index of the CPU executing this function.
|
||||
@param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION
|
||||
structure for the CPU executing this function.
|
||||
@param[in] ConfigData A pointer to the configuration buffer returned
|
||||
by CPU_FEATURE_GET_CONFIG_DATA. NULL if
|
||||
CPU_FEATURE_GET_CONFIG_DATA was not provided in
|
||||
RegisterCpuFeature().
|
||||
|
||||
@retval TRUE Local machine check exception feature is supported.
|
||||
@retval FALSE Local machine check exception feature is not supported.
|
||||
|
||||
@note This service could be called by BSP/APs.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
LmceSupport (
|
||||
IN UINTN ProcessorNumber,
|
||||
IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,
|
||||
IN VOID *ConfigData OPTIONAL
|
||||
)
|
||||
{
|
||||
MSR_IA32_MCG_CAP_REGISTER McgCap;
|
||||
|
||||
if (!McaSupport (ProcessorNumber, CpuInfo, ConfigData)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
McgCap.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);
|
||||
if (ProcessorNumber == 0) {
|
||||
DEBUG ((EFI_D_INFO, "LMCE eanble = %x\n", (BOOLEAN) (McgCap.Bits.MCG_LMCE_P != 0)));
|
||||
}
|
||||
return (BOOLEAN) (McgCap.Bits.MCG_LMCE_P != 0);
|
||||
}
|
||||
|
||||
/**
|
||||
Initializes Local machine check exception feature to specific state.
|
||||
|
||||
@param[in] ProcessorNumber The index of the CPU executing this function.
|
||||
@param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION
|
||||
structure for the CPU executing this function.
|
||||
@param[in] ConfigData A pointer to the configuration buffer returned
|
||||
by CPU_FEATURE_GET_CONFIG_DATA. NULL if
|
||||
CPU_FEATURE_GET_CONFIG_DATA was not provided in
|
||||
RegisterCpuFeature().
|
||||
@param[in] State If TRUE, then the Local machine check exception
|
||||
feature must be enabled.
|
||||
If FALSE, then the Local machine check exception
|
||||
feature must be disabled.
|
||||
|
||||
@retval RETURN_SUCCESS Local machine check exception feature is initialized.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
LmceInitialize (
|
||||
IN UINTN ProcessorNumber,
|
||||
IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,
|
||||
IN VOID *ConfigData, OPTIONAL
|
||||
IN BOOLEAN State
|
||||
)
|
||||
{
|
||||
MSR_IA32_FEATURE_CONTROL_REGISTER *MsrRegister;
|
||||
|
||||
ASSERT (ConfigData != NULL);
|
||||
MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
|
||||
if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {
|
||||
CPU_REGISTER_TABLE_WRITE_FIELD (
|
||||
ProcessorNumber,
|
||||
Msr,
|
||||
MSR_IA32_FEATURE_CONTROL,
|
||||
MSR_IA32_FEATURE_CONTROL_REGISTER,
|
||||
Bits.LmceOn,
|
||||
(State) ? 1 : 0
|
||||
);
|
||||
}
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue