//\r
// Initialize Pool list\r
//\r
- for (Index = sizeof (mSmmPoolLists) / sizeof (*mSmmPoolLists); Index > 0;) {\r
+ for (Index = ARRAY_SIZE (mSmmPoolLists); Index > 0;) {\r
InitializeListHead (&mSmmPoolLists[--Index]);\r
}\r
CurrentSmramRangesIndex = 0;\r
}\r
//\r
// Initialize free SMRAM regions\r
+ // Need add Free memory at first, to let gSmmMemoryMap record data\r
//\r
for (Index = 0; Index < SmramRangeCount; Index++) {\r
+ if ((SmramRanges[Index].RegionState & (EFI_ALLOCATED | EFI_NEEDS_TESTING | EFI_NEEDS_ECC_INITIALIZATION)) != 0) {\r
+ continue;\r
+ }\r
+ SmmAddMemoryRegion (\r
+ SmramRanges[Index].CpuStart,\r
+ SmramRanges[Index].PhysicalSize,\r
+ EfiConventionalMemory,\r
+ SmramRanges[Index].RegionState\r
+ );\r
+ }\r
+\r
+ for (Index = 0; Index < SmramRangeCount; Index++) {\r
+ if ((SmramRanges[Index].RegionState & (EFI_ALLOCATED | EFI_NEEDS_TESTING | EFI_NEEDS_ECC_INITIALIZATION)) == 0) {\r
+ continue;\r
+ }\r
SmmAddMemoryRegion (\r
SmramRanges[Index].CpuStart,\r
SmramRanges[Index].PhysicalSize,\r