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