HalpDmaAllocateScatterPagesFromScatterPoolAtHighLevelV3
__int64 __fastcall HalpDmaAllocateScatterPagesFromScatterPoolAtHighLevelV3(
__int64 a1,
__int64 a2,
unsigned int a3,
unsigned int *a4){
unsigned int v4;
__int64 v6;
unsigned int v7;
__int64 v8;
__int64 v9;
__int64 v10;
unsigned int v11;
__int64 v12;
__int64 result;
v4 = *(_DWORD *)(a2 + 32);
v6 = *(_QWORD *)(a2 + 24);
v7 = 0;
v8 = 0i64;
v9 = 0i64;
v10 = 0i64;
v11 = 0;
v12 = 0i64;
if( !v4 )
goto LABEL_17;
do
{
if( v11 >= a3 )
break;
if( (*(_QWORD *)(v6 + 48) & 0xFFFFFFFFFFFFF000ui64) != 0 )
{
if( v8 )
*(_QWORD *)(v10 + 8) = v6;
else
v8 = v6;
++v11;
v10 = v6;
}
else
{
if( v9 )
*(_QWORD *)(v9 + 8) = v6;
else
*(_QWORD *)(a2 + 24) = v6;
v9 = v6;
}
++v7;
v12 = v6;
v6 = *(_QWORD *)(v6 + 8);
}
while( v7 < v4 );
if( v12 )
*(_QWORD *)(v12 + 8) = 0i64;
if( v9 )
*(_QWORD *)(v9 + 8) = v6;
else
LABEL_17:
*(_QWORD *)(a2 + 24) = v6;
*(_DWORD *)(a2 + 32) -= v11;
result = v8;
*a4 = v11;
return result;
}Referenced by:
HalpDmaAllocateScatterPagesFromScatterPoolAtHighLevel