HalpMcaSetProcessorConfig
CHAR __stdcall HalpMcaSetProcessorConfig(INT64 a1, INT64 a2){
unsigned int v4;
unsigned int v5;
INT64 *v6;
INT64 v7;
CHAR result;
unsigned __int64 v9;
__int64 v10;
unsigned __int64 v11;
__int64 v12;
if( HalpMcaEnabled )
{
if( (((__int64(__fastcall *)(INT64, __int64, _QWORD))qword_140C49C20)(a2, 377i64, 0i64) & 0x100) != 0 )
qword_140C49C10(a2, 379i64, *(_QWORD *)(a1 + 56));
if( HalpIsLmceSupported() )
{
++HalpLmceSupportedCount;
v12 = ((__int64(__fastcall *)(INT64, __int64, _QWORD))qword_140C49C20)(a2, 1232i64, 0i64);
qword_140C49C10(a2, 1232i64, v12 | 1);
}
else
{
++dword_140C50538;
}
if( !byte_140C50568[0] )
{
v11 = __readmsr(0x179u);
byte_140C50568[0] = v11;
}
v4 = byte_140C50568[0];
v5 = 0;
if( byte_140C50568[0] )
{
v6 = (INT64 *)(a1 + 84);
do
{
if( !byte_140C50520 || PshedIsSystemWheaEnabled() )
HalpWheaWriteMsrStatus(a2, v5);
if( v4 <= *(unsigned __int8 *)(a1 + 43) )
v7 = *v6;
else
v7 = *(_QWORD *)(a1 + 84);
HalpWheaWriteMsrControl(a2, v5, v7);
HalpMcaProcessorBankConfig(a2, v5++);
v6 = (INT64 *)((char *)v6 + 28);
}
while( v5 < v4 );
}
}
result = HalpMceEnabled;
v9 = __readcr4();
if( result )
v10 = v9 | 0x40;
else
v10 = v9 ^ 0x40;
__writecr4(v10);
return result;
}Referenced by:
HalpMcaResumeProcessorConfig
HalpMceInitProcessor