IoFlushAdapterBuffersV3

char __fastcall IoFlushAdapterBuffersV3(__int64 a1, __int64 a2, __int64 a3, __int64 a4, unsigned int a5, char a6){
  bool v10; 
  DMA_OPERATIONS *v11; 
  if( a5 )
  {
    if( *(_DWORD *)(a1 + 512) == 2 )
    {
      v10 = *(_BYTE *)(a3 + 64) == 0;
      v11 = *(DMA_OPERATIONS **)(a3 + 24);
      *(_QWORD *)(a3 + 40) = v11;
      if( v10 )
      {
        HalpDmaFreeLa((PDMA_ADAPTER)a1, v11);
        *(_QWORD *)(a3 + 32) = 0i64;
      }
    }
    if( !*(_BYTE *)(a1 + 433) )
      HalpDmaControllerFlushChannel(*(_QWORD *)(a1 + 360), *(_DWORD *)(a1 + 372));
    if( *(_BYTE *)(a1 + 432) )
    {
      if( a3 )
        *(_QWORD *)(a3 + 56) = a3;
      if( *(_BYTE *)(a1 + 434) )
        HalpDmaFlushScatterTransferV3(a1, a2, a3, a4, a5, a6, 0, 0i64);
      else
        HalpDmaFlushContiguousTransferV3(a1, a2, a3, a4, a5, a6, 0, 0i64);
    }
  }
  return 1;
}

Referenced by:

IoFlushAdapterBuffers