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