HalpMcaSetFeatureFlags
VOID __stdcall HalpMcaSetFeatureFlags(){
CHAR CpuInfo;
UINT8 v1;
unsigned __int64 v2;
int v3[8];
UINT8 v4;
int a3;
INT32 a2;
int v7;
a3 = 0;
a2 = 0;
v7 = 0;
v4 = 0;
CpuInfo = HalpGetCpuInfo(0i64, 0i64, 0i64, &v4);
v1 = CpuInfo != 0 ? v4 : 0;
v4 = v1;
if( v1 == 2 )
{
HalpMceBroadcast = 1;
if( !HalpIsCmciImplemented() )
HalpMcaPollForCmc = 1;
v2 = __readmsr(0x179u);
if( (v2 & 0x1000000) != 0 )
HalpMcaRecoverySupported = 1;
if( (v2 & 0x4000000) != 0 )
HalpMcaExtendedLoggingSupported = 1;
}
else
{
if( v1 != 1 )
goto LABEL_19;
HalpCpuID(0x80000000i64, &a2, &a3, &a3, &a3);
if( (unsigned int)a2 >= 0x80000007 )
{
HalpCpuID(2147483655i64, &a3, &v7, &a3, &a3);
if( (v7 & 2) != 0 )
HalpMcaRecoverySupported = 1;
if( (v7 & 1) != 0 )
HalpMcaOverflowRecoverySupported = 1;
if( (v7 & 8) != 0 )
HalpMcaScalableRasSupported = 1;
}
if( !HalpMcaScalableRasSupported || !HalpIsCmciImplemented() )
LABEL_19:
HalpMcaPollForCmc = 1;
}
HalpMcaBanksValidOnBoot = 1;
HalpMcaMiscImplemented = 1;
_InterlockedOr(v3, 0);
}Referenced by:
HalpInitializeMce