]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. PI SMBIOS Checkin. Major change include:
authordavidhuang <davidhuang@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 20 Nov 2009 04:01:15 +0000 (04:01 +0000)
committerdavidhuang <davidhuang@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 20 Nov 2009 04:01:15 +0000 (04:01 +0000)
1) Produce PI SMBIOS protocol in MdeModulePkg
2) Update all consumers (in CorePkgs and native platform pkgs) to consume SMBIOS protocol instead of DataHub
3) Pass ECC tool; Verify Nt32, Duet, Unix platform

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9455 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Universal/BdsDxe/Bds.h
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/BmLib.c
IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c

index 70df151a7db738c5ddede58fe7a8e81b0e781018..53f384a14953b53db1895f2e700ff154b598a073 100644 (file)
@@ -20,13 +20,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Guid/MdeModuleHii.h>\r
 #include <Guid/FileSystemVolumeLabelInfo.h>\r
 #include <Protocol/DevicePath.h>\r
-#include <Guid/DataHubRecords.h>\r
+#include <IndustryStandard/SmBios.h>\r
 #include <Protocol/LoadFile.h>\r
 #include <Protocol/CpuIo.h>\r
 #include <Guid/FileInfo.h>\r
 #include <Protocol/HiiConfigRouting.h>\r
 #include <Protocol/Bds.h>\r
-#include <Protocol/DataHub.h>\r
+#include <Protocol/Smbios.h>\r
 #include <Protocol/UgaDraw.h>\r
 #include <Protocol/BlockIo.h>\r
 #include <Guid/GlobalVariable.h>\r
index 67dd4cab67ca173a2665a6392c47d63745f0e6e6..1ab62282e87df0974fad8b96fc981a7d3ed4932b 100644 (file)
                                                 ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error out device)\r
   gEfiFileSystemVolumeLabelInfoIdGuid           ## CONSUMES ## GUID (Indicate the information type is volume)\r
   gEfiFileInfoGuid                              ## CONSUMES ## GUID (Indicate the information type is file)\r
-  gEfiMiscSubClassGuid                          ## CONSUMES ## GUID (Indicate the datahub for holding misc sub class record)\r
-  gEfiMemorySubClassGuid                        ## CONSUMES ## GUID (Indicate the datahub for holding memory record)\r
-  gEfiProcessorSubClassGuid                     ## CONSUMES ## GUID (Indicate the datahub for holding processor record)\r
   gEfiHiiPlatformSetupFormsetGuid               ## CONSUMES ## GUID (Indicate the formset class guid to be displayed)\r
   gEfiIfrTianoGuid                              ## CONSUMES ## GUID (Extended IFR Guid Opcode)\r
 \r
   gEfiSimpleFileSystemProtocolGuid              # PROTOCOL ALWAYS_CONSUMES\r
   gEfiLoadFileProtocolGuid                      # PROTOCOL ALWAYS_CONSUMES\r
   gEfiBdsArchProtocolGuid                       # PROTOCOL ALWAYS_PRODUCES\r
-  gEfiDataHubProtocolGuid                       # PROTOCOL ALWAYS_CONSUMES\r
+  gEfiSmbiosProtocolGuid                        # PROTOCOL ALWAYS_CONSUMED\r
   gEfiGenericMemTestProtocolGuid                # PROTOCOL ALWAYS_CONSUMES\r
   gEfiLegacyBiosProtocolGuid                    # PROTOCOL ALWAYS_CONSUMES\r
   gEfiUgaDrawProtocolGuid |PcdUgaConsumeSupport # PROTOCOL SOMETIMES_CONSUMES\r
index f575592dbc713706d5413a77c4c91e55dac07168..7a4183d6b3de54f67bc2db0a3cb2ddfa66974bc8 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Utility routines used by boot maintenance modules.\r
 \r
-Copyright (c) 2004 - 2008, Intel Corporation. <BR>\r
+Copyright (c) 2004 - 2009, Intel Corporation. <BR>\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -431,64 +431,5 @@ EfiLibStrFromDatahub (
   IN EFI_DEVICE_PATH_PROTOCOL                 *DevPath\r
   )\r
 {\r
-  EFI_STATUS                                  Status;\r
-  UINT16                                      *Desc;\r
-  EFI_DATA_HUB_PROTOCOL                       *Datahub;\r
-  UINT64                                      Count;\r
-  EFI_DATA_RECORD_HEADER                      *Record;\r
-  EFI_SUBCLASS_TYPE1_HEADER                   *DataHdr;\r
-  EFI_GUID                                    MiscGuid;\r
-  EFI_MISC_ONBOARD_DEVICE_DATA                *Ob;\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *Port;\r
-  EFI_TIME                                    CurTime;\r
-\r
-  CopyGuid (&MiscGuid, &gEfiMiscSubClassGuid);\r
-\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiDataHubProtocolGuid,\r
-                  NULL,\r
-                  (VOID **) &Datahub\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return NULL;\r
-  }\r
-\r
-  Status = gRT->GetTime (&CurTime, NULL);\r
-  if (EFI_ERROR (Status)) {\r
-    return NULL;\r
-  }\r
-\r
-  Count = 0;\r
-  do {\r
-    Status = Datahub->GetNextRecord (Datahub, &Count, NULL, &Record);\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-\r
-    if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA && CompareGuid (&Record->DataRecordGuid, &MiscGuid)) {\r
-      //\r
-      // This record is what we need\r
-      //\r
-      DataHdr = (EFI_SUBCLASS_TYPE1_HEADER *) (Record + 1);\r
-      if (EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER == DataHdr->RecordType) {\r
-        Ob = (EFI_MISC_ONBOARD_DEVICE_DATA *) (DataHdr + 1);\r
-        if (BdsLibMatchDevicePaths ((EFI_DEVICE_PATH_PROTOCOL *) &Ob->OnBoardDevicePath, DevPath)) {\r
-          GetProducerString (&Record->ProducerName, Ob->OnBoardDeviceDescription, &Desc);\r
-          return Desc;\r
-        }\r
-      }\r
-\r
-      if (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER == DataHdr->RecordType) {\r
-        Port = (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) (DataHdr + 1);\r
-        if (BdsLibMatchDevicePaths ((EFI_DEVICE_PATH_PROTOCOL *) &Port->PortPath, DevPath)) {\r
-          GetProducerString (&Record->ProducerName, Port->PortExternalConnectorDesignator, &Desc);\r
-          return Desc;\r
-        }\r
-      }\r
-    }\r
-\r
-  } while (TimeCompare (&Record->LogTime, &CurTime) && Count != 0);\r
-\r
   return NULL;\r
 }\r
index 37be6ff976849c089e25f6cdd1835b97e5778685..7513ab6d6bb19170d4a05d153493ec82e8417f6e 100644 (file)
@@ -577,22 +577,24 @@ GetProducerString (
   Convert Processor Frequency Data to a string.\r
 \r
   @param ProcessorFrequency The frequency data to process\r
+  @param Base10Exponent     The exponent based on 10\r
   @param String             The string that is created\r
 \r
 **/\r
 VOID\r
 ConvertProcessorToString (\r
-  IN  EFI_PROCESSOR_CORE_FREQUENCY_DATA *ProcessorFrequency,\r
-  OUT CHAR16                            **String\r
+  IN  UINT16                               ProcessorFrequency,\r
+  IN  UINT16                               Base10Exponent,\r
+  OUT CHAR16                               **String\r
   )\r
 {\r
   CHAR16  *StringBuffer;\r
   UINTN   Index;\r
   UINT32  FreqMhz;\r
 \r
-  if (ProcessorFrequency->Exponent >= 6) {\r
-    FreqMhz = ProcessorFrequency->Value;\r
-    for (Index = 0; Index < (UINTN) (ProcessorFrequency->Exponent - 6); Index++) {\r
+  if (Base10Exponent >= 6) {\r
+    FreqMhz = ProcessorFrequency;\r
+    for (Index = 0; Index < (UINTN) (Base10Exponent - 6); Index++) {\r
       FreqMhz *= 10;\r
     }\r
   } else {\r
@@ -605,12 +607,11 @@ ConvertProcessorToString (
   StrCat (StringBuffer, L".");\r
   UnicodeValueToString (StringBuffer + Index + 1, PREFIX_ZERO, (FreqMhz % 1000) / 10, 2);\r
   StrCat (StringBuffer, L" GHz");\r
-\r
   *String = (CHAR16 *) StringBuffer;\r
-\r
   return ;\r
 }\r
 \r
+\r
 /**\r
   Convert Memory Size to a string.\r
 \r
@@ -636,6 +637,74 @@ ConvertMemorySizeToString (
   return ;\r
 }\r
 \r
+/**\r
+\r
+  Acquire the string associated with the Index from smbios structure and return it.\r
+  The caller is responsible for free the string buffer.\r
+\r
+  @param    OptionalStrStart  The start position to search the string\r
+  @param    Index             The index of the string to extract\r
+  @param    String            The string that is extracted\r
+\r
+  @retval   EFI_SUCCESS       The function returns EFI_SUCCESS always.\r
+\r
+**/\r
+EFI_STATUS\r
+GetOptionalStringByIndex (\r
+  IN      CHAR8                   *OptionalStrStart,\r
+  IN      UINT8                   Index,\r
+  OUT     CHAR16                  **String\r
+  )\r
+{\r
+  UINT8          StrNum;\r
+  UINTN          CurrentStrLen;\r
+  CHAR8*         CharInStr;\r
+  EFI_STATUS     Status;\r
+\r
+  StrNum        = 0;\r
+  Status        = EFI_NOT_FOUND;\r
+  CharInStr     = OptionalStrStart;\r
+\r
+  if (Index != 1) {\r
+    CurrentStrLen = 0;\r
+    //\r
+    // look for the two consecutive zeros, check the string limit by the way.\r
+    //\r
+    while (*CharInStr != 0 || *(CharInStr+1) != 0) { \r
+      if (*CharInStr == 0) {\r
+        StrNum += 1;\r
+        CharInStr++;\r
+      }\r
+  \r
+      if (StrNum == Index) {\r
+        Status = EFI_SUCCESS;\r
+        break;\r
+      }\r
+  \r
+      CurrentStrLen = AsciiStrLen(CharInStr);\r
+  \r
+      //\r
+      // forward the pointer\r
+      //\r
+      OptionalStrStart = CharInStr;\r
+      CharInStr += CurrentStrLen;\r
+    }\r
+  \r
+    if (EFI_ERROR (Status)) {\r
+      *String = GetStringById (STRING_TOKEN (STR_MISSING_STRING));\r
+      return Status;\r
+    }\r
+  } else {\r
+    CurrentStrLen = AsciiStrLen(CharInStr);\r
+  }\r
+\r
+  *String = AllocatePool((CurrentStrLen + 1)*sizeof(CHAR16));\r
+  AsciiStrToUnicodeStr(OptionalStrStart, *String);\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+\r
 /**\r
   Update the banner information for the Front Page based on DataHub information.\r
 \r
@@ -645,19 +714,18 @@ UpdateFrontPageStrings (
   VOID\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  EFI_STRING_ID                     TokenToUpdate;\r
+  UINT8                             StrIndex;\r
   CHAR16                            *NewString;\r
-  UINT64                            MonotonicCount;\r
-  EFI_DATA_HUB_PROTOCOL             *DataHub;\r
-  EFI_DATA_RECORD_HEADER            *Record;\r
-  EFI_SUBCLASS_TYPE1_HEADER         *DataHeader;\r
-  EFI_MISC_BIOS_VENDOR_DATA         *BiosVendor;\r
-  EFI_MISC_SYSTEM_MANUFACTURER_DATA *SystemManufacturer;\r
-  EFI_PROCESSOR_VERSION_DATA        *ProcessorVersion;\r
-  EFI_PROCESSOR_CORE_FREQUENCY_DATA *ProcessorFrequency;\r
-  EFI_MEMORY_ARRAY_START_ADDRESS_DATA    *MemoryArray;\r
   BOOLEAN                           Find[5];\r
+  EFI_STATUS                        Status;\r
+  EFI_STRING_ID                     TokenToUpdate;\r
+  EFI_SMBIOS_HANDLE                 SmbiosHandle;\r
+  EFI_SMBIOS_PROTOCOL               *Smbios;\r
+  SMBIOS_TABLE_TYPE0                *Type0Record;\r
+  SMBIOS_TABLE_TYPE1                *Type1Record;\r
+  SMBIOS_TABLE_TYPE4                *Type4Record;\r
+  SMBIOS_TABLE_TYPE19               *Type19Record;\r
+  EFI_SMBIOS_TABLE_HEADER           *Record;\r
 \r
   ZeroMem (Find, sizeof (Find));\r
 \r
@@ -665,89 +733,79 @@ UpdateFrontPageStrings (
   // Update Front Page strings\r
   //\r
   Status = gBS->LocateProtocol (\r
-                  &gEfiDataHubProtocolGuid,\r
+                  &gEfiSmbiosProtocolGuid,\r
                   NULL,\r
-                  (VOID **) &DataHub\r
+                  (VOID **) &Smbios\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  MonotonicCount  = 0;\r
-  Record          = NULL;\r
+  SmbiosHandle = 0;\r
   do {\r
-    Status = DataHub->GetNextRecord (DataHub, &MonotonicCount, NULL, &Record);\r
-    if (EFI_ERROR (Status) || Record == NULL) {\r
+    Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
+    if (EFI_ERROR(Status)) {\r
       break;\r
     }\r
-    if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {\r
-      DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *) (Record + 1);\r
-      if (CompareGuid (&Record->DataRecordGuid, &gEfiMiscSubClassGuid) &&\r
-          (DataHeader->RecordType == EFI_MISC_BIOS_VENDOR_RECORD_NUMBER)\r
-          ) {\r
-        BiosVendor = (EFI_MISC_BIOS_VENDOR_DATA *) (DataHeader + 1);\r
-        GetProducerString (&Record->ProducerName, BiosVendor->BiosVersion, &NewString);\r
-        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 (CompareGuid (&Record->DataRecordGuid, &gEfiMiscSubClassGuid) &&\r
-          (DataHeader->RecordType == EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER)\r
-          ) {\r
-        SystemManufacturer = (EFI_MISC_SYSTEM_MANUFACTURER_DATA *) (DataHeader + 1);\r
-        GetProducerString (&Record->ProducerName, SystemManufacturer->SystemProductName, &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 (CompareGuid (&Record->DataRecordGuid, &gEfiProcessorSubClassGuid) &&\r
-          (DataHeader->RecordType == ProcessorVersionRecordType)\r
-          ) {\r
-        ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *) (DataHeader + 1);\r
-        GetProducerString (&Record->ProducerName, *ProcessorVersion, &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
-      }\r
-\r
-      if (CompareGuid (&Record->DataRecordGuid, &gEfiProcessorSubClassGuid) &&\r
-          (DataHeader->RecordType == ProcessorCoreFrequencyRecordType)\r
-          ) {\r
-        ProcessorFrequency = (EFI_PROCESSOR_CORE_FREQUENCY_DATA *) (DataHeader + 1);\r
-        ConvertProcessorToString (ProcessorFrequency, &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
-      }\r
 \r
-      if (CompareGuid (&Record->DataRecordGuid, &gEfiMemorySubClassGuid) &&\r
-          (DataHeader->RecordType == EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER)\r
-          ) {\r
-        MemoryArray = (EFI_MEMORY_ARRAY_START_ADDRESS_DATA *) (DataHeader + 1);\r
-        ConvertMemorySizeToString (\r
-          (UINT32)(RShiftU64((MemoryArray->MemoryArrayEndAddress - MemoryArray->MemoryArrayStartAddress + 1), 20)),\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
-      }\r
+    if (Record->Type == EFI_SMBIOS_TYPE_BIOS_INFORMATION) {\r
+      Type0Record = (SMBIOS_TABLE_TYPE0 *) Record;\r
+      StrIndex = Type0Record->BiosVersion;\r
+      GetOptionalStringByIndex ((CHAR8*)(Type0Record+1), StrIndex, &NewString);\r
+      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
+      Type1Record = (SMBIOS_TABLE_TYPE1 *) Record;\r
+      StrIndex = Type1Record->ProductName;\r
+      GetOptionalStringByIndex ((CHAR8*)(Type1Record+1), 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
-  } while (!EFI_ERROR (Status) && (MonotonicCount != 0) && !(Find[0] && Find[1] && Find[2] && Find[3] && Find[4]));\r
-\r
+      \r
+    if (Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) {\r
+      Type4Record = (SMBIOS_TABLE_TYPE4 *) Record;\r
+      StrIndex = Type4Record->ProcessorVersion;\r
+      GetOptionalStringByIndex ((CHAR8*)(Type4Record+1), 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
+    }    \r
+\r
+    if (Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) {\r
+      Type4Record = (SMBIOS_TABLE_TYPE4 *) Record;\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
+    } \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
+    }\r
+  } while ( !(Find[0] && Find[1] && Find[2] && Find[3] && Find[4]));\r
   return ;\r
 }\r
 \r
+\r
 /**\r
   Function waits for a given event to fire, or for an optional timeout to expire.\r
 \r
-  @param Event              The event to wait for\r
-  @param Timeout            An optional timeout value in 100 ns units.\r
+  @param   Event              The event to wait for\r
+  @param   Timeout            An optional timeout value in 100 ns units.\r
 \r
   @retval  EFI_SUCCESS      Event fired before Timeout expired.\r
   @retval  EFI_TIME_OUT     Timout expired before Event fired..\r
@@ -759,8 +817,8 @@ WaitForSingleEvent (
   IN UINT64                     Timeout OPTIONAL\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
   UINTN       Index;\r
+  EFI_STATUS  Status;\r
   EFI_EVENT   TimerEvent;\r
   EFI_EVENT   WaitList[2];\r
 \r
@@ -774,10 +832,10 @@ WaitForSingleEvent (
       // Set the timer event\r
       //\r
       gBS->SetTimer (\r
-            TimerEvent,\r
-            TimerRelative,\r
-            Timeout\r
-            );\r
+             TimerEvent,\r
+             TimerRelative,\r
+             Timeout\r
+             );\r
 \r
       //\r
       // Wait for the original event or the timer\r
@@ -810,7 +868,7 @@ WaitForSingleEvent (
   Function show progress bar to wait for user input.\r
 \r
 \r
-  @param TimeoutDefault  The fault time out value before the system continue to boot.\r
+  @param   TimeoutDefault  The fault time out value before the system continue to boot.\r
 \r
   @retval  EFI_SUCCESS       User pressed some key except "Enter"\r
   @retval  EFI_TIME_OUT      Timout expired or user press "Enter"\r
@@ -821,13 +879,13 @@ ShowProgress (
   IN UINT16                       TimeoutDefault\r
   )\r
 {\r
-  EFI_STATUS                    Status;\r
   CHAR16                        *TmpStr;\r
+  UINT16                        TimeoutRemain;\r
+  EFI_STATUS                    Status;\r
+  EFI_INPUT_KEY                 Key;\r
   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground;\r
   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background;\r
   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color;\r
-  EFI_INPUT_KEY                 Key;\r
-  UINT16                        TimeoutRemain;\r
 \r
   if (TimeoutDefault == 0) {\r
     return EFI_TIMEOUT;\r