HalpHvTimerInitialize
INT64 __fastcall HalpHvTimerInitialize(INT64 a1){
__int64 v1;
__int64 v3;
INT64 result;
unsigned __int64 v5;
PVOID v6;
__int64 MaximumProcessorCount;
LARGE_INTEGER v8;
PVOID v9;
__int64 *v10;
_QWORD *v11;
__int64 v12;
__int64 v13;
LODWORD(v1) = *((_DWORD *)KeGetPcr() + 105);
v3 = 3 * v1;
if( *(_QWORD *)(a1 + 24 * v1 + 8) )
{
HalpHvTimerAcknowledgeInterrupt(a1);
return 0i64;
}
if( *(_BYTE *)HalpHvCpuManager )
{
v5 = __readmsr(0x40000083u) & 0xFFFFFFFFFFFFF000ui64;
*(_QWORD *)(a1 + 8 * v3 + 16) = v5;
v6 = HalMapIoSpace((LARGE_INTEGER)v5, 0x1000ui64, MmCached);
*(_QWORD *)(a1 + 8 * v3 + 8) = v6;
if( v6 )
return 0i64;
return 3221225626i64;
}
result = HalSocRequestApi(a1, 0i64, 4i64, 8ui64, &HalpHvPhysicalMemoryApi);
if( (int)result >= 0 )
{
MaximumProcessorCount = (unsigned int)HalQueryMaximumProcessorCount();
v8.QuadPart = ((__int64(__fastcall *)(__int64, __int64))HalpHvPhysicalMemoryApi)(-1i64, MaximumProcessorCount);
if( v8.QuadPart )
{
*(LARGE_INTEGER *)(a1 + 16) = v8;
v9 = HalMapIoSpace(v8, (unsigned __int64)(unsigned int)MaximumProcessorCount << 12, MmCached);
v10 = (__int64 *)(a1 + 8);
*(_QWORD *)(a1 + 8) = v9;
if( v9 )
{
if( (unsigned int)MaximumProcessorCount > 1 )
{
v11 = (_QWORD *)(a1 + 32);
v12 = (unsigned int)(MaximumProcessorCount - 1);
do
{
v11[1] = v10[1] + 4096;
v13 = *v10;
v10 += 3;
*v11 = v13 + 4096;
v11 += 3;
--v12;
}
while( v12 );
}
return 0i64;
}
}
return 3221225626i64;
}
return result;
}Referenced by:
No references.