HalpInterruptRequestInterrupt

VOID __fastcall HalpInterruptRequestInterrupt(UINT64 Gsiv){
  unsigned int v1; 
  _DWORD *LinesForGsiRange; 
  _DWORD *v3; 
  _REGISTERED_INTERRUPT_CONTROLLER *v4; 
  unsigned __int64 v5; 
  __int64 v6; 
  __int64 v7; 

  v7 = 0i64;
  v1 = Gsiv;
  LinesForGsiRange = HalpInterruptFindLinesForGsiRange(Gsiv, (int)Gsiv + 1);
  v3 = LinesForGsiRange;
  if( LinesForGsiRange )
  {
    LODWORD(v7) = LinesForGsiRange[4];
    HIDWORD(v7) = v1 + LinesForGsiRange[5] - LinesForGsiRange[7];
    v4 = HalpInterruptLookupController((unsigned int)v7);
    if( v4 )
    {
      v5 = (unsigned __int8)HalpAcquireHighLevelLock(&qword_140C49C40);
      v6 = *((_QWORD *)v3 + 5) + 56i64 * (v1 - v3[7]);
      if( (*(_DWORD *)(v6 + 12) & 0x10) != 0 )
        v4->FunctionTable.RequestInterrupt(
          v4->InternalData,
          (_INTERRUPT_LINE *)&v7,
          (_INTERRUPT_TARGET *)(v6 + 24),
          *(_DWORD *)(v6 + 48),
          (_INTERRUPT_LINE *)(v6 + 16));
      KxReleaseSpinLock(&qword_140C49C40);
      __writecr8(v5);
    }
    else
    {
      *(&CmpDummyThreadEvent + 1789) = 17;
    }
  }
  else if( ((unsigned __int8(__fastcall *)(_QWORD, _QWORD))off_140C00780[0])(0i64, v1) )
  {
    HalpInterruptRequestSecondaryInterrupt(v1);
  }
  else
  {
    *(&CmpDummyThreadEvent + 1789) = 18;
  }
}

Referenced by:

No references.