HalpApicRegisterIoUnit
NTSTATUS __stdcall HalpApicRegisterIoUnit(LARGE_INTEGER PhysicalAddress){
int v1;
int v2;
int v3;
int v4;
int v6;
NTSTATUS v7;
INT64 result[25];
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
__int128 v17;
__int128 v18;
__int128 v19;
INT64 v20;
INT64 v21;
INT64 v22;
INT64 v23;
v3 = v2;
LOBYTE(v22) = 0;
v4 = v1;
LOBYTE(v20) = 0;
LOBYTE(v23) = 0;
LOBYTE(v21) = 0;
memset((INT64)result, 0i64);
v6 = v12;
v17 = 0i64;
result[24] = (INT64)&v17;
v18 = 0i64;
result[0] = 0xE800000001i64;
v19 = 0i64;
v9 = 48;
v10 = 2;
v11 = v4;
if( HalpApicX2Mode )
{
result[15] = (INT64)HalpApicConvertId;
v14 = 16;
v15 = 0xFFFF;
if( !HalpApicGuestX2Mode )
v6 = v12 | 0x100;
if( HalpApicGetCpuInfo((INT64)&v22, (INT64)&v23, (INT64)&v20, (INT64)&v21) )
{
if( (_BYTE)v21 == 2 )
{
if( (_BYTE)v22 != 6 || (_BYTE)v20 != 47 )
goto LABEL_3;
v15 = 255;
}
if( (_BYTE)v21 == 1 )
{
HalpApicDirectedEndOfInterruptModeEnabled = 1;
v6 |= 0x400u;
result[22] = (INT64)HalpApicDirectedEndOfInterrupt;
}
}
}
else
{
v14 = 4;
result[7] = (INT64)HalpApicSetLogicalId;
v6 = v12 | 4;
v15 = 15;
}
LABEL_3:
v16 = 96;
result[1] = (INT64)HalpApicInitializeLocalUnit;
v12 = v6 | 0xFB;
result[18] = (INT64)HalpApicDeinitializeLocalUnit;
v13 = 15;
result[2] = (INT64)HalpApicInitializeIoUnit;
*(LARGE_INTEGER *)&v17 = PhysicalAddress;
result[3] = (INT64)HalpApicSetPriority;
result[4] = (INT64)HalpApicGetLocalUnitError;
result[5] = (INT64)HalpApicClearLocalUnitError;
result[9] = (INT64)HalpApicWriteEndOfInterrupt;
result[10] = HalpApicEndOfInterrupt;
result[11] = (INT64)HalpApicSetLineState;
result[12] = (INT64)HalpApicRequestInterrupt;
result[13] = (INT64)HalpApicStartProcessor;
result[14] = (INT64)HalpApicGenerateMessage;
result[16] = (INT64)HalpApicSaveLocalInterrupts;
result[17] = (INT64)HalpApicReplayLocalInterrupts;
result[20] = (INT64)HalpApicQueryAndGetSource;
DWORD2(v17) = v4;
HIDWORD(v18) = v3;
v7 = HalRegisterPermanentAddressUsage(PhysicalAddress, 0x400u);
if( v7 >= 0 )
return HalpInterruptRegisterController((__int64)result);
return v7;
}Referenced by:
HalpApicDiscover