summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal
diff options
context:
space:
mode:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2009-04-03 07:39:16 +0000
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2009-04-03 07:39:16 +0000
commit19c9b0cce3877da63289394f2fcc95cef6ecbea0 (patch)
tree51d644cee189ef18137a3de346129e6b4be8bb31 /MdeModulePkg/Universal
parentb5378fa05ee761cf379a3403cc36e4ded39a0ae6 (diff)
downloadedk2-19c9b0cce3877da63289394f2fcc95cef6ecbea0.zip
edk2-19c9b0cce3877da63289394f2fcc95cef6ecbea0.tar.gz
edk2-19c9b0cce3877da63289394f2fcc95cef6ecbea0.tar.bz2
install simple text output protocol on stderr should in ConsplitterStdErrStart() instead of in ConSplitterEntryPoint().
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8020 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal')
-rw-r--r--MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c57
1 files changed, 44 insertions, 13 deletions
diff --git a/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c b/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
index c8a773d..27fa58f 100644
--- a/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
+++ b/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
@@ -379,23 +379,11 @@ ConSplitterDriverEntry(
FeaturePcdGet (PcdConOutUgaSupport));
//
- // The driver creates virtual handles for ConIn, ConOut, and StdErr.
+ // The driver creates virtual handles for ConIn, ConOut.
// The virtual handles will always exist even if no console exist in the
// system. This is need to support hotplug devices like USB.
//
//
- // Create virtual device handle for StdErr Splitter
- //
- Status = ConSplitterTextOutConstructor (&mStdErr);
- if (!EFI_ERROR (Status)) {
- Status = gBS->InstallMultipleProtocolInterfaces (
- &mStdErr.VirtualHandle,
- &gEfiSimpleTextOutProtocolGuid,
- &mStdErr.TextOut,
- NULL
- );
- }
- //
// Create virtual device handle for ConIn Splitter
//
Status = ConSplitterTextInConstructor (&mConIn);
@@ -1327,6 +1315,25 @@ ConSplitterStdErrDriverBindingStart (
EFI_STATUS Status;
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
+ if (mStdErr.CurrentNumberOfConsoles == 0) {
+ //
+ // Create virtual device handle for StdErr Splitter
+ //
+ Status = ConSplitterTextOutConstructor (&mStdErr);
+ if (!EFI_ERROR (Status)) {
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mStdErr.VirtualHandle,
+ &gEfiSimpleTextOutProtocolGuid,
+ &mStdErr.TextOut,
+ NULL
+ );
+ }
+
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ }
+
//
// Start ConSplitter on ControllerHandle, and create the virtual
// agrogated console device on first call Start for a StandardError handle.
@@ -1360,6 +1367,19 @@ ConSplitterStdErrDriverBindingStart (
}
if (mStdErr.CurrentNumberOfConsoles == 1) {
+ //
+ // Create virtual device handle for StdErr Splitter
+ //
+ Status = ConSplitterTextOutConstructor (&mStdErr);
+ if (!EFI_ERROR (Status)) {
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mStdErr.VirtualHandle,
+ &gEfiSimpleTextOutProtocolGuid,
+ &mStdErr.TextOut,
+ NULL
+ );
+ }
+
gST->StandardErrorHandle = mStdErr.VirtualHandle;
gST->StdErr = &mStdErr.TextOut;
//
@@ -1726,6 +1746,16 @@ ConSplitterStdErrDriverBindingStop (
gST->Hdr.HeaderSize,
&gST->Hdr.CRC32
);
+
+ //
+ // Uninstall Simple Text Output protocol from StdErr Handle.
+ //
+ gBS->UninstallMultipleProtocolInterfaces (
+ mStdErr.VirtualHandle,
+ &gEfiSimpleTextOutProtocolGuid,
+ &mStdErr.TextOut,
+ NULL
+ );
}
return Status;
@@ -4145,6 +4175,7 @@ ConSplitterTextOutOutputString (
Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
BackSpaceCount = 0;
+
for (TargetString = WString; *TargetString != L'\0'; TargetString++) {
if (*TargetString == CHAR_BACKSPACE) {
BackSpaceCount++;