HalpIrtFreeIndex

VOID __stdcall HalpIrtFreeIndex(UINT64 IrtIndex, UINT64 a2){
  int v2; 
  int v3; 
  unsigned int v4; 
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  v3 = v2;
  v4 = a2;
  v5 = IrtIndex;
  if( HalpIrtTotalEntries )
  {
    v6 = (unsigned int)IrtIndex % HalpIrtEntriesPerRange;
    v7 = (unsigned int)IrtIndex / HalpIrtEntriesPerRange;
    ExAcquireFastMutex(&HalpIrtLock);
    RtlClearBits(&HalpIrtRanges + v7, v6, v4);
    KeReleaseGuardedMutex(&HalpIrtLock);
    if( v3 == 3 && (HalpIrtAllocationFlags & 2) != 0 )
      HalpIommuFreeRemappingTableEntry(v5, v4);
    if( (HalpIrtAllocationFlags & 4) != 0 )
      HalpIrtReleaseDeviceAperture(v5 / HalpIrtEntriesPerDeviceAperture, v4);
  }
}

Referenced by:

HalpInterruptRemap
HalpInterruptUnmap