HalpInterruptApplyOverrides

VOID __stdcall HalpInterruptApplyOverrides(
        _INTERRUPT_LINE *Line,
        _KINTERRUPT_POLARITY *Polarity,
        _KINTERRUPT_MODE *TriggerMode){
  char v6; 
  char v7; 
  UINT64 UnitId; 
  void **v9; 
  void **v10; 
  int v11; 
  unsigned int *LinesForGsiRange; 

  v6 = 0;
  v7 = HalpAcquireHighLevelLock((UINT64 *)&CmpDummyThreadEvent + 891);
  v9 = (void **)*(&CmpDummyThreadEvent + 888);
  if( (_UNKNOWN *)*(&CmpDummyThreadEvent + 888) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 7104) )
  {
    UnitId = Line->UnitId;
    while( 1 )
    {
      v10 = v9;
      v9 = (void **)*v9;
      if( v10[2] == (void *)*Line )
        break;
      if( v9 == (void **)((char *)&CmpDummyThreadEvent + 7104) )
        goto LABEL_11;
    }
    *Line = (_INTERRUPT_LINE)v10[3];
    if( Polarity )
      *Polarity = *((_KINTERRUPT_POLARITY *)v10 + 9);
    if( TriggerMode )
      *TriggerMode = *((_KINTERRUPT_MODE *)v10 + 8);
    v6 = 1;
  }
LABEL_11:
  LOBYTE(UnitId) = v7;
  HalpReleaseHighLevelLock((UINT64 *)&CmpDummyThreadEvent + 891, UnitId);
  if( !v6 && *(_DWORD *)(Controller + 216) == 2 && Line->UnitId - 45056 <= 1 )
  {
    v11 = Line->Line + 8;
    if( Line->UnitId != 45057 )
      v11 = Line->Line;
    LinesForGsiRange = HalpInterruptFindLinesForGsiRange(v11, v11 + 1);
    if( LinesForGsiRange )
    {
      Line->Line = v11 + LinesForGsiRange[5] - LinesForGsiRange[7];
      Line->UnitId = LinesForGsiRange[4];
    }
  }
}

Referenced by:

ExtEnvSetVpptTarget
HalDisableInterrupt
HalpInterruptConnect
HalpInterruptMaskAcpi
HalpInterruptRemap
HalpInterruptRestoreClock
HalpInterruptSetDestinationInternal
HalpInterruptSetLineState
HalpTimerConfigureInterrupt
HalpTimerInitializeHypervisorTimer
HalpTimerUnmapInterrupt