]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c
IntelFrameworkModulePkg/Bds: Correct the total RAM calculation
[mirror_edk2.git] / 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