]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c
Driver health entry in device manager page is not totally hidden, the original code...
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / FrontPage.c
index 37be6ff976849c089e25f6cdd1835b97e5778685..f112040a4ae5051b4f7195f703489e187e074f49 100644 (file)
@@ -534,7 +534,7 @@ CallFrontPage (
                             &ActionRequest\r
                             );\r
   //\r
-  // Check whether user  change any option setting which needs a reset to be effective\r
+  // Check whether user change any option setting which needs a reset to be effective\r
   //\r
   if (ActionRequest == EFI_BROWSER_ACTION_REQUEST_RESET) {\r
     EnableResetRequired ();\r
@@ -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*)((UINT8*)Type0Record + Type0Record->Hdr.Length), 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*)((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
-  } 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*)((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
+    }    \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,10 +868,10 @@ 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
+  @retval  EFI_TIME_OUT      Timeout expired or user press "Enter"\r
 \r
 **/\r
 EFI_STATUS\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
@@ -907,7 +965,7 @@ ShowProgress (
   @param TimeoutDefault     The fault time out value before the system\r
                             continue to boot.\r
   @param ConnectAllHappened The indicater to check if the connect all have\r
-                            already happended.\r
+                            already happened.\r
 \r
 **/\r
 VOID\r
@@ -957,11 +1015,11 @@ PlatformBdsEnterFrontPage (
 \r
     //\r
     // If gCallbackKey is greater than 1 and less or equal to 5,\r
-    // it will lauch configuration utilities.\r
+    // it will launch configuration utilities.\r
     // 2 = set language\r
     // 3 = boot manager\r
     // 4 = device manager\r
-    // 5 = boot maintainenance manager\r
+    // 5 = boot maintenance manager\r
     //\r
     if (gCallbackKey != 0) {\r
       REPORT_STATUS_CODE (\r
@@ -1004,7 +1062,7 @@ PlatformBdsEnterFrontPage (
       // Display the Device Manager\r
       //\r
       do {\r
-        CallDeviceManager();\r
+        CallDeviceManager ();\r
       } while (gCallbackKey == FRONT_PAGE_KEY_DEVICE_MANAGER);\r
       break;\r
 \r