HalpDmaFreeLa

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

Referenced by:

HalFlushAdapterBuffersEx
IoFlushAdapterBuffersV3