HalpInterruptSetRemappedDestinationHv

NTSTATUS __stdcall HalpInterruptSetRemappedDestinationHv(
        UINT64 *Gsiv,
        _INTERRUPT_VECTOR_DATA *VectorData,
        _GROUP_AFFINITY *TargetProcessors){
  int v4; 
  int ControllerAndLineState; 
  _INTERRUPT_LINE_STATE *v6; 
  _REGISTERED_INTERRUPT_CONTROLLER *v7; 
  _REGISTERED_INTERRUPT_CONTROLLER *v8; 
  NTSTATUS v9; 
  _INTERRUPT_LINE_STATE *LineStateOut[2]; 
  _REGISTERED_INTERRUPT_CONTROLLER *ControllerOut; 

  ControllerOut = 0i64;
  LineStateOut[1] = 0i64;
  LineStateOut[0] = 0i64;
  if( VectorData->Type )
  {
    if( VectorData->Type == InterruptTypeMessageRequest )
    {
      v4 = HalpHvRetargetDeviceMsiInterrupt((INT64)VectorData, (INT64)TargetProcessors);
      if( v4 < 0 )
        *(&CmpDummyThreadEvent + 1789) = 37;
      return v4;
    }
    return -1073741811;
  }
  if( !Gsiv )
    return -1073741811;
  ControllerAndLineState = HalpInterruptFindControllerAndLineState(*(unsigned int *)Gsiv, &ControllerOut, LineStateOut);
  if( ControllerAndLineState < 0 )
  {
    v7 = ControllerOut;
    *(&CmpDummyThreadEvent + 1789) = 18;
    if( ControllerOut )
    {
      ControllerOut->ProblemStatus = ControllerAndLineState;
      v7->ProblemSourceFile = "minkernel\\hals\\lib\\interrupts\\common\\connect.c";
      v7->Problem = InterruptProblemNoSuchLines;
      v7->ProblemSourceLine = 727;
    }
    return -1073741811;
  }
  v8 = ControllerOut;
  v9 = HalpHvRetargetIoApicDeviceInterrupt(
         ControllerOut->UnitId,
         v6,
         (_GROUP_AFFINITY *)LineStateOut[0],
         (UINT8 *)TargetProcessors);
  v4 = v9;
  if( v9 < 0 )
  {
    v8->ProblemStatus = v9;
    v8->ProblemSourceFile = "minkernel\\hals\\lib\\interrupts\\common\\connect.c";
    *(&CmpDummyThreadEvent + 1789) = 37;
    v8->Problem = InterruptProblemHvRetargetFailed;
    v8->ProblemSourceLine = 742;
  }
  return v4;
}

Referenced by:

HalpInterruptSetDestination