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