]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. Update the CRC32 in the EFI System Table header in BdsConsole.c
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 7 Apr 2009 08:42:15 +0000 (08:42 +0000)
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 7 Apr 2009 08:42:15 +0000 (08:42 +0000)
2. Removed duplicated installation for Simple Text Output protocol on ErrHandle.

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

IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.h

index 30a6c3e6ed6a6a9e2b9db7f826493504bc11ef01..6f3addb2f25cf6e5f13cca48a4b0bcf8b54cb956 100644 (file)
@@ -60,8 +60,12 @@ IsNvNeed (
                              On OUT, new console hanlde in system table.\r
   @param  ProtocolInterface  On IN,  console protocol on console handle in System Table to be checked. \r
                              On OUT, new console protocol on new console hanlde in system table.\r
+\r
+  @retval TRUE               System Table has been updated.\r
+  @retval FALSE              System Table hasn't been updated.\r
+\r
 **/\r
-VOID \r
+BOOLEAN \r
 UpdateSystemTableConsole (\r
   IN     CHAR16                          *VarName,\r
   IN     EFI_GUID                        *ConsoleGuid,\r
@@ -93,7 +97,7 @@ UpdateSystemTableConsole (
       // If ConsoleHandle is valid and console protocol on this handle also\r
       // also matched, just return.\r
       //\r
-      return;\r
+      return FALSE;\r
     }\r
   }\r
   \r
@@ -109,7 +113,7 @@ UpdateSystemTableConsole (
     //\r
     // If there is no any console device, just return.\r
     //\r
-    return ;\r
+    return FALSE;\r
   }\r
 \r
   FullDevicePath = VarConsole;\r
@@ -147,7 +151,7 @@ UpdateSystemTableConsole (
         //\r
         *ConsoleHandle     = NewHandle;\r
         *ProtocolInterface = Interface;\r
-        return ;\r
+        return TRUE;\r
       }\r
     }\r
 \r
@@ -156,7 +160,7 @@ UpdateSystemTableConsole (
   //\r
   // No any available console devcie found.\r
   //\r
-  ASSERT (FALSE);  \r
+  return FALSE;\r
 }\r
 \r
 /**\r
@@ -485,6 +489,7 @@ BdsLibConnectAllDefaultConsoles (
   )\r
 {\r
   EFI_STATUS                Status;\r
+  BOOLEAN                   SystemTableUpdated;\r
 \r
   //\r
   // Connect all default console variables\r
@@ -517,12 +522,31 @@ BdsLibConnectAllDefaultConsoles (
   //\r
   BdsLibConnectConsoleVariable (L"ErrOut");\r
 \r
+  SystemTableUpdated = FALSE;\r
   //\r
   // Fill console handles in System Table if no console device assignd.\r
   //\r
-  UpdateSystemTableConsole (L"ConIn", &gEfiSimpleTextInProtocolGuid, &gST->ConsoleInHandle, (VOID **) &gST->ConIn);\r
-  UpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut);\r
-  UpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr);\r
+  if (UpdateSystemTableConsole (L"ConIn", &gEfiSimpleTextInProtocolGuid, &gST->ConsoleInHandle, (VOID **) &gST->ConIn)) {\r
+    SystemTableUpdated = TRUE;\r
+  }\r
+  if (UpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut)) {\r
+    SystemTableUpdated = TRUE;\r
+  }\r
+  if (UpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr)) {\r
+    SystemTableUpdated = TRUE;\r
+  }\r
+\r
+  if (SystemTableUpdated) {\r
+    //\r
+    // Update the CRC32 in the EFI System Table header\r
+    //\r
+    gST->Hdr.CRC32 = 0;\r
+    gBS->CalculateCrc32 (\r
+          (UINT8 *) &gST->Hdr,\r
+          gST->Hdr.HeaderSize,\r
+          &gST->Hdr.CRC32\r
+          );\r
+  }\r
 \r
   return EFI_SUCCESS;\r
 \r
index 3389f62f98051c4bff361360ab204bffec474663..109caf7306c9aa594ed138acee905fab075f17c0 100644 (file)
@@ -1317,18 +1317,9 @@ ConSplitterStdErrDriverBindingStart (
 \r
   if (mStdErr.CurrentNumberOfConsoles == 0) {\r
     //\r
-    // Create virtual device handle for StdErr Splitter\r
+    // Construct console output devices' private data\r
     //\r
     Status = ConSplitterTextOutConstructor (&mStdErr);\r
-    if (!EFI_ERROR (Status)) {\r
-      Status = gBS->InstallMultipleProtocolInterfaces (\r
-                      &mStdErr.VirtualHandle,\r
-                      &gEfiSimpleTextOutProtocolGuid,\r
-                      &mStdErr.TextOut,\r
-                      NULL\r
-                      );\r
-    }\r
-    \r
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
@@ -1370,14 +1361,14 @@ ConSplitterStdErrDriverBindingStart (
     //\r
     // Create virtual device handle for StdErr Splitter\r
     //\r
-    Status = ConSplitterTextOutConstructor (&mStdErr);\r
-    if (!EFI_ERROR (Status)) {\r
-      Status = gBS->InstallMultipleProtocolInterfaces (\r
-                      &mStdErr.VirtualHandle,\r
-                      &gEfiSimpleTextOutProtocolGuid,\r
-                      &mStdErr.TextOut,\r
-                      NULL\r
-                      );\r
+    Status = gBS->InstallMultipleProtocolInterfaces (\r
+                    &mStdErr.VirtualHandle,\r
+                    &gEfiSimpleTextOutProtocolGuid,\r
+                    &mStdErr.TextOut,\r
+                    NULL\r
+                    );\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
     }\r
 \r
     gST->StandardErrorHandle  = mStdErr.VirtualHandle;\r
@@ -1779,8 +1770,8 @@ ConSplitterStdErrDriverBindingStop (
 **/\r
 EFI_STATUS\r
 ConSplitterGrowBuffer (\r
-  IN  UINTN                           SizeOfCount,\r
-  IN  UINTN                           *Count,\r
+  IN      UINTN                       SizeOfCount,\r
+  IN OUT  UINTN                       *Count,\r
   IN OUT  VOID                        **Buffer\r
   )\r
 {\r
@@ -2968,6 +2959,7 @@ ConSplitterTextOutAddDevice (
   // If the Text Out List is full, enlarge it by calling ConSplitterGrowBuffer().\r
   //\r
   while (CurrentNumOfConsoles >= Private->TextOutListCount) {\r
+    CpuBreakpoint ();\r
     Status = ConSplitterGrowBuffer (\r
               sizeof (TEXT_OUT_AND_GOP_DATA),\r
               &Private->TextOutListCount,\r
index 3bfa24548a93755d01875497521149a0c5f8128b..a3904f4a290ddb00838e7282681b16b54354e016 100644 (file)
@@ -1749,8 +1749,8 @@ ConSplitterTextOutEnableCursor (
 **/\r
 EFI_STATUS\r
 ConSplitterGrowBuffer (\r
-  IN  UINTN                           SizeOfCount,\r
-  IN  UINTN                           *Count,\r
+  IN      UINTN                       SizeOfCount,\r
+  IN OUT  UINTN                       *Count,\r
   IN OUT  VOID                        **Buffer\r
   );\r
 \r