HalpAllocateAdapterChannel

INT64 __fastcall HalpAllocateAdapterChannel(INT64 a1, INT64 a2, UINT64 a3, INT64 a4, CHAR a5, INT64 a6){
  int v6; 
  int v10; 
  unsigned int v11; 
  int v12; 
  unsigned int v13; 
  unsigned int v14; 
  char v15; 
  unsigned __int8 CurrentIrql; 
  v6 = a3;
  if( (*(_DWORD *)(a2 + 20) & 2) != 0 )
  {
    _m_prefetchw((const void *)(a2 - 8));
    if( (_InterlockedOr((volatile signed __int32 *)(a2 - 8), 4u) & 2) != 0 )
      return 3221225760i64;
  }
  if( *(_BYTE *)(a1 + 432) && (unsigned int)a3 > *(_DWORD *)(a1 + 224) )
    return 3221225626i64;
  v10 = *(_DWORD *)(a2 + 20);
  if( (a5 & 2) != 0 )
    v11 = v10 | 4;
  else
    v11 = v10 & 0xFFFFFFFB;
  *(_DWORD *)(a2 + 20) = v11;
  *(_QWORD *)(a2 + 24) = a6;
  v12 = ((_DWORD)a4 << 12) | *(_DWORD *)(a2 + 20) & 0xFFF;
  *(_DWORD *)(a2 + 40) = a3;
  *(_DWORD *)(a2 + 16) = 1;
  if( (a5 & 1) != 0 )
    v13 = v12 | 1;
  else
    v13 = v12 & 0xFFFFFFFE;
  *(_DWORD *)(a2 + 20) = v13;
  v14 = (a5 & 1) != 0 ? 0xC000009A : 0;
  if( HalpDmaStartWcb(a1, (_QWORD *)a2, v13 & 1) )
  {
    *(_QWORD *)(a1 + 344) = a2;
    v15 = 0;
    CurrentIrql = 0;
    *(_DWORD *)(a1 + 240) = v6;
    *(_DWORD *)(a1 + 380) = 1;
    *(_DWORD *)(a1 + 616) = 0;
    if( KeGetCurrentIrql() < 2u )
    {
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      v15 = 1;
    }
    if( (unsigned __int8)HalpAllocateDmaResourcesInternal((PDMA_ADAPTER)a1) )
      v14 = 0;
    if( v15 )
      __writecr8(CurrentIrql);
  }
  return v14;
}

Referenced by:

HalAllocateAdapterChannel
HalAllocateAdapterChannelEx
HalRealAllocateAdapterChannelV3
HalpBuildScatterGatherList