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