HalpDmaControllerFlushChannel

VOID __stdcall HalpDmaControllerFlushChannel(_HALP_DMA_CONTROLLER *DmaController, UINT64 ChannelNumber){
  unsigned __int64 BugCheckParameter4; 
  unsigned __int8 CurrentIrql; 
  char v5; 
  unsigned __int64 *p_Lock; 
  _HALP_DMA_CHANNEL *v7; 

  BugCheckParameter4 = (unsigned int)ChannelNumber;
  CurrentIrql = KeGetCurrentIrql();
  v5 = 0;
  if( CurrentIrql == 15 )
  {
    p_Lock = &DmaController->Lock;
  }
  else
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(DmaController->Irql);
    p_Lock = &DmaController->Lock;
    KxAcquireSpinLock(&DmaController->Lock);
    v5 = 1;
  }
  v7 = &DmaController->Channels[BugCheckParameter4];
  if( !v7->Complete && v7->CurrentCompletionRoutine )
    KeBugCheckEx(0xE6u, (PVOID)0x23, 0i64, (PVOID)DmaController->ControllerId, (PVOID)BugCheckParameter4);
  DmaController->Operations.FlushChannel(DmaController->ExtensionData, BugCheckParameter4);
  v7->CurrentCompletionRoutine = 0i64;
  v7->CurrentCompletionContext = 0i64;
  v7->Complete = 0;
  if( v5 )
  {
    KxReleaseSpinLock(p_Lock);
    __writecr8(CurrentIrql);
  }
}

Referenced by:

HalFlushAdapterBuffersEx
IoFlushAdapterBuffersV3