HalpDmaAllocateTranslationBuffer

_HALP_DMA_TRANSLATION_BUFFER *__stdcall HalpDmaAllocateTranslationBuffer(
        _HALP_ALLOC_CONTEXT *PageCount,
        _HALP_DMA_TRANSLATION_BUFFER_POSITION *BufferEnd){
  _HALP_ALLOC_CONTEXT *v3; 
  UINT8 *v4; 
  UINT8 *v5; 
  _HALP_ALLOC_CONTEXT *v6; 
  UINT8 *v7; 
  _HALP_DMA_TRANSLATION_BUFFER *result; 

  v4 = HalpMmAllocCtxAlloc(PageCount, 0x18ui64);
  if( v4 )
  {
    v5 = HalpMmAllocCtxAlloc(v3, 0x4000ui64);
    v7 = v5;
    if( v5 )
    {
      *(_QWORD *)v4 = 0i64;
      *((_DWORD *)v4 + 3) = 0;
      memset(v5, 0i64, 0x4000u);
      *((_DWORD *)v4 + 2) = 227;
      result = (_HALP_DMA_TRANSLATION_BUFFER *)v4;
      *((_QWORD *)v4 + 2) = v7;
      BufferEnd->Offset = 0;
      BufferEnd->Buffer = (_HALP_DMA_TRANSLATION_BUFFER *)v4;
      return result;
    }
    HalpMmAllocCtxFree(v6, v4);
  }
  return 0i64;
}

Referenced by:

HalpDmaInitializeMasterAdapter