HalpMapTransferV3
_LARGE_INTEGER __stdcall HalpMapTransferV3(
_ADAPTER_OBJECT *ChildAdapter,
_MDL *Mdl,
VOID *MapRegisterBase,
VOID *CurrentVa,
UINT8 DeferFlushing,
INT64 WriteToDevice,
UINT8 a7){
__int16 v7;
_QWORD *v10;
__int64 v11;
INT64 v12;
INT64 v13;
_LARGE_INTEGER LogicalAddressOut;
v7 = (__int16)CurrentVa;
LogicalAddressOut.QuadPart = 0i64;
if( !*(_DWORD *)DeferFlushing )
return 0i64;
if( !ChildAdapter->DomainPointer )
{
*(_DWORD *)DeferFlushing = 0;
return 0i64;
}
v10 = (_QWORD *)*((_QWORD *)MapRegisterBase + 7);
LOBYTE(v13) = a7;
LOBYTE(v12) = WriteToDevice;
if( ChildAdapter->ScatterGather )
HalpDmaMapScatterTransferV3(
ChildAdapter,
Mdl,
(_HALP_DMA_TRANSLATION_ENTRY *)MapRegisterBase,
CurrentVa,
(UINT64 *)DeferFlushing,
v12,
v13,
&LogicalAddressOut);
else
HalpDmaMapContiguousTransferV3(
ChildAdapter,
Mdl,
(_HALP_DMA_TRANSLATION_ENTRY *)MapRegisterBase,
CurrentVa,
(UINT64 *)DeferFlushing,
v12,
v13,
&LogicalAddressOut);
if( !ChildAdapter->MasterDevice && !(_BYTE)WriteToDevice )
{
if( ChildAdapter->IgnoreCount )
HalpDmaZeroMapBuffers(v11, v10, v7 & 0xFFF, *(_DWORD *)DeferFlushing);
}
return LogicalAddressOut;
}Referenced by:
IoMapTransferInternal