HalpDmaTranslationEntryToIndex

NTSTATUS __stdcall HalpDmaTranslationEntryToIndex(
        _HALP_DMA_ADAPTER_OBJECT *Adapter,
        _HALP_DMA_TRANSLATION_ENTRY *Translation,
        _HALP_DMA_TRANSLATION_BUFFER **TranslationBufferOut){
  _HALP_DMA_TRANSLATION_BUFFER *ContiguousTranslations; 
  int v4; 
  unsigned __int64 Entries; 
  unsigned __int64 v6; 

  ContiguousTranslations = Adapter->ContiguousTranslations;
  v4 = 0;
  while( 1 )
  {
    if( !ContiguousTranslations )
      return -1;
    Entries = (unsigned __int64)ContiguousTranslations->Entries;
    if( Entries <= (unsigned __int64)Translation
      && (unsigned __int64)Translation < Entries + 72i64 * ContiguousTranslations->EntryCount )
    {
      break;
    }
    v4 += ContiguousTranslations->EntryCount;
    ContiguousTranslations = ContiguousTranslations->Next;
  }
  if( TranslationBufferOut )
    *TranslationBufferOut = ContiguousTranslations;
  v6 = (__int64)((unsigned __int128)((__int64)((__int64)Translation - Entries) * (__int128)0xE38E38E38E38E39i64) >> 64) >> 2;
  return v4 + v6 + (v6 >> 63);
}

Referenced by:

HalpDmaCommitContiguousMapBuffers
HalpDmaReturnToContiguousPool