HalCalculateScatterGatherListSizeV3
NTSTATUS __stdcall HalCalculateScatterGatherListSizeV3(
_ADAPTER_OBJECT *ChildAdapter,
_MDL *Mdl,
VOID *CurrentVa,
UINT64 Length,
UINT64 *ScatterGatherListSize,
UINT64 *pNumberOfMapRegisters){
unsigned __int64 v7;
unsigned int v8;
NTSTATUS result;
UINT64 v10;
_DMA_TRANSFER_INFO *TransferInfo;
_DMA_TRANSFER_INFO a6;
a6.4 = 0i64;
if( !Mdl )
{
v7 = (((unsigned __int16)CurrentVa & 0xFFF) + (unsigned __int64)(unsigned int)Length + 4095) >> 12;
v8 = 24 * v7 + 208;
if( v8 < 0xA8 )
v8 = 168;
goto LABEL_4;
}
v10 = (char *)CurrentVa - Mdl->ByteOffset - (char *)Mdl->StartVa;
if( v10 >= Mdl->ByteCount )
return -1073741811;
a6.Version = 1;
LOBYTE(TransferInfo) = 0;
result = HalGetDmaTransferInfo(ChildAdapter, Mdl, v10, Length, TransferInfo, &a6);
if( result >= 0 )
{
v8 = a6.V1.ScatterGatherListSize;
LODWORD(v7) = a6.V1.MapRegisterCount;
LABEL_4:
if( (unsigned int)v7 > ChildAdapter->MapRegistersPerChannel )
{
return -1073741670;
}
else
{
*(_DWORD *)ScatterGatherListSize = v8;
if( pNumberOfMapRegisters )
*(_DWORD *)pNumberOfMapRegisters = v7;
return 0;
}
}
return result;
}Referenced by:
No references.