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