HalpHvDiscover
NTSTATUS __stdcall HalpHvDiscover(INT64 a1){
INT64 v1;
NTSTATUS MaximumProcessorCount;
_TIMER_INITIALIZATION_BLOCK NewTimer;
CHAR v5;
v5 = 0;
if( HalSocRequestApi(a1, (INT64)HalpHvCounterUpdateCallback, 3i64, 8ui64, (char *)&stru_140CF2E80 + 4672) >= 0 )
{
memset(&NewTimer, 0i64, sizeof(NewTimer));
NewTimer.Header.TableVersion = 1;
NewTimer.FunctionTable.Initialize = (PLONG)HalSystemVectorDispatchEntry;
NewTimer.Header.TableSize = 144;
NewTimer.FunctionTable.QueryCounter = (PULONG64)HalpHvCounterQueryCounter;
NewTimer.CounterBitWidth = 64;
NewTimer.KnownType = TimerHypervisor;
NewTimer.Capabilities = 2;
NewTimer.CounterFrequency = 10000000i64;
HalpTimerRegister(&NewTimer, 0i64);
}
if( HalSocRequestConfigurationData(3i64, v1, &v5) >= 0 && v5 )
{
memset(&NewTimer, 0i64, sizeof(NewTimer));
NewTimer.InternalData = 0i64;
NewTimer.Header.TableVersion = 1;
NewTimer.Header.TableSize = 144;
MaximumProcessorCount = HalQueryMaximumProcessorCount();
NewTimer.CounterBitWidth = 64;
NewTimer.CounterFrequency = 10000000i64;
NewTimer.KnownType = TimerHypervisor;
NewTimer.Capabilities = 34913;
NewTimer.FunctionTable.Initialize = (PLONG)HalpHvTimerInitialize;
NewTimer.FunctionTable.QueryCounter = (PULONG64)HalpHvCounterQueryCounter;
NewTimer.FunctionTable.SetInterruptVector = HalpHvTimerSetInterruptVector;
NewTimer.FunctionTable.ArmTimer = (PLONG)HalpHvTimerArm;
NewTimer.FunctionTable.AcknowledgeInterrupt = HalpHvTimerAcknowledgeInterrupt;
NewTimer.InternalDataSize = 24 * MaximumProcessorCount;
NewTimer.FunctionTable.Stop = HalpHvTimerStop;
HalpTimerRegister(&NewTimer, 0i64);
}
return 0;
}Referenced by:
HalpTimerRegisterBuiltinPluginsCommon