]> git.proxmox.com Git - mirror_edk2.git/commitdiff
IntelFrameworkModulePkg/Bds: Correct the total RAM calculation
authorJeremy Linton <jeremy.linton@arm.com>
Fri, 1 Apr 2016 21:53:59 +0000 (16:53 -0500)
committerStar Zeng <star.zeng@intel.com>
Tue, 5 Apr 2016 03:18:04 +0000 (11:18 +0800)
Update the BDS frontpage to pull the RAM ranges from the
smbios extended size fields when applicable. The RAM calculation
also needs to take into account all the RAM ranges being provided
as many machines have multiple physical address ranges.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c

index 0a9238c2e7c8da87a81e6b9bff940f8bb51e72ed..6958979cdc47d50339f61d412b7c79b2e6cbe0fd 100644 (file)
@@ -720,7 +720,6 @@ UpdateFrontPageStrings (
 {\r
   UINT8                             StrIndex;\r
   CHAR16                            *NewString;\r
-  BOOLEAN                           Find[5];\r
   EFI_STATUS                        Status;\r
   EFI_STRING_ID                     TokenToUpdate;\r
   EFI_SMBIOS_HANDLE                 SmbiosHandle;\r
@@ -730,8 +729,9 @@ UpdateFrontPageStrings (
   SMBIOS_TABLE_TYPE4                *Type4Record;\r
   SMBIOS_TABLE_TYPE19               *Type19Record;\r
   EFI_SMBIOS_TABLE_HEADER           *Record;\r
-\r
-  ZeroMem (Find, sizeof (Find));\r
+  UINT64                            InstalledMemory;\r
+  \r
+  InstalledMemory = 0;\r
 \r
   //\r
   // Update Front Page strings\r
@@ -743,12 +743,8 @@ UpdateFrontPageStrings (
                   );\r
   if (!EFI_ERROR (Status)) {\r
     SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
-    do {\r
-      Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
-      if (EFI_ERROR(Status)) {\r
-        break;\r
-      }\r
-\r
+    Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
+    while (!EFI_ERROR(Status)) {\r
       if (Record->Type == EFI_SMBIOS_TYPE_BIOS_INFORMATION) {\r
         Type0Record = (SMBIOS_TABLE_TYPE0 *) Record;\r
         StrIndex = Type0Record->BiosVersion;\r
@@ -756,7 +752,6 @@ UpdateFrontPageStrings (
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);\r
         HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
-        Find[0] = TRUE;\r
       }\r
 \r
       if (Record->Type == EFI_SMBIOS_TYPE_SYSTEM_INFORMATION) {\r
@@ -766,7 +761,6 @@ UpdateFrontPageStrings (
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL);\r
         HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
-        Find[1] = TRUE;\r
       }\r
 \r
       if (Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) {\r
@@ -776,7 +770,6 @@ UpdateFrontPageStrings (
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL);\r
         HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
-        Find[2] = TRUE;\r
       }\r
 \r
       if (Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) {\r
@@ -785,22 +778,29 @@ UpdateFrontPageStrings (
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED);\r
         HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
-        Find[3] = TRUE;\r
       }\r
 \r
       if ( Record->Type == EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS ) {\r
         Type19Record = (SMBIOS_TABLE_TYPE19 *) Record;\r
-        ConvertMemorySizeToString (\r
-          (UINT32)(RShiftU64((Type19Record->EndingAddress - Type19Record->StartingAddress + 1), 10)),\r
-          &NewString\r
-          );\r
-        TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE);\r
-        HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
-        FreePool (NewString);\r
-        Find[4] = TRUE;\r
+        if (Type19Record->StartingAddress != 0xFFFFFFFF ) {\r
+          InstalledMemory += RShiftU64(Type19Record->EndingAddress -\r
+                                       Type19Record->StartingAddress + 1, 10);\r
+        } else {\r
+          InstalledMemory += RShiftU64(Type19Record->ExtendedEndingAddress -\r
+                                       Type19Record->ExtendedStartingAddress + 1, 20);\r
+        }\r
       }\r
-    } while ( !(Find[0] && Find[1] && Find[2] && Find[3] && Find[4]));\r
+\r
+      Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
+    }\r
+\r
+    // now update the total installed RAM size\r
+    ConvertMemorySizeToString ((UINT32)InstalledMemory, &NewString );\r
+    TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE);\r
+    HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+    FreePool (NewString);\r
   }\r
+\r
   return ;\r
 }\r
 \r