HalpApicInitializeLocalUnit

UINT64 __stdcall HalpApicInitializeLocalUnit(PVOID BaseVa, PVOID EndVa, UINT64 LevelsNeeded){
  int v3; 
  int v4; 
  int v5; 
  UINT64 result; 
  __int64 v8; 
  unsigned int v9; 
  __int64 v10; 
  unsigned int v11; 
  unsigned int v12; 
  __int64 v13; 
  unsigned int v14; 
  bool v15; 
  unsigned int *v16; 
  __int64 v17[3]; 
  INT64 v18; 
  unsigned int v19; 
  unsigned int *v20; 

  LODWORD(v18) = 0;
  v4 = v3;
  LODWORD(v17[0]) = 0;
  v5 = LevelsNeeded;
  if( !*(&stru_140CF2E80 + 6617) && !byte_140C50778 )
  {
    if( !*(&CmpDummyThreadEvent + 878) )
      return 3221225486i64;
    if( !qword_140C50770 )
    {
      qword_140C50770 = HalMapIoSpace(*(&CmpDummyThreadEvent + 878), 0x1000ui64, MmNonCached, v3);
      if( !qword_140C50770 )
        return 3221225626i64;
    }
  }
  LODWORD(result) = HalpApicSetupRegisterAccess();
  if( (result & 0x80000000) == 0i64 )
  {
    if( !*((_BYTE *)BaseVa + 27) && HalpApicIsCmciImplemented(&v18, v17) )
    {
      *((_DWORD *)BaseVa + 8) = v18;
      *((_DWORD *)BaseVa + 9) = v17[0];
    }
    v8 = *((unsigned int *)BaseVa + 8);
    v9 = v4 | 0x10000;
    if( (_DWORD)v8 )
      ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(v8, v9);
    v10 = *((unsigned int *)BaseVa + 9);
    if( (_DWORD)v10 )
      ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(v10, v9);
    HalpApicSetPriority(0i64, 0xFui64);
    v11 = v5 | 0x100;
    if( *(&CmpDummyThreadEvent + 3888) && (((__int64(__fastcall *)(__int64))qword_140C50760)(48i64) & 0x1000000) != 0 )
      v11 |= 0x1000u;
    ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(240i64, v11);
    ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(800i64, v4 | 0x30000u);
    ((void(__fastcall *)(__int64, __int64))qword_140C50768)(992i64, 11i64);
    ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(880i64, v19);
    ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(832i64, v9);
    v12 = ((__int64(__fastcall *)(__int64))qword_140C50760)(848i64);
    v13 = v12;
    LODWORD(v13) = v12 | 0x10000;
    ((void(__fastcall *)(__int64, __int64))qword_140C50768)(848i64, v13);
    ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(848i64, v9);
    ((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(864i64, v4 | 0x18400u);
    v14 = ((__int64(__fastcall *)(__int64))qword_140C50760)(32i64);
    v15 = *(&stru_140CF2E80 + 6617) == 0;
    v16 = v20;
    *v20 = v14;
    if( v15 )
      *v16 = HIBYTE(v14);
    if( *((_BYTE *)BaseVa + 27) )
      return 0i64;
    LODWORD(result) = HalpApicDescribeLocalLines(BaseVa);
    if( (result & 0x80000000) == 0i64 )
    {
      *((_BYTE *)BaseVa + 27) = 1;
      return 0i64;
    }
  }
  return result;
}

Referenced by:

No references.