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