HalpDmaFreeLa

NTSTATUS __fastcall HalpDmaFreeLa(PDMA_ADAPTER DmaAdapter, _DMA_OPERATIONS *a2){
  _DMA_OPERATIONS *DmaOperations; 
  NTSTATUS result; 
  __int128 *i; 
  __int128 v7; 

  DmaOperations = DmaAdapter[31].DmaOperations;
  v7 = *(_OWORD *)&DmaAdapter[15].DmaOperations;
  HalpIommuDomainUnmapLogicalRange(DmaOperations->FlushAdapterBuffers, a2);
  if( a2 == DmaAdapter[34].DmaOperations )
    return HalpDmaReturnEmergencyLogicalAddressResources(DmaAdapter);
  result = 0;
  for( i = &v7; !*(_QWORD *)i || a2 != *(_DMA_OPERATIONS **)(*(_QWORD *)i + 24i64); i = (__int128 *)((char *)i + 8) )
  {
    if( (unsigned int)++result >= 2 )
      return HalpDomainLaDelete((INT64)DmaOperations, (UINT64)a2);
  }
  return result;
}

Referenced by:

HalFlushAdapterBuffersEx
IoFlushAdapterBuffersV3