HalpInterruptApplyOverrides
void __fastcall HalpInterruptApplyOverrides(_DWORD *a1, _DWORD *a2, _DWORD *a3){
char v6;
char v7;
UINT64 v8;
__int64 *v9;
__int64 *v10;
unsigned int v11;
_DWORD *LinesForGsiRange;
v6 = 0;
v7 = HalpAcquireHighLevelLock(&HalpInterruptOverridesLock);
v9 = (__int64 *)HalpInterruptOverrides;
if( (__int64 *)HalpInterruptOverrides != &HalpInterruptOverrides )
{
v8 = (unsigned int)*a1;
while( 1 )
{
v10 = v9;
v9 = (__int64 *)*v9;
if( v10[2] == *(_QWORD *)a1 )
break;
if( v9 == &HalpInterruptOverrides )
goto LABEL_11;
}
*(_QWORD *)a1 = v10[3];
if( a2 )
*a2 = *((_DWORD *)v10 + 9);
if( a3 )
*a3 = *((_DWORD *)v10 + 8);
v6 = 1;
}
LABEL_11:
LOBYTE(v8) = v7;
HalpReleaseHighLevelLock(&HalpInterruptOverridesLock, v8);
if( !v6 && *(_DWORD *)(HalpInterruptController + 216) == 2 && (unsigned int)(*a1 - 45056) <= 1 )
{
v11 = a1[1] + 8;
if( *a1 != 45057 )
v11 = a1[1];
LinesForGsiRange = HalpInterruptFindLinesForGsiRange(v11, v11 + 1);
if( LinesForGsiRange )
{
a1[1] = v11 + LinesForGsiRange[5] - LinesForGsiRange[7];
*a1 = LinesForGsiRange[4];
}
}
}Referenced by:
ExtEnvSetVpptTarget
HalDisableInterrupt
HalpInterruptConnect
HalpInterruptMaskAcpi
HalpInterruptRemap
HalpInterruptRestoreClock
HalpInterruptSetDestinationInternal
HalpInterruptSetLineState
HalpTimerConfigureInterrupt
HalpTimerInitializeHypervisorTimer
HalpTimerUnmapInterrupt