HalpInterruptInitSystem

NTSTATUS __stdcall HalpInterruptInitSystem(
        INT64 HalPhase,
        INT64 ProcessorNumber,
        _LOADER_PARAMETER_BLOCK *LoaderBlock,
        VOID *a4,
        INT64 a5,
        _KINTERRUPT_MODE a6,
        UINT64 a7,
        UINT8 a8){
  NTSTATUS v8; 
  NTSTATUS result; 
  PKINTERRUPT_ROUTINE **v10; 
  UINT32 v11; 
  PKINTERRUPT_ROUTINE *v12; 

  v8 = 0;
  if( (int)HalPhase <= 16 )
  {
    if( (_DWORD)HalPhase == 16 )
    {
      HalpInterruptRegistrationAllowed = 0;
    }
    else if( (_DWORD)HalPhase )
    {
      switch( (_DWORD)HalPhase )
      {
        case 4:
          HalpInitializeInterruptsPn();
          break;
        case 7:
          HalpInterruptInitializeGlobals();
          break;
        case 9:
          HalpInterruptInitDiscard(LoaderBlock);
          break;
        case 0xB:
          _enable();
          break;
      }
    }
    else
    {
      off_140C00790 = (__int64(__fastcall *)(int, int, int, int, UINT16, _TRANSLATOR_INTERFACE *, UINT64 *))HaliAddInterruptRemapping;
      off_140C00798[0] = (__int64(__fastcall *)())HaliRemoveInterruptRemapping;
      off_140C007C8[0] = (__int64(__fastcall *)())HalpInterruptGetIdentifiers;
      off_140C00808[0] = (__int64(__fastcall *)())xHalQueryProcessorRestartEntryPoint;
      off_140C00868[0] = (__int64(__fastcall *)())HalpInterruptSetDestination;
      off_140C00938[0] = (__int64(__fastcall *)())HalpConnectThermalInterrupt;
      off_140C00978[0] = (__int64(__fastcall *)())HalpPreprocessNmi;
    }
    return v8;
  }
  if( (_DWORD)HalPhase == 19 )
    goto LABEL_17;
  if( (_DWORD)HalPhase != 17 )
  {
    if( (_DWORD)HalPhase == 21 )
    {
      if( *(&CmpDummyThreadEvent + 1789) && *(&CmpDummyThreadEvent + 1789) != 14 )
        KeBugCheckEx(
          0x5Cu,
          (PVOID)0x203,
          (PVOID)*(int *)(Controller + 216),
          (PVOID)Controller,
          (PVOID)*(&CmpDummyThreadEvent + 1789));
    }
    else if( (_DWORD)HalPhase == 29 )
    {
      return HalpInterruptInitPowerManagement();
    }
    return v8;
  }
  HalpPreAllocateKInterrupts();
  HalpInitializeInterruptsBspLate();
  result = HalSystemVectorDispatchEntry(v11, v10, v12);
  v8 = result;
  if( result >= 0 )
  {
LABEL_17:
    if( HalpInterruptModel() == 1 )
      HalpInterruptEnableNmi();
    if( (dword_140C4A10C & 1) != 0 )
      HalpInterruptEnablePerformanceEvents(0i64);
    return v8;
  }
  return result;
}

Referenced by:

No references.