HalCalculateScatterGatherListSizeV3

NTSTATUS __stdcall HalCalculateScatterGatherListSizeV3(
        _ADAPTER_OBJECT *ChildAdapter,
        _MDL *Mdl,
        VOID *CurrentVa,
        UINT64 Length,
        UINT64 *ScatterGatherListSize,
        UINT64 *pNumberOfMapRegisters){
  unsigned __int64 v7; 
  unsigned int v8; 
  NTSTATUS result; 
  UINT64 v10; 
  _DMA_TRANSFER_INFO *TransferInfo; 
  _DMA_TRANSFER_INFO a6; 

  a6.4 = 0i64;
  if( !Mdl )
  {
    v7 = (((unsigned __int16)CurrentVa & 0xFFF) + (unsigned __int64)(unsigned int)Length + 4095) >> 12;
    v8 = 24 * v7 + 208;
    if( v8 < 0xA8 )
      v8 = 168;
    goto LABEL_4;
  }
  v10 = (char *)CurrentVa - Mdl->ByteOffset - (char *)Mdl->StartVa;
  if( v10 >= Mdl->ByteCount )
    return -1073741811;
  a6.Version = 1;
  LOBYTE(TransferInfo) = 0;
  result = HalGetDmaTransferInfo(ChildAdapter, Mdl, v10, Length, TransferInfo, &a6);
  if( result >= 0 )
  {
    v8 = a6.V1.ScatterGatherListSize;
    LODWORD(v7) = a6.V1.MapRegisterCount;
LABEL_4:
    if( (unsigned int)v7 > ChildAdapter->MapRegistersPerChannel )
    {
      return -1073741670;
    }
    else
    {
      *(_DWORD *)ScatterGatherListSize = v8;
      if( pNumberOfMapRegisters )
        *(_DWORD *)pNumberOfMapRegisters = v7;
      return 0;
    }
  }
  return result;
}

Referenced by:

No references.