HalpInterruptApplyOverrides

void __fastcall HalpInterruptApplyOverrides(_DWORD *a1, _DWORD *a2, _DWORD *a3){
  char v6; 
  char v7; 
  UINT64 v8; 
  __int64 *v9; 
  __int64 *v10; 
  unsigned int v11; 
  _DWORD *LinesForGsiRange; 
  v6 = 0;
  v7 = HalpAcquireHighLevelLock(&HalpInterruptOverridesLock);
  v9 = (__int64 *)HalpInterruptOverrides;
  if( (__int64 *)HalpInterruptOverrides != &HalpInterruptOverrides )
  {
    v8 = (unsigned int)*a1;
    while( 1 )
    {
      v10 = v9;
      v9 = (__int64 *)*v9;
      if( v10[2] == *(_QWORD *)a1 )
        break;
      if( v9 == &HalpInterruptOverrides )
        goto LABEL_11;
    }
    *(_QWORD *)a1 = v10[3];
    if( a2 )
      *a2 = *((_DWORD *)v10 + 9);
    if( a3 )
      *a3 = *((_DWORD *)v10 + 8);
    v6 = 1;
  }
LABEL_11:
  LOBYTE(v8) = v7;
  HalpReleaseHighLevelLock(&HalpInterruptOverridesLock, v8);
  if( !v6 && *(_DWORD *)(HalpInterruptController + 216) == 2 && (unsigned int)(*a1 - 45056) <= 1 )
  {
    v11 = a1[1] + 8;
    if( *a1 != 45057 )
      v11 = a1[1];
    LinesForGsiRange = HalpInterruptFindLinesForGsiRange(v11, v11 + 1);
    if( LinesForGsiRange )
    {
      a1[1] = v11 + LinesForGsiRange[5] - LinesForGsiRange[7];
      *a1 = LinesForGsiRange[4];
    }
  }
}

Referenced by:

ExtEnvSetVpptTarget
HalDisableInterrupt
HalpInterruptConnect
HalpInterruptMaskAcpi
HalpInterruptRemap
HalpInterruptRestoreClock
HalpInterruptSetDestinationInternal
HalpInterruptSetLineState
HalpTimerConfigureInterrupt
HalpTimerInitializeHypervisorTimer
HalpTimerUnmapInterrupt