IoFlushAdapterBuffersV2
NTSTATUS __stdcall IoFlushAdapterBuffersV2(
_ADAPTER_OBJECT *ChildAdapter,
_MDL *Mdl,
VOID *MapRegisterBase,
VOID *CurrentVa,
UINT64 Length,
INT64 WriteToDevice){
void **v6;
INT64 DeferFlushing;
INT64 a6;
void *retaddr;
v6 = &retaddr;
if( (_DWORD)Length )
{
if( ChildAdapter && !ChildAdapter->MasterDevice )
LODWORD(v6) = (*(__int64(__fastcall **)(void *))(DmaDispatch + 48))(ChildAdapter->ChannelAdapter);
if( MapRegisterBase )
{
if( ChildAdapter && ChildAdapter->ScatterGather )
{
LOBYTE(a6) = WriteToDevice;
LODWORD(DeferFlushing) = Length;
HalpDmaFlushScatterTransferV2(
ChildAdapter,
Mdl,
(_HALP_DMA_TRANSLATION_ENTRY *)MapRegisterBase,
CurrentVa,
DeferFlushing,
a6);
}
else
{
LOBYTE(a6) = WriteToDevice;
LODWORD(DeferFlushing) = Length;
HalpDmaFlushContiguousTransferV2(
ChildAdapter,
Mdl,
(_HALP_DMA_TRANSLATION_ENTRY *)MapRegisterBase,
CurrentVa,
DeferFlushing,
a6);
}
}
else if( !(_BYTE)WriteToDevice && !ChildAdapter->CacheCoherent )
{
LOBYTE(a6) = 0;
LOBYTE(DeferFlushing) = 0;
HalpDmaFlushBuffer((_DOUBLE)ChildAdapter, Mdl, CurrentVa, (unsigned int)Length, DeferFlushing, a6);
}
}
LOBYTE(v6) = 1;
return(int)v6;
}Referenced by:
IoFlushAdapterBuffers