//\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
- // If Loadding Module At fixed Address feature is enabled, cache the SMRAM base here\r
+ // If Loading Module At fixed Address feature is enabled, cache the SMRAM base here\r
//\r
if (PcdGet64(PcdLoadModuleAtFixAddressEnable) != 0) {\r
//\r
SmramRanges[CurrentSmramRangesIndex].PhysicalSize = SmramRanges[CurrentSmramRangesIndex].PhysicalSize - SmmCodeSize;\r
}\r
//\r
- // Initialize free SMRAM regions\r
+ // Add 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
+ //\r
+ // Add the allocated SMRAM regions\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