HalpFreeDmaChannels

VOID __stdcall HalpFreeDmaChannels(_ADAPTER_OBJECT *ChildAdapter){
  _HALP_DMA_CONTROLLER *DmaController; 
  __int64 v2; 
  unsigned __int8 CurrentIrql; 
  UINT64 *p_Lock; 
  _QWORD *v5; 
  _QWORD *v6; 
  __int64 v7; 
  _ADAPTER_OBJECT *v8; 

  DmaController = ChildAdapter->DmaController;
  v2 = (__int64)&DmaController->Channels[ChildAdapter->ChannelNumber];
  ChildAdapter->AllocatedChannelCount = 0;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(DmaController->Irql);
  p_Lock = &DmaController->Lock;
  KxAcquireSpinLock(p_Lock);
  v5 = (_QWORD *)(v2 + 144);
  v6 = *(_QWORD **)(v2 + 144);
  if( v6 == (_QWORD *)(v2 + 144) )
  {
    *(_WORD *)(v2 + 5) = 0;
    *(_QWORD *)(v2 + 24) = 0i64;
    KxReleaseSpinLock(p_Lock);
    __writecr8(CurrentIrql);
  }
  else
  {
    v7 = *v6;
    if( (_QWORD *)v6[1] != v5 || *(_QWORD **)(v7 + 8) != v6 )
      __fastfail(3u);
    *v5 = v7;
    v8 = (_ADAPTER_OBJECT *)(v6 - 25);
    *(_QWORD *)(v7 + 8) = v5;
    ++*((_DWORD *)v6 + 104);
    *((_DWORD *)v6 + 46) = 1;
    *(_QWORD *)(v2 + 24) = v6 - 25;
    KxReleaseSpinLock(p_Lock);
    __writecr8(CurrentIrql);
    HalpAllocateDmaResources(v8);
  }
}

Referenced by:

IoFreeAdapterChannelV3Internal