HalpDmaProcessMapRegisterQueueV2
VOID __stdcall HalpDmaProcessMapRegisterQueueV2(_HALP_DMA_MASTER_ADAPTER_OBJECT *MasterAdapter, INT64 ScatterGather){
char v2;
_ADAPTER_OBJECT *v4;
_ADAPTER_OBJECT *v5;
_WAIT_CONTEXT_BLOCK *CurrentWcb;
_HALP_DMA_TRANSLATION_ENTRY *MapRegisters;
int v8;
UINT64 NumberOfMapRegisters;
v2 = ScatterGather;
while( 1 )
{
LOBYTE(ScatterGather) = v2;
v4 = (_ADAPTER_OBJECT *)HalpDmaDequeueAdapter(MasterAdapter, ScatterGather);
v5 = v4;
if( !v4 )
break;
CurrentWcb = v4->CurrentWcb;
MapRegisters = HalpDmaAllocateMapRegisters(v4, v4->NumberOfMapRegisters);
v5->MapRegisterBase = MapRegisters;
if( !MapRegisters )
{
HalpDmaQueueAdapter(v5);
HalpQueueMapBufferWorker(v5, v5->NumberOfMapRegisters);
return;
}
v8 = CurrentWcb->DeviceRoutine(
(_DEVICE_OBJECT *)CurrentWcb->DeviceObject,
(_IRP *)CurrentWcb->CurrentIrp,
MapRegisters,
CurrentWcb->DeviceContext);
if( v8 == 3 )
{
v5->NumberOfMapRegisters = 0;
v8 = 2;
}
if( v8 == 2 )
{
NumberOfMapRegisters = v5->NumberOfMapRegisters;
if( (_DWORD)NumberOfMapRegisters )
{
HalpDmaFreeMapRegisters(v5, (_HALP_DMA_TRANSLATION_ENTRY *)v5->MapRegisterBase, NumberOfMapRegisters);
v5->NumberOfMapRegisters = 0;
}
IoFreeAdapterChannel(&v5->AdapterObject.DmaHeader);
}
}
}Referenced by:
HalpGrowMapBufferWorker
IoFreeMapRegistersV2