]> git.proxmox.com Git - mirror_edk2.git/commitdiff
install simple text output protocol on stderr should in ConsplitterStdErrStart()...
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 3 Apr 2009 07:39:16 +0000 (07:39 +0000)
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 3 Apr 2009 07:39:16 +0000 (07:39 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8020 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c

index c8a773d75cb8d46383df470a0e4605eaeea5ef51..27fa58f8154fb963f383923cf832176398c6757c 100644 (file)
@@ -379,23 +379,11 @@ ConSplitterDriverEntry(
           FeaturePcdGet (PcdConOutUgaSupport));\r
 \r
   //\r
-  // The driver creates virtual handles for ConIn, ConOut, and StdErr.\r
+  // The driver creates virtual handles for ConIn, ConOut.\r
   // The virtual handles will always exist even if no console exist in the\r
   // system. This is need to support hotplug devices like USB.\r
   //\r
   //\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
-  }\r
-  //\r
   // Create virtual device handle for ConIn Splitter\r
   //\r
   Status = ConSplitterTextInConstructor (&mConIn);\r
@@ -1327,6 +1315,25 @@ ConSplitterStdErrDriverBindingStart (
   EFI_STATUS                       Status;\r
   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *TextOut;\r
 \r
+  if (mStdErr.CurrentNumberOfConsoles == 0) {\r
+    //\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
+    }\r
+    \r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
+  }\r
+\r
   //\r
   // Start ConSplitter on ControllerHandle, and create the virtual\r
   // agrogated console device on first call Start for a StandardError handle.\r
@@ -1360,6 +1367,19 @@ ConSplitterStdErrDriverBindingStart (
   }\r
 \r
   if (mStdErr.CurrentNumberOfConsoles == 1) {\r
+    //\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
+    }\r
+\r
     gST->StandardErrorHandle  = mStdErr.VirtualHandle;\r
     gST->StdErr               = &mStdErr.TextOut;\r
     //\r
@@ -1726,6 +1746,16 @@ ConSplitterStdErrDriverBindingStop (
           gST->Hdr.HeaderSize,\r
           &gST->Hdr.CRC32\r
           );\r
+\r
+    //\r
+    // Uninstall Simple Text Output protocol from StdErr Handle.\r
+    //\r
+    gBS->UninstallMultipleProtocolInterfaces (\r
+           mStdErr.VirtualHandle,\r
+           &gEfiSimpleTextOutProtocolGuid,\r
+           &mStdErr.TextOut,\r
+           NULL\r
+           );\r
   }\r
 \r
   return Status;\r
@@ -4145,6 +4175,7 @@ ConSplitterTextOutOutputString (
   Private         = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   BackSpaceCount  = 0;\r
+\r
   for (TargetString = WString; *TargetString != L'\0'; TargetString++) {\r
     if (*TargetString == CHAR_BACKSPACE) {\r
       BackSpaceCount++;\r