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