HalpDmaMapContiguousTransferV2
VOID __fastcall HalpDmaMapContiguousTransferV2(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
unsigned int v8;
unsigned int ContiguousPiece;
INT64 v10;
__int64 v11;
__int64 v12;
__int64 v13;
__int64 v14;
unsigned int *v15;
char v16;
_QWORD *v17;
v8 = *v15;
ContiguousPiece = HalpDmaNextContiguousPiece(a1, a2, 0i64, a4, v16, *v15);
v10 = a4 & 0xFFF;
v11 = (unsigned int)((unsigned __int64)(a4 - *(_QWORD *)(a2 + 32)) >> 12);
v12 = *(_QWORD *)(a2 + 8 * v11 + 48);
if( ContiguousPiece == v8
&& *(_QWORD *)(a1 + 136) >= v10 + (*(_QWORD *)(a2 + 8 * v11 + 48) << 12) + (unsigned __int64)ContiguousPiece - 1
&& (v16
|| *(_BYTE *)(a1 + 437)
|| (v11 = (unsigned int)HalpDmaGetAdapterCacheAlignment(a1) - 1, (v11 & v14) == 0) && (v11 & v13) == 0) )
{
*v17 = v10 + (v12 << 12);
HalpDmaFlushBuffer(v11, a2, a4, v8, v16, 0);
}
else
{
*v17 = v10 + *(_QWORD *)a3;
if( v16 )
{
HalpDmaSyncMapBuffers(a1, a2, a4, (_QWORD *)a3, v8, v16, 0, 0);
}
else if( !*(_BYTE *)(a1 + 437) )
{
HalpDmaSyncMapBuffers(a1, a2, a4, (_QWORD *)a3, v8, 0, 1, 0);
}
}
}Referenced by:
HalpMapTransferV2