IoMapTransferInternal
__int64 __fastcall IoMapTransferInternal(
__int64 a1,
__int64 a2,
__int64 a3,
__int64 a4,
unsigned int *a5,
char a6,
char a7){
unsigned int v10;
__int64 *v11;
unsigned int v12;
__int64 v13;
unsigned int v14;
__int64 v15;
_QWORD *v17;
__int64 v18;
__int64 v19;
if( a3 )
{
if( (unsigned int)HalpDmaGetAdapterVersion(a1) == 2 )
return HalpMapTransferV2(v19, a2, v17, v18, a5, a6);
else
return HalpMapTransferV3(v19, a2, (__int64)v17, v18, a5, a6, a7);
}
else
{
v10 = 4096 - (a4 & 0xFFF);
v11 = (__int64 *)(a2 + 8 * (((unsigned __int64)(a4 - *(_QWORD *)(a2 + 32)) >> 12) + 6));
v12 = *a5;
v13 = *v11;
v14 = *a5;
v15 = (a4 & 0xFFF) + (*v11 << 12);
if( v10 < *a5 )
{
do
{
if( v13 + 1 != *++v11 )
break;
v13 ^= *v11;
if( (v13 & 0xFFFFFFFFFFF00000ui64) != 0 )
break;
v10 += 4096;
v13 = *v11;
}
while( v10 < v12 );
if( v10 < v12 )
{
*a5 = v10;
v14 = v10;
}
}
if( !*(_BYTE *)(a1 + 437) )
HalpDmaFlushBuffer(v13, a2, a4, v14, a6, a7);
return v15;
}
}Referenced by:
HalMapTransferEx
IoMapTransfer