HalpDmaControllerFlushChannel

__int64 __fastcall HalpDmaControllerFlushChannel(__int64 a1, unsigned int a2){
  ULONG_PTR BugCheckParameter4; 
  unsigned __int8 CurrentIrql; 
  char v5; 
  UINT64 *v6; 
  __int64 v7; 
  __int64 result; 
  BugCheckParameter4 = a2;
  CurrentIrql = KeGetCurrentIrql();
  v5 = 0;
  if( CurrentIrql == 15 )
  {
    v6 = (UINT64 *)(a1 + 168);
  }
  else
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(*(unsigned __int8 *)(a1 + 176));
    v6 = (UINT64 *)(a1 + 168);
    KxAcquireSpinLock((UINT64 *)(a1 + 168));
    v5 = 1;
  }
  v7 = *(_QWORD *)(a1 + 56) + 160 * BugCheckParameter4;
  if( !*(_BYTE *)(v7 + 6) && *(_QWORD *)(v7 + 8) )
    KeBugCheckEx(0xE6u, 0x23ui64, 0i64, *(unsigned int *)(a1 + 32), BugCheckParameter4);
  result = (*(__int64(__fastcall **)(_QWORD, _QWORD))(a1 + 120))(
             *(_QWORD *)(a1 + 64),
             (unsigned int)BugCheckParameter4);
  *(_QWORD *)(v7 + 8) = 0i64;
  *(_QWORD *)(v7 + 16) = 0i64;
  *(_BYTE *)(v7 + 6) = 0;
  if( v5 )
  {
    KxReleaseSpinLock(v6);
    result = CurrentIrql;
    __writecr8(CurrentIrql);
  }
  return result;
}

Referenced by:

HalFlushAdapterBuffersEx
IoFlushAdapterBuffersV3