HalpInterruptInitializeController
NTSTATUS __stdcall HalpInterruptInitializeController(_REGISTERED_INTERRUPT_CONTROLLER *Controller){
unsigned int Capabilities;
int v3;
unsigned int Flags;
unsigned int v5;
int v7;
_INTERRUPT_PROBLEM v8;
if( (Controller->Flags & 1) != 0 )
return 0;
Capabilities = Controller->Capabilities;
if( (Capabilities & 1) == 0 )
goto LABEL_3;
if( !HalpInterruptMaxClusterSize || HalpInterruptMaxClusterSize > Controller->MaxClusterSize )
HalpInterruptMaxClusterSize = Controller->MaxClusterSize;
if( !(_DWORD)HalpInterruptMaxCluster || (unsigned int)HalpInterruptMaxCluster > Controller->MaxClusters )
LODWORD(HalpInterruptMaxCluster) = Controller->MaxClusters;
v7 = Capabilities & 0x400;
if( *(&CmpDummyThreadEvent + 7080) )
{
if( !v7 )
{
if( !*(&CmpDummyThreadEvent + 7094) )
goto LABEL_14;
LABEL_20:
v3 = -1073741811;
Controller->ProblemSourceLine = 472;
v8 = InterruptProblemClusterNotFullyReplaced;
LABEL_22:
*(&CmpDummyThreadEvent + 1789) = v8;
Controller->Problem = v8;
Controller->ProblemSourceFile = "minkernel\\hals\\lib\\interrupts\\common\\intsup.c";
Controller->ProblemStatus = v3;
goto LABEL_4;
}
if( !*(&CmpDummyThreadEvent + 7094) )
goto LABEL_20;
}
LABEL_14:
v3 = HalpInterruptInitializeLocalUnit(Controller);
if( v3 < 0 )
goto LABEL_4;
LABEL_3:
v3 = Controller->FunctionTable.InitializeIoUnit(Controller->InternalData);
if( v3 < 0 )
{
v8 = InterruptProblemInitializeIoUnitFailed;
Controller->ProblemSourceLine = 497;
goto LABEL_22;
}
LABEL_4:
Flags = Controller->Flags;
if( v3 < 0 )
v5 = Flags & 0xFFFFFFFC | 2;
else
v5 = Flags & 0xFFFFFFFC | 1;
Controller->Flags = v5;
return v3;
}Referenced by:
HalpInitializeInterrupts
HalpInterruptPowerChange
HalpInterruptReinitialize
HalpInterruptResetThisProcessor
HalpInterruptSelectController