HalpPowerInitNvsRegionData

VOID __stdcall HalpPowerInitNvsRegionData(){
  __int64 v0; 
  int v1; 
  int v2; 
  unsigned __int64 v3; 
  unsigned int v4; 
  __int64 v5; 
  unsigned int v6; 
  __int64 v7; 
  unsigned int v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  int v12; 
  v0 = HalpAcpiMultiNode;
  v1 = 0;
  v2 = 0;
  if( HalpAcpiMultiNode )
  {
    v3 = *(_QWORD *)(HalpAcpiMultiNode + 8);
    if( v3 )
    {
      v4 = 0;
      v5 = 0i64;
      do
      {
        if( *(_DWORD *)(HalpAcpiMultiNode + 24 * v5 + 32) == 4 )
        {
          v1 += *(_DWORD *)(HalpAcpiMultiNode + 24 * v5 + 24);
          ++v2;
        }
        v5 = ++v4;
      }
      while( v4 < v3 );
      if( v1 )
      {
        HalpNvsPreservedDataSize = v1;
        v6 = 24 * v2;
        HalpNvsRegionCount = v2;
        HalpNvsRegionData = (__int64)HalpMmAllocateMemoryInternal((unsigned int)(24 * v2), MmCached);
        if( !HalpNvsRegionData )
          KeBugCheckEx(0xACu, v6, 1ui64, (ULONG_PTR)"minkernel\\hals\\lib\\power\\pmsleep.c", 0x73Aui64);
        v7 = 0i64;
        v8 = 0;
        if( *(_QWORD *)(v0 + 8) )
        {
          v9 = 0i64;
          do
          {
            if( *(_DWORD *)(v0 + 24 * v9 + 32) == 4 )
            {
              v10 = 3 * v7;
              v11 = HalpNvsRegionData;
              *(_QWORD *)(HalpNvsRegionData + 8 * v10) = *(_QWORD *)(v0 + 24 * v9 + 16);
              v12 = *(_DWORD *)(v0 + 24 * v9 + 24);
              *(_QWORD *)(v11 + 8 * v10 + 16) = 0i64;
              v7 = (unsigned int)(v7 + 1);
              *(_DWORD *)(v11 + 8 * v10 + 8) = v12;
            }
            v9 = ++v8;
          }
          while( (unsigned __int64)v8 < *(_QWORD *)(v0 + 8) );
        }
      }
    }
  }
}

Referenced by:

HalpPowerInitDiscard