UINT8 StrIndex;\r
CHAR16 *NewString;\r
CHAR16 *FirmwareVersionString;\r
- BOOLEAN Find[5];\r
EFI_STATUS Status;\r
EFI_STRING_ID TokenToUpdate;\r
EFI_SMBIOS_HANDLE SmbiosHandle;\r
SMBIOS_TABLE_TYPE4 *Type4Record;\r
SMBIOS_TABLE_TYPE19 *Type19Record;\r
EFI_SMBIOS_TABLE_HEADER *Record;\r
+ UINT64 InstalledMemory;\r
+ BOOLEAN FoundCpu;\r
\r
- ZeroMem (Find, sizeof (Find));\r
+ InstalledMemory = 0;\r
+ FoundCpu = 0;\r
\r
//\r
// Update Front Page strings\r
NULL,\r
(VOID **) &Smbios\r
);\r
- if (EFI_ERROR (Status)) {\r
- return ;\r
- }\r
-\r
- SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
- do {\r
+ if (!EFI_ERROR (Status)) {\r
+ SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
- if (EFI_ERROR(Status)) {\r
- break;\r
- }\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
+ GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type0Record + Type0Record->Hdr.Length), StrIndex, &NewString);\r
+ TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);\r
+ FirmwareVersionString = (CHAR16 *) PcdGetPtr (PcdFirmwareVersionString);\r
+ if (*FirmwareVersionString != 0x0000 ) {\r
+ FreePool (NewString);\r
+ NewString = (CHAR16 *) PcdGetPtr (PcdFirmwareVersionString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ } else {\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ FreePool (NewString);\r
+ }\r
+ }\r
\r
- if (Record->Type == EFI_SMBIOS_TYPE_BIOS_INFORMATION) {\r
- Type0Record = (SMBIOS_TABLE_TYPE0 *) Record;\r
- StrIndex = Type0Record->BiosVersion;\r
- GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type0Record + Type0Record->Hdr.Length), StrIndex, &NewString);\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);\r
- FirmwareVersionString = (CHAR16 *) PcdGetPtr (PcdFirmwareVersionString);\r
- if (*FirmwareVersionString != 0x0000 ) {\r
- FreePool (NewString);\r
- NewString = (CHAR16 *) PcdGetPtr (PcdFirmwareVersionString);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
- } else {\r
+ if (Record->Type == EFI_SMBIOS_TYPE_SYSTEM_INFORMATION) {\r
+ Type1Record = (SMBIOS_TABLE_TYPE1 *) Record;\r
+ StrIndex = Type1Record->ProductName;\r
+ GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type1Record + Type1Record->Hdr.Length), StrIndex, &NewString);\r
+ TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL);\r
HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
FreePool (NewString);\r
}\r
- Find[0] = TRUE;\r
- } \r
-\r
- if (Record->Type == EFI_SMBIOS_TYPE_SYSTEM_INFORMATION) {\r
- Type1Record = (SMBIOS_TABLE_TYPE1 *) Record;\r
- StrIndex = Type1Record->ProductName;\r
- GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type1Record + Type1Record->Hdr.Length), StrIndex, &NewString);\r
- 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) && !Find[2]) {\r
- Type4Record = (SMBIOS_TABLE_TYPE4 *) Record;\r
- //\r
- // The information in the record should be only valid when the CPU Socket is populated. \r
- //\r
- if ((Type4Record->Status & SMBIOS_TYPE4_CPU_SOCKET_POPULATED) == SMBIOS_TYPE4_CPU_SOCKET_POPULATED) {\r
- StrIndex = Type4Record->ProcessorVersion;\r
- GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Record->Hdr.Length), StrIndex, &NewString);\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
- FreePool (NewString);\r
- Find[2] = TRUE;\r
+ if ((Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) && !FoundCpu) {\r
+ Type4Record = (SMBIOS_TABLE_TYPE4 *) Record;\r
+ //\r
+ // The information in the record should be only valid when the CPU Socket is populated.\r
+ //\r
+ if ((Type4Record->Status & SMBIOS_TYPE4_CPU_SOCKET_POPULATED) == SMBIOS_TYPE4_CPU_SOCKET_POPULATED) {\r
+ StrIndex = Type4Record->ProcessorVersion;\r
+ GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Record->Hdr.Length), StrIndex, &NewString);\r
+ TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ ConvertProcessorToString(Type4Record->CurrentSpeed, 6, &NewString);\r
+ TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ FoundCpu = TRUE;\r
+ }\r
}\r
- } \r
\r
- if ((Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) && !Find[3]) {\r
- Type4Record = (SMBIOS_TABLE_TYPE4 *) Record;\r
- //\r
- // The information in the record should be only valid when the CPU Socket is populated. \r
- //\r
- if ((Type4Record->Status & SMBIOS_TYPE4_CPU_SOCKET_POPULATED) == SMBIOS_TYPE4_CPU_SOCKET_POPULATED) {\r
- ConvertProcessorToString(Type4Record->CurrentSpeed, 6, &NewString);\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
- FreePool (NewString);\r
- Find[3] = TRUE;\r
+ if ( Record->Type == EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS ) {\r
+ Type19Record = (SMBIOS_TABLE_TYPE19 *) Record;\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
- } \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
+ Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
}\r
- } while ( !(Find[0] && Find[1] && Find[2] && Find[3] && Find[4]));\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