HalpInterruptPerformDirectedEndOfInterrupt

VOID __stdcall HalpInterruptPerformDirectedEndOfInterrupt(INT64 a1){
  _DWORD *v1; 
  _DWORD *LinesForGsiRange; 
  _REGISTERED_INTERRUPT_CONTROLLER *v3; 

  if( a1 )
  {
    if( !*(_DWORD *)(a1 + 108) )
    {
      v1 = *(_DWORD **)(a1 + 160);
      if( v1 )
      {
        if( !v1[2] )
        {
          LinesForGsiRange = HalpInterruptFindLinesForGsiRange(v1[16], v1[16] + 1);
          if( LinesForGsiRange )
          {
            v3 = HalpInterruptLookupController((unsigned int)LinesForGsiRange[4]);
            if( (v3->Capabilities & 0x400) != 0 )
              v3->FunctionTable.DirectedEndOfInterrupt(v3->InternalData, v1[3], v1[12] & 0x3FFFFFFF);
          }
        }
      }
    }
  }
}

Referenced by:

HalPerformEndOfInterrupt