HalAllocateCrashDumpRegisters
VOID *__stdcall HalAllocateCrashDumpRegisters(_ADAPTER_OBJECT *ChildAdapter, UINT64 *NumberOfMapRegisters){
unsigned int v2;
int v5;
__int64 v6;
VOID *result;
_HALP_DMA_TRANSLATION_ENTRY *MapRegistersAtHighLevel;
int v9;
__int64 v10;
v2 = 0;
if( ChildAdapter->NeedsMapRegisters || !ChildAdapter->CacheCoherent )
{
if( HalpDmaHibernateRegisterPhase == 1 )
{
v5 = (int)HalpDmaHibernatePhase1RegisterSetIndex;
v6 = 2i64 * (unsigned int)HalpDmaHibernatePhase1RegisterSetIndex;
*(_DWORD *)NumberOfMapRegisters = *((_DWORD *)&HalpDmaHibernateRegisterSets
+ 4 * (unsigned int)HalpDmaHibernatePhase1RegisterSetIndex
+ 2);
result = (VOID *)*((_QWORD *)&HalpDmaHibernateRegisterSets + v6);
ChildAdapter->MapRegisterBase = result;
ChildAdapter->NumberOfMapRegisters = *(_DWORD *)NumberOfMapRegisters;
LODWORD(HalpDmaHibernatePhase1RegisterSetIndex) = v5 + 1;
return result;
}
if( *(_DWORD *)NumberOfMapRegisters > ChildAdapter->MapRegistersPerChannel )
{
ChildAdapter->NumberOfMapRegisters = 0;
result = 0i64;
*(_DWORD *)NumberOfMapRegisters = 0;
return result;
}
MapRegistersAtHighLevel = HalpDmaAllocateMapRegistersAtHighLevel(
(_HALP_DMA_TRANSLATION_ENTRY *)ChildAdapter,
NumberOfMapRegisters);
ChildAdapter->MapRegisterBase = MapRegistersAtHighLevel;
if( MapRegistersAtHighLevel )
{
v9 = HalpDmaHibernateRegisterSetIndex;
if( (unsigned int)HalpDmaHibernateRegisterSetIndex < 4 )
{
v10 = 2i64 * (unsigned int)HalpDmaHibernateRegisterSetIndex;
*((_QWORD *)&HalpDmaHibernateRegisterSets + v10) = MapRegistersAtHighLevel;
*((_DWORD *)&HalpDmaHibernateRegisterSets + 2 * v10 + 2) = *(_DWORD *)NumberOfMapRegisters;
HalpDmaHibernateRegisterSetIndex = v9 + 1;
}
}
else
{
*(_DWORD *)NumberOfMapRegisters = 0;
}
v2 = *(_DWORD *)NumberOfMapRegisters;
}
else
{
ChildAdapter->MapRegisterBase = 0i64;
}
ChildAdapter->NumberOfMapRegisters = v2;
result = ChildAdapter->MapRegisterBase;
HalpDmaHibernateAdapter = ChildAdapter;
return result;
}Referenced by:
VfAllocateCrashDumpRegisters