HalpChannelInitializeStaticConfiguration
VOID __stdcall HalpChannelInitializeStaticConfiguration(){
unsigned __int16 v0;
unsigned __int16 *v1;
unsigned __int64 v2;
unsigned __int64 v3;
unsigned int v4;
unsigned __int64 v5;
__int64 v6;
unsigned __int16 i;
__int64 v8;
unsigned __int64 v9;
unsigned __int64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
unsigned int v13;
unsigned int v14;
unsigned int v15;
unsigned int v16;
__int64 v17;
__int64 v18;
__int16 v19;
unsigned int v20;
__int64 v21;
__int64 v22;
UINT8 v23;
INT64 *v24;
INT64 *v25;
INT64 *v26;
UINT64 v27;
UINT64 v28;
UINT64 v29;
UINT64 v30;
UINT64 v31;
UINT64 v32;
UINT8 DeepPowerStateValue;
unsigned __int16 v34;
unsigned __int64 v35;
unsigned __int64 v36;
v35 = 0i64;
DeepPowerStateValue = 0;
v36 = 0i64;
if( *(&CmpDummyThreadEvent + 1022) )
{
if( *(_BYTE *)(HalpAcpiMpst + 8) == 1 )
{
v0 = *(_WORD *)(HalpAcpiMpst + 40);
v1 = (unsigned __int16 *)(HalpAcpiMpst + 44);
v2 = -1i64;
v3 = HalpAcpiMpst + *(unsigned int *)(HalpAcpiMpst + 4);
v34 = v0;
v4 = 0;
v5 = 0i64;
v6 = 0i64;
for( i = 0; i < v0; v1 = (unsigned __int16 *)((char *)v1 + *((unsigned int *)v1 + 1)) )
{
if( (*(_BYTE *)v1 & 1) != 0 )
{
if( (*(_BYTE *)v1 & 4) != 0 )
goto LABEL_45;
v8 = *((unsigned int *)v1 + 6);
if( (_DWORD)v8 )
{
if( (unsigned __int64)&v1[v8 + 16] > v3 )
goto LABEL_45;
qsort((UINT64)(v1 + 16), (unsigned int)v8, 2ui64, (INT64)HalpMpsValueAscendingSort, v24, v27, v30);
v35 = *((_QWORD *)v1 + 1);
v9 = v35 >> 12;
v10 = v35 >> 12;
if( v35 >> 12 >= v2 )
v10 = v2;
v2 = v10;
v36 = *((_QWORD *)v1 + 2);
v11 = v9 + (v36 >> 12) - 1;
v12 = v11;
if( v11 <= v5 )
v12 = v5;
v6 += v36 >> 12;
v13 = 0;
v5 = v12;
v14 = 0;
if( *(&CmpDummyThreadEvent + 866) )
{
if( v9 >= **(&CmpDummyThreadEvent + 866) && v9 >= *(_QWORD *)(*(&CmpDummyThreadEvent + 866) + 16i64) )
{
v15 = 1;
do
{
++v15;
++v14;
}
while( v9 >= *(_QWORD *)(*(&CmpDummyThreadEvent + 866) + 16i64 * v15) );
v0 = v34;
v13 = 0;
}
v14 = *(_DWORD *)(*(&CmpDummyThreadEvent + 866) + 16i64 * v14 + 8);
if( v11 >= **(&CmpDummyThreadEvent + 866) && v11 >= *(_QWORD *)(*(&CmpDummyThreadEvent + 866) + 16i64) )
{
v16 = 1;
do
{
++v16;
++v13;
}
while( v11 >= *(_QWORD *)(*(&CmpDummyThreadEvent + 866) + 16i64 * v16) );
v0 = v34;
}
if( *(_DWORD *)(*(&CmpDummyThreadEvent + 866) + 16i64 * v13 + 8) != v14 )
goto LABEL_45;
}
v17 = 2i64 * v4;
*(_QWORD *)(*(&CmpDummyThreadEvent + 510) + 8 * v17) = v1;
*(_WORD *)(*(&CmpDummyThreadEvent + 510) + 8 * v17 + 8) = v1[1];
++v4;
*(_WORD *)(*(&CmpDummyThreadEvent + 510) + 8 * v17 + 10) = v14;
}
}
++i;
}
if( (!*(&CmpDummyThreadEvent + 866)
|| v2 == HalpMinNumaPage && v5 == *(&CmpDummyThreadEvent + 867) && v6 == *(&CmpDummyThreadEvent + 871))
&& (unsigned __int64)(v1 + 1) <= v3 )
{
v18 = *v1;
if( (unsigned __int64)&v1[14 * v18 + 2] <= v3 )
{
qsort(*(&CmpDummyThreadEvent + 510), v4, 0x10ui64, (INT64)HalpChannelMpnIdSort, v24, v27, v30);
if( HalpValidateMpns() )
{
qsort(*(&CmpDummyThreadEvent + 510), v4, 0x10ui64, (INT64)HalpChannelAssignmentSort, v25, v28, v31);
v19 = 0;
v20 = 0;
if( !v4 )
{
LABEL_44:
qsort(*(&CmpDummyThreadEvent + 510), v4, 0x10ui64, (INT64)HalpChannelAscendingSort, v26, v29, v32);
*(_QWORD *)(*(&CmpDummyThreadEvent + 510) + 16i64 * v20) = -1i64;
**(&CmpDummyThreadEvent + 510) = 0i64;
return;
}
v21 = 0i64;
while( 1 )
{
v22 = *(_QWORD *)(v21 + *(&CmpDummyThreadEvent + 510));
v35 = *(_QWORD *)(v22 + 8);
*(_QWORD *)(v21 + *(&CmpDummyThreadEvent + 510)) = v35 >> 12;
if( v20
&& *(_WORD *)(v21 + *(&CmpDummyThreadEvent + 510) + 10) == *(_WORD *)(*(&CmpDummyThreadEvent + 510)
+ 16i64 * (v20 - 1)
+ 10) )
{
if( *(_WORD *)(v21 + *(&CmpDummyThreadEvent + 510) + 8) != *(_WORD *)(*(&CmpDummyThreadEvent + 510)
+ 16i64 * (v20 - 1)
+ 8) )
++v19;
}
else
{
v19 = 0;
}
*(_WORD *)(v21 + *(&CmpDummyThreadEvent + 510) + 12) = v19;
if( HalpSelectFeasibleLowPowerState(
(_MEMORY_POWER_NODE *)v22,
&DeepPowerStateValue,
(POWER_STATE_CHARACTERISTICS *)(unsigned __int16)v18) != 1 )
break;
v23 = DeepPowerStateValue;
if( DeepPowerStateValue )
{
*(_BYTE *)(v21 + *(&CmpDummyThreadEvent + 510) + 14) = 1;
*(_BYTE *)(v21 + *(&CmpDummyThreadEvent + 510) + 15) = v23;
}
++v20;
v21 += 16i64;
if( v20 >= v4 )
goto LABEL_44;
}
}
}
}
}
LABEL_45:
*(&CmpDummyThreadEvent + 1022) = 0;
*(&CmpDummyThreadEvent + 510) = 0i64;
}
}Referenced by:
HalpInitializeConfigurationFromMadt
HalpNumaInitializeStaticConfiguration