HalpHvDiscover
INT64 __fastcall HalpHvDiscover(INT64 a1){
INT64 v1;
int MaximumProcessorCount;
TIMER_INITIALIZATION_BLOCK result;
CHAR v5;
v5 = 0;
if( (int)HalSocRequestApi(a1, (INT64)HalpHvCounterUpdateCallback, 3i64, 8ui64, &HalpHvTimerApi) >= 0 )
{
memset((INT64)&result, 0i64);
result.Header = (SOC_INITIALIZATION_HEADER)0x9000000001i64;
result.FunctionTable.Initialize = (PTIMER_INITIALIZE)HalSystemVectorDispatchEntry;
result.FunctionTable.QueryCounter = (PTIMER_QUERY_COUNTER)HalpHvCounterQueryCounter;
result.CounterBitWidth = 64;
result.KnownType = TimerHypervisor;
result.Capabilities = 2;
result.CounterFrequency = 10000000i64;
HalpTimerRegister(&result, 0i64);
}
if( (int)HalSocRequestConfigurationData(3i64, v1, &v5) >= 0 && v5 )
{
memset((INT64)&result, 0i64);
result.InternalData = 0i64;
result.Header = (SOC_INITIALIZATION_HEADER)0x9000000001i64;
MaximumProcessorCount = HalQueryMaximumProcessorCount();
result.CounterBitWidth = 64;
result.CounterFrequency = 10000000i64;
result.KnownType = TimerHypervisor;
result.Capabilities = 34913;
result.FunctionTable.Initialize = (PTIMER_INITIALIZE)HalpHvTimerInitialize;
result.FunctionTable.QueryCounter = (PTIMER_QUERY_COUNTER)HalpHvCounterQueryCounter;
result.FunctionTable.SetInterruptVector = (PTIMER_SET_INTERRUPT_VECTOR)HalpHvTimerSetInterruptVector;
result.FunctionTable.ArmTimer = (PTIMER_ARM_TIMER)HalpHvTimerArm;
result.FunctionTable.AcknowledgeInterrupt = (PTIMER_ACKNOWLEDGE_INTERRUPT)HalpHvTimerAcknowledgeInterrupt;
result.InternalDataSize = 24 * MaximumProcessorCount;
result.FunctionTable.Stop = (PTIMER_STOP)HalpHvTimerStop;
HalpTimerRegister(&result, 0i64);
}
return 0i64;
}Referenced by:
HalpTimerRegisterBuiltinPluginsCommon