HalpDmaFlushContiguousTransferV3

void __fastcall HalpDmaFlushContiguousTransferV3(
        __int64 a1,
        __int64 a2,
        __int64 a3,
        __int64 a4,
        unsigned int a5,
        char a6,
        char a7,
        _QWORD *a8){
  __int64 v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  if( (unsigned int)HalpDmaNextContiguousPiece(a1, a2, 0i64, a4, a6, a5) != a5 || *(_BYTE *)(a3 + 64) )
  {
    if( !a6 )
      HalpDmaSyncMapBuffers(a1, a2, a4, (_QWORD *)a3, a5, 0, 0, a7);
    if( a8 )
    {
      v13 = ((a4 & 0xFFF) + (unsigned __int64)a5 + 4095) >> 12;
      if( (_DWORD)v13 )
      {
        v14 = (unsigned int)v13;
        do
        {
          a3 = *(_QWORD *)(a3 + 8);
          --v14;
        }
        while( v14 );
      }
      *a8 = a3;
    }
  }
  else
  {
    if( !a6 && !*(_BYTE *)(a1 + 437) )
      HalpDmaFlushBuffer(v12, a2, a4, a5, 0, a7);
    if( a8 )
      *a8 = a3;
  }
}

Referenced by:

HalFlushAdapterBuffersEx
IoFlushAdapterBuffersV3