HalpInterruptEnablePerformanceEvents

VOID __stdcall HalpInterruptEnablePerformanceEvents(UINT64 Context){
  INT64 v1; 
  unsigned __int8 v2; 
  bool v4; 
  int v5; 
  unsigned int v6; 
  ULONG_PTR v7; 
  unsigned int v8; 
  char v9; 
  unsigned __int64 v10; 
  unsigned int v11; 
  __int128 v12; 
  __int64 v13; 
  __int128 v14[3]; 
  __int64 v15; 
  __int64 v16; 
  int v17; 
  int v18; 
  v1 = HalpInterruptController;
  v16 = 0i64;
  v2 = 0;
  v15 = 0i64;
  v4 = *(_DWORD *)(HalpInterruptController + 216) == 2;
  memset(v14, 0, sizeof(v14));
  if( v4 )
  {
    LODWORD(v16) = *(_DWORD *)(HalpInterruptController + 232);
    HIDWORD(v16) = -3;
    if( !HalpInterruptPerfLinesFound )
    {
      if( !HalpInterruptFindLines((int *)&v16) )
        return;
      HalpInterruptPerfLinesFound = 1;
    }
    *(_QWORD *)&v14[1] = 0x1FFFFFFFFi64;
    memset((char *)&v14[1] + 12, 0, 20);
    *(_QWORD *)&v14[0] = 1i64;
    *((_QWORD *)&v14[0] + 1) = 0x1000000001i64;
    DWORD2(v14[1]) = 3;
    LODWORD(v15) = 254;
    HIDWORD(v15) = HalpInterruptGetPriority(v1, 0xFEu);
    if( !Context )
      v2 = HalpAcquireHighLevelLock(&HalpInterruptLock);
    HalpInterruptSetLineStateInternal(v1, (__int64)&v16, (__int64)v14);
    if( !Context )
    {
      KxReleaseSpinLock(&HalpInterruptLock);
      __writecr8(v2);
    }
  }
  v5 = *(_DWORD *)(v1 + 216);
  if( ((v5 - 3) & 0xFFFFFFFC) == 0 && v5 != 5 )
  {
    v6 = *((_DWORD *)KeGetPcr() + 105);
    v7 = HalpInterruptProcessorState + ((unsigned __int64)v6 << 6);
    v8 = *(_DWORD *)(v7 + 40);
    if( v8 )
    {
      if( (int)HalpInterruptGsiToLine(v8, &v16) >= 0 )
      {
        v17 = -1;
        v9 = *(_BYTE *)(v7 + 14);
        v12 = 0i64;
        LODWORD(v12) = 6;
        DWORD2(v12) = v6;
        v13 = 0i64;
        v18 = 1;
        v10 = (unsigned __int8)HalpAcquireHighLevelLock(&HalpInterruptLock);
        HalpInterruptSetLineState(&v16, 0xFEu, 15, v9 != 0, 1, (__int64)&v12, (__int64)&v17, v11);
        KxReleaseSpinLock(&HalpInterruptLock);
        __writecr8(v10);
      }
    }
  }
}

Referenced by:

EmonPreOverflowHandler
HalpDpPostReplaceInitialization
HalpPostSleepMP