HalpDmaQueueAdapter

VOID __stdcall HalpDmaQueueAdapter(_ADAPTER_OBJECT *ChildAdapter){
  _HALP_DMA_MASTER_ADAPTER_OBJECT *MasterAdapter; 
  _LIST_ENTRY *WaitQueueEntry; 
  _LIST_ENTRY *p_ScatterAdapterQueue; 
  _LIST_ENTRY *Blink; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  MasterAdapter = ChildAdapter->MasterAdapter;
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&MasterAdapter->AdapterObject.SpinLock, &LockHandle);
  WaitQueueEntry = ChildAdapter->WaitQueueEntry;
  if( ChildAdapter->ScatterGather )
    p_ScatterAdapterQueue = &MasterAdapter->ScatterAdapterQueue;
  else
    p_ScatterAdapterQueue = &MasterAdapter->ContiguousAdapterQueue;
  Blink = p_ScatterAdapterQueue->Blink;
  if( Blink->Flink != p_ScatterAdapterQueue )
    __fastfail(3u);
  WaitQueueEntry->Flink = p_ScatterAdapterQueue;
  ChildAdapter->WaitQueueEntry[0].Blink = Blink;
  Blink->Flink = WaitQueueEntry;
  p_ScatterAdapterQueue->Blink = WaitQueueEntry;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
}

Referenced by:

HalAllocateAdapterChannelV2
HalpAllocateDmaResourcesInternal
HalpDmaProcessMapRegisterQueueV2
IoFreeAdapterChannelV2