HalpDmaControllerReadDmaCounter

NTSTATUS __stdcall HalpDmaControllerReadDmaCounter(_HALP_DMA_CONTROLLER *DmaController, UINT64 ChannelNumber){
  __int64 v2; 
  unsigned __int8 CurrentIrql; 
  char v5; 
  unsigned __int64 *p_Lock; 
  NTSTATUS v7; 

  v2 = (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->Operations.ReadDmaCounter(DmaController->ExtensionData, v2);
  if( !v7 )
    DmaController->Channels[v2].Complete = 1;
  if( v5 )
  {
    KxReleaseSpinLock(p_Lock);
    __writecr8(CurrentIrql);
  }
  return v7;
}

Referenced by:

HalReadDmaCounterV3