mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-25 22:54:51 +02:00
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
This commit is contained in:
parent
b5378fa05e
commit
19c9b0cce3
@ -379,23 +379,11 @@ ConSplitterDriverEntry(
|
|||||||
FeaturePcdGet (PcdConOutUgaSupport));
|
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
|
// The virtual handles will always exist even if no console exist in the
|
||||||
// system. This is need to support hotplug devices like USB.
|
// 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
|
// Create virtual device handle for ConIn Splitter
|
||||||
//
|
//
|
||||||
Status = ConSplitterTextInConstructor (&mConIn);
|
Status = ConSplitterTextInConstructor (&mConIn);
|
||||||
@ -1327,6 +1315,25 @@ ConSplitterStdErrDriverBindingStart (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
|
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
|
// Start ConSplitter on ControllerHandle, and create the virtual
|
||||||
// agrogated console device on first call Start for a StandardError handle.
|
// agrogated console device on first call Start for a StandardError handle.
|
||||||
@ -1360,6 +1367,19 @@ ConSplitterStdErrDriverBindingStart (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mStdErr.CurrentNumberOfConsoles == 1) {
|
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->StandardErrorHandle = mStdErr.VirtualHandle;
|
||||||
gST->StdErr = &mStdErr.TextOut;
|
gST->StdErr = &mStdErr.TextOut;
|
||||||
//
|
//
|
||||||
@ -1726,6 +1746,16 @@ ConSplitterStdErrDriverBindingStop (
|
|||||||
gST->Hdr.HeaderSize,
|
gST->Hdr.HeaderSize,
|
||||||
&gST->Hdr.CRC32
|
&gST->Hdr.CRC32
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Uninstall Simple Text Output protocol from StdErr Handle.
|
||||||
|
//
|
||||||
|
gBS->UninstallMultipleProtocolInterfaces (
|
||||||
|
mStdErr.VirtualHandle,
|
||||||
|
&gEfiSimpleTextOutProtocolGuid,
|
||||||
|
&mStdErr.TextOut,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
@ -4145,6 +4175,7 @@ ConSplitterTextOutOutputString (
|
|||||||
Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
|
Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
|
||||||
|
|
||||||
BackSpaceCount = 0;
|
BackSpaceCount = 0;
|
||||||
|
|
||||||
for (TargetString = WString; *TargetString != L'\0'; TargetString++) {
|
for (TargetString = WString; *TargetString != L'\0'; TargetString++) {
|
||||||
if (*TargetString == CHAR_BACKSPACE) {
|
if (*TargetString == CHAR_BACKSPACE) {
|
||||||
BackSpaceCount++;
|
BackSpaceCount++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user