HalpInterruptEnablePerformanceEvents

VOID __stdcall HalpInterruptEnablePerformanceEvents(UINT64 Context){
  INT64 v1; 
  unsigned __int8 v2; 
  bool v4; 
  int v5; 
  unsigned int Number; 
  char *v7; 
  UINT64 v8; 
  char v9; 
  unsigned __int64 v10; 
  _KINTERRUPT_MODE v11; 
  _INTERRUPT_LINE Destination[2]; 
  __int64 v13; 
  _INTERRUPT_LINE_STATE LineState; 
  _INTERRUPT_LINE Line; 
  UINT64 Flags; 

  v1 = Controller;
  Line = 0i64;
  v2 = 0;
  v4 = *(_DWORD *)(Controller + 216) == 2;
  memset(&LineState, 0, sizeof(LineState));
  if( v4 )
  {
    Line.UnitId = *(_DWORD *)(Controller + 232);
    Line.Line = -3;
    if( !byte_140C5064A )
    {
      if( !HalpInterruptFindLines((unsigned int *)&Line) )
        return;
      byte_140C5064A = 1;
    }
    *(_DWORD *)&LineState.EmulateActiveBoth = 0;
    LineState.Routing.UnitId = -1;
    memset(&LineState.ProcessorTarget.Target + 1, 0, 20);
    LineState.Polarity = InterruptActiveHigh;
    LineState.TriggerMode = Latched;
    LineState.Flags = 16;
    LineState.Routing.Line = 1;
    LineState.ProcessorTarget.Target = InterruptTargetSelfOnly;
    LineState.Vector = 254;
    LineState.Priority = HalpInterruptGetPriority(v1, 0xFEu);
    if( !Context )
      v2 = HalpAcquireHighLevelLock(&qword_140C49C40);
    HalpInterruptSetLineStateInternal((_REGISTERED_INTERRUPT_CONTROLLER *)v1, &Line, &LineState);
    if( !Context )
    {
      KxReleaseSpinLock(&qword_140C49C40);
      __writecr8(v2);
    }
  }
  v5 = *(_DWORD *)(v1 + 216);
  if( ((v5 - 3) & 0xFFFFFFFC) == 0 && v5 != 5 )
  {
    Number = KeGetPcr()->Prcb.Number;
    v7 = (char *)HalpInterruptProcessorState + 64 * (unsigned __int64)Number;
    v8 = *((unsigned int *)v7 + 10);
    if( (_DWORD)v8 )
    {
      if( HalpInterruptGsiToLine(v8, &Line) >= 0 )
      {
        Flags = 0x1FFFFFFFFi64;
        v9 = v7[14];
        *(_OWORD *)&Destination[0].UnitId = 0i64;
        Destination[0].UnitId = 6;
        Destination[1].UnitId = Number;
        v13 = 0i64;
        v10 = (unsigned __int8)HalpAcquireHighLevelLock(&qword_140C49C40);
        LOBYTE(v11) = 15;
        HalpInterruptSetLineState(
          &Line,
          (PVOID)0xFE,
          v11,
          (_KINTERRUPT_POLARITY)(v9 != 0),
          InterruptActiveHigh,
          Destination,
          (UINT64)&Flags);
        KxReleaseSpinLock(&qword_140C49C40);
        __writecr8(v10);
      }
    }
  }
}

Referenced by:

EmonPreOverflowHandler
HalpDpPostReplaceInitialization
HalpInterruptInitSystem
HalpPostSleepMP