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