HalpDmaProcessMapRegisterQueueV2

void __fastcall HalpDmaProcessMapRegisterQueueV2(__int64 a1, char a2){
  __int64 *v4; 
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 MapRegisters; 
  int v10; 
  unsigned int v11; 
  while( 1 )
  {
    v4 = HalpDmaDequeueAdapter(a1, a2);
    v7 = (__int64)v4;
    if( !v4 )
      break;
    v8 = v4[43];
    MapRegisters = HalpDmaAllocateMapRegisters((__int64)v4, *((_DWORD *)v4 + 60), v5, v6);
    *(_QWORD *)(v7 + 232) = MapRegisters;
    if( !MapRegisters )
    {
      HalpDmaQueueAdapter(v7);
      HalpQueueMapBufferWorker(v7, *(_DWORD *)(v7 + 240));
      return;
    }
    v10 = (*(__int64(__fastcall **)(_QWORD, _QWORD, __int64, _QWORD))(v8 + 24))(
            *(_QWORD *)(v8 + 48),
            *(_QWORD *)(v8 + 56),
            MapRegisters,
            *(_QWORD *)(v8 + 32));
    if( v10 == 3 )
    {
      *(_DWORD *)(v7 + 240) = 0;
      v10 = 2;
    }
    if( v10 == 2 )
    {
      v11 = *(_DWORD *)(v7 + 240);
      if( v11 )
      {
        HalpDmaFreeMapRegisters(v7, *(_QWORD *)(v7 + 232), v11);
        *(_DWORD *)(v7 + 240) = 0;
      }
      IoFreeAdapterChannel((PDMA_ADAPTER)v7);
    }
  }
}

Referenced by:

HalpGrowMapBufferWorker
IoFreeMapRegistersV2