mirror of https://github.com/acidanthera/audk.git
1. retried PrimaryConsoleInDeviceGuid, PrimaryConsoleOutDeviceGuid and PrimaryStandardErrorDeviceGuid.
Consplitter will not install these protocols any more. 2. added logic in Bds to check console handles in System table, if no console handle assigned. Bds module will fill these handles in system table accordingly. 3. fixed one bug before call ConsoleControl->SetMode in FrontPage.c. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7841 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
9dca4c66c2
commit
dad608335f
|
@ -48,6 +48,117 @@ IsNvNeed (
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Fill console handle in System Table if there are no valid console handle in.
|
||||
|
||||
Firstly, check the validation of console handle in System Table. If it is invalid,
|
||||
update it by the first console device handle from EFI console variable.
|
||||
|
||||
@param VarName The name of the EFI console variable.
|
||||
@param ConsoleGuid Specified Console protocol GUID.
|
||||
@param ConsoleHandle On IN, console handle in System Table to be checked.
|
||||
On OUT, new console hanlde in system table.
|
||||
@param ProtocolInterface On IN, console protocol on console handle in System Table to be checked.
|
||||
On OUT, new console protocol on new console hanlde in system table.
|
||||
**/
|
||||
VOID
|
||||
UpdateSystemTableConsole (
|
||||
IN CHAR16 *VarName,
|
||||
IN EFI_GUID *ConsoleGuid,
|
||||
IN OUT EFI_HANDLE *ConsoleHandle,
|
||||
IN OUT VOID **ProtocolInterface
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN DevicePathSize;
|
||||
EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *VarConsole;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Instance;
|
||||
VOID *Interface;
|
||||
EFI_HANDLE NewHandle;
|
||||
|
||||
ASSERT (VarName != NULL);
|
||||
ASSERT (ConsoleHandle != NULL);
|
||||
ASSERT (ConsoleGuid != NULL);
|
||||
ASSERT (ProtocolInterface != NULL);
|
||||
|
||||
if (*ConsoleHandle != NULL) {
|
||||
Status = gBS->HandleProtocol (
|
||||
*ConsoleHandle,
|
||||
ConsoleGuid,
|
||||
&Interface
|
||||
);
|
||||
if (Status == EFI_SUCCESS && Interface == *ProtocolInterface) {
|
||||
//
|
||||
// If ConsoleHandle is valid and console protocol on this handle also
|
||||
// also matched, just return.
|
||||
//
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Get all possible consoles device path from EFI variable
|
||||
//
|
||||
VarConsole = BdsLibGetVariableAndSize (
|
||||
VarName,
|
||||
&gEfiGlobalVariableGuid,
|
||||
&DevicePathSize
|
||||
);
|
||||
if (VarConsole == NULL) {
|
||||
//
|
||||
// If there is no any console device, just return.
|
||||
//
|
||||
return ;
|
||||
}
|
||||
|
||||
FullDevicePath = VarConsole;
|
||||
|
||||
do {
|
||||
//
|
||||
// Check every instance of the console variable
|
||||
//
|
||||
Instance = GetNextDevicePathInstance (&VarConsole, &DevicePathSize);
|
||||
if (Instance == NULL) {
|
||||
FreePool (FullDevicePath);
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
//
|
||||
// Find console device handle by device path instance
|
||||
//
|
||||
Status = gBS->LocateDevicePath (
|
||||
ConsoleGuid,
|
||||
&Instance,
|
||||
&NewHandle
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// Get the console protocol on this console device handle
|
||||
//
|
||||
Status = gBS->HandleProtocol (
|
||||
NewHandle,
|
||||
ConsoleGuid,
|
||||
&Interface
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// Update new console handle in System Table.
|
||||
//
|
||||
*ConsoleHandle = NewHandle;
|
||||
*ProtocolInterface = Interface;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
|
||||
} while (Instance != NULL);
|
||||
|
||||
//
|
||||
// No any available console devcie found.
|
||||
//
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
This function update console variable based on ConVarName, it can
|
||||
add or remove one specific console device path from the variable
|
||||
|
@ -406,6 +517,13 @@ BdsLibConnectAllDefaultConsoles (
|
|||
//
|
||||
BdsLibConnectConsoleVariable (L"ErrOut");
|
||||
|
||||
//
|
||||
// Fill console handles in System Table if no console device assignd.
|
||||
//
|
||||
UpdateSystemTableConsole (L"ConIn", &gEfiSimpleTextInProtocolGuid, &gST->ConsoleInHandle, (VOID **) &gST->ConIn);
|
||||
UpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut);
|
||||
UpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
}
|
||||
|
|
|
@ -971,6 +971,7 @@ Exit:
|
|||
//
|
||||
PERF_END (0, "BdsTimeOut", "BDS", 0);
|
||||
Status = gBS->LocateProtocol (&gEfiConsoleControlProtocolGuid, NULL, (VOID **) &ConsoleControl);
|
||||
if (Status == EFI_SUCCESS) {
|
||||
ConsoleControl->SetMode (ConsoleControl, EfiConsoleControlScreenText);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
/** @file
|
||||
This guid is used to specify the primary console in device.
|
||||
It will be installed as the protocol guid into the virtual device handle for ConIn Splitter.
|
||||
|
||||
Copyright (c) 2006 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __PRIMARY_CONSOLE_IN_DEVICE_H__
|
||||
#define __PRIMARY_CONSOLE_IN_DEVICE_H__
|
||||
|
||||
#define EFI_PRIMARY_CONSOLE_IN_DEVICE_GUID \
|
||||
{ 0xe451dcbe, 0x96a1, 0x4729, {0xa5, 0xcf, 0x6b, 0x9c, 0x2c, 0xff, 0x47, 0xfd } }
|
||||
|
||||
extern EFI_GUID gEfiPrimaryConsoleInDeviceGuid;
|
||||
|
||||
#endif
|
|
@ -1,24 +0,0 @@
|
|||
/** @file
|
||||
This guid is used to specify the primary console out device.
|
||||
It will be installed as the protocol guid into the virtual device handle for ConOut Splitter.
|
||||
|
||||
Copyright (c) 2006 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __PRIMARY_CONSOLE_OUT_DEVICE_H__
|
||||
#define __PRIMARY_CONSOLE_OUT_DEVICE_H__
|
||||
|
||||
#define EFI_PRIMARY_CONSOLE_OUT_DEVICE_GUID \
|
||||
{ 0x62bdf38a, 0xe3d5, 0x492c, {0x95, 0xc, 0x23, 0xa7, 0xf6, 0x6e, 0x67, 0x2e } }
|
||||
|
||||
extern EFI_GUID gEfiPrimaryConsoleOutDeviceGuid;
|
||||
|
||||
#endif
|
|
@ -1,24 +0,0 @@
|
|||
/** @file
|
||||
This guid is used to specify the primary StdErr device.
|
||||
It will be installed as the protocol guid into the virtual device handle for StdErr Splitter.
|
||||
|
||||
Copyright (c) 2006 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __PRIMARY_STANDARD_ERROR_DEVICE_H__
|
||||
#define __PRIMARY_STANDARD_ERROR_DEVICE_H__
|
||||
|
||||
#define EFI_PRIMARY_STANDARD_ERROR_DEVICE_GUID \
|
||||
{ 0x5a68191b, 0x9b97, 0x4752, {0x99, 0x46, 0xe3, 0x6a, 0x5d, 0xa9, 0x42, 0xb1 } }
|
||||
|
||||
extern EFI_GUID gEfiPrimaryStandardErrorDeviceGuid;
|
||||
|
||||
#endif
|
|
@ -114,18 +114,6 @@
|
|||
## Include/Guid/ConsoleInDevice.h
|
||||
gEfiConsoleInDeviceGuid = { 0xD3B36F2B, 0xD551, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }}
|
||||
|
||||
## Guid specify the primary console out device.
|
||||
## Include/Guid/PrimaryConsoleOutDevice.h
|
||||
gEfiPrimaryConsoleOutDeviceGuid = { 0x62BDF38A, 0xE3D5, 0x492C, { 0x95, 0x0C, 0x23, 0xA7, 0xF6, 0x6E, 0x67, 0x2E }}
|
||||
|
||||
## Guid specify the primary console in device.
|
||||
## Include/Guid/PrimaryConsoleInDevice.h
|
||||
gEfiPrimaryConsoleInDeviceGuid = { 0xE451DCBE, 0x96A1, 0x4729, { 0xA5, 0xCF, 0x6B, 0x9C, 0x2C, 0xFF, 0x47, 0xFD }}
|
||||
|
||||
## Guid specify the primary StdErr device.
|
||||
## Include/Guid/PrimaryStandardErrorDevice.h
|
||||
gEfiPrimaryStandardErrorDeviceGuid = { 0x5A68191B, 0x9B97, 0x4752, { 0x99, 0x46, 0xE3, 0x6A, 0x5D, 0xA9, 0x42, 0xB1 }}
|
||||
|
||||
## Hob and Variable guid specify the platform memory type information.
|
||||
## Include/Guid/MemoryTypeInformation.h
|
||||
gEfiMemoryTypeInformationGuid = { 0x4C19049F, 0x4137, 0x4DD3, { 0x9C, 0x10, 0x8B, 0x97, 0xA8, 0x3F, 0xFD, 0xFA }}
|
||||
|
|
|
@ -429,8 +429,6 @@ ConSplitterDriverEntry(
|
|||
&mStdErr.VirtualHandle,
|
||||
&gEfiSimpleTextOutProtocolGuid,
|
||||
&mStdErr.TextOut,
|
||||
&gEfiPrimaryStandardErrorDeviceGuid,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
|
@ -449,8 +447,6 @@ ConSplitterDriverEntry(
|
|||
&mConIn.SimplePointer,
|
||||
&gEfiAbsolutePointerProtocolGuid,
|
||||
&mConIn.AbsolutePointer,
|
||||
&gEfiPrimaryConsoleInDeviceGuid,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
|
@ -480,8 +476,6 @@ ConSplitterDriverEntry(
|
|||
&mConOut.UgaDraw,
|
||||
&gEfiConsoleControlProtocolGuid,
|
||||
&mConOut.ConsoleControl,
|
||||
&gEfiPrimaryConsoleOutDeviceGuid,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
} else if (!FeaturePcdGet (PcdConOutUgaSupport)) {
|
||||
|
@ -497,8 +491,6 @@ ConSplitterDriverEntry(
|
|||
&mConOut.GraphicsOutput,
|
||||
&gEfiConsoleControlProtocolGuid,
|
||||
&mConOut.ConsoleControl,
|
||||
&gEfiPrimaryConsoleOutDeviceGuid,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
} else {
|
||||
|
@ -516,8 +508,6 @@ ConSplitterDriverEntry(
|
|||
&mConOut.UgaDraw,
|
||||
&gEfiConsoleControlProtocolGuid,
|
||||
&mConOut.ConsoleControl,
|
||||
&gEfiPrimaryConsoleOutDeviceGuid,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
|
|
|
@ -29,9 +29,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Protocol/GraphicsOutput.h>
|
||||
#include <Protocol/UgaDraw.h>
|
||||
|
||||
#include <Guid/PrimaryStandardErrorDevice.h>
|
||||
#include <Guid/PrimaryConsoleOutDevice.h>
|
||||
#include <Guid/PrimaryConsoleInDevice.h>
|
||||
#include <Guid/ConsoleInDevice.h>
|
||||
#include <Guid/StandardErrorDevice.h>
|
||||
#include <Guid/ConsoleOutDevice.h>
|
||||
|
|
|
@ -73,9 +73,7 @@
|
|||
gEfiConsoleInDeviceGuid ## SOMETIMES_CONSUMES
|
||||
gEfiStandardErrorDeviceGuid ## SOMETIMES_CONSUMES
|
||||
gEfiConsoleOutDeviceGuid ## SOMETIMES_CONSUMES
|
||||
gEfiPrimaryConsoleOutDeviceGuid ## PRODUCES
|
||||
gEfiPrimaryConsoleInDeviceGuid ## PRODUCES
|
||||
gEfiPrimaryStandardErrorDeviceGuid ## PRODUCES
|
||||
|
||||
|
||||
[Protocols]
|
||||
gEfiConsoleControlProtocolGuid ## PRODUCES
|
||||
|
|
Loading…
Reference in New Issue