HalpMaskInterrupt

INT64 __fastcall HalpMaskInterrupt(UINT64 InputGsiv, UINT64 Flags){
  unsigned int v2; 
  unsigned int v3; 
  _DWORD *LinesForGsiRange; 
  _DWORD *v5; 
  ULONG_PTR *v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  int v9; 
  unsigned int v10; 
  unsigned int v11; 
  INT64 v13; 
  __int64 v14; 
  v14 = 0i64;
  v2 = Flags;
  v3 = InputGsiv;
  LinesForGsiRange = HalpInterruptFindLinesForGsiRange(InputGsiv, (int)InputGsiv + 1);
  v5 = LinesForGsiRange;
  if( !LinesForGsiRange )
  {
    if( ((unsigned __int8(__fastcall *)(_QWORD, _QWORD))off_140C00780[0])(0i64, v3) )
    {
      LOBYTE(v13) = 1;
      return(unsigned int)HalpHandleMaskUnmaskSecondaryInterrupt(v3, v2, v13);
    }
    HalpInterruptLastProblem = 19;
    return(unsigned int)-1073741811;
  }
  LODWORD(v14) = LinesForGsiRange[4];
  HIDWORD(v14) = v3 + LinesForGsiRange[5] - LinesForGsiRange[7];
  v6 = HalpInterruptLookupController(v14);
  if( !v6 )
    return(unsigned int)-1073741811;
  v7 = (unsigned __int8)HalpAcquireHighLevelLock(&HalpInterruptLock);
  v8 = *((_QWORD *)v5 + 5) + 56i64 * (v3 - v5[7]);
  v9 = *(_DWORD *)(v8 + 12);
  if( (v2 & 1) != 0 )
    v10 = v9 | 0x20;
  else
    v10 = v9 & 0xFFFFFFEF;
  *(_DWORD *)(v8 + 12) = v10;
  v11 = HalpInterruptSetLineStateInternal((__int64)v6, (__int64)&v14, v8);
  KxReleaseSpinLock(&HalpInterruptLock);
  __writecr8(v7);
  return v11;
}

Referenced by:

No references.