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