HalpIommuInitSystem
NTSTATUS __stdcall HalpIommuInitSystem(
_HAL_INIT_PHASE HalPhase,
UINT64 ProcessorNumber,
_LOADER_PARAMETER_BLOCK *LoaderBlock){
INT64 v3;
int inited;
INT64 v9;
INT64 v10;
INT64 v11;
INT64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
unsigned int RootIommuFaultPolicy;
if( HalPhase == HalInitPhaseBspProcEarly
|| HalIommuDispatch
&& (*(unsigned __int8(__fastcall **)(_HAL_INIT_PHASE, UINT64))HalIommuDispatch)(HalPhase, ProcessorNumber) )
{
inited = 0;
if( HalPhase == HalInitPhaseBspProcEarly )
{
qword_140C49B58 = &qword_140C49B50;
qword_140C49B50 = (INT64)&qword_140C49B50;
qword_140C49B38 = &qword_140C49B30;
qword_140C49B30 = &qword_140C49B30;
off_140C008B0[0] = (__int64(__fastcall *)())HalpIommuRegisterDispatchTable;
RootIommuFaultPolicy = HalpIommuGetRootIommuFaultPolicy((INT64)LoaderBlock);
if( RootIommuFaultPolicy > 1 )
RootIommuFaultPolicy = 0;
dword_140C49BE4 = RootIommuFaultPolicy;
qword_140C00A30 = (__int64)HalpIommuReportIommuFault;
return inited;
}
if( HalPhase == HalInitPhaseBspSystemEarlyAcpiReady )
{
inited = HalpIommuInitDiscard((INT64)LoaderBlock);
if( inited >= 0 )
return HalpIommuInitializeDmaGuardPolicy((__int64)LoaderBlock, v14, v15);
}
else
{
if( HalPhase != HalInitPhaseBspSystemEarlyInterruptsAlmostReady )
{
if( HalPhase == HalInitPhaseBspSystemLate )
{
inited = IommuInitializeLibrary();
if( inited < 0 )
return inited;
inited = HalpIommuInitializeDmar();
if( inited < 0 )
return inited;
off_140C009C0[0] = (__int64(__fastcall *)())HalpIommuBlockDevice;
off_140C009C8[0] = (__int64(__fastcall *)())HalpIommuUnblockDevice;
off_140C009D0[0] = (__int64(__fastcall *)())HalpGetIommuInterface;
off_140C00A38[0] = (__int64(__fastcall *)())HalpIommuDmaRemappingCapable;
inited = HalpIommuInitInterrupts(v10, v9, v11, v12);
if( inited < 0 )
return inited;
HalpIommuEnableInterrupts();
if( !byte_140C49B2C )
return inited;
return IommupHvSetRootFaultReportingReady();
}
else
{
if( HalPhase != HalInitPhasePnSystemLate )
{
if( HalPhase == HalInitPhaseLateSystemActionsTelemetryReady )
HalpIommuLogEarlyFault();
return inited;
}
return HalpIommuInitInterrupts(*(INT64 *)&HalPhase, ProcessorNumber, (INT64)LoaderBlock, v3);
}
}
dword_140C49BE0 = (unsigned __int8)HalpInterruptIsRemappingRequired() != 0;
inited = HalpIommuProcessReservations((INT64)LoaderBlock);
if( inited >= 0 )
return HalpIommuInitializeAll(0, (INT64)LoaderBlock, v13);
}
return inited;
}
if( HalPhase == HalInitPhaseBspSystemEarlyAcpiReady
&& !(*(unsigned __int8(__fastcall **)(_QWORD, UINT64))HalIommuDispatch)(*(_QWORD *)&HalPhase, ProcessorNumber) )
{
HalpInterruptSetX2ApicPolicy(0);
}
return 0;
}Referenced by:
No references.