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:
vanjeff 2009-03-10 03:10:15 +00:00
parent 9dca4c66c2
commit dad608335f
9 changed files with 122 additions and 102 deletions

View File

@ -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;
}

View File

@ -971,6 +971,7 @@ Exit:
//
PERF_END (0, "BdsTimeOut", "BDS", 0);
Status = gBS->LocateProtocol (&gEfiConsoleControlProtocolGuid, NULL, (VOID **) &ConsoleControl);
ConsoleControl->SetMode (ConsoleControl, EfiConsoleControlScreenText);
if (Status == EFI_SUCCESS) {
ConsoleControl->SetMode (ConsoleControl, EfiConsoleControlScreenText);
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 }}

View File

@ -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
);
}

View File

@ -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>

View File

@ -73,9 +73,7 @@
gEfiConsoleInDeviceGuid ## SOMETIMES_CONSUMES
gEfiStandardErrorDeviceGuid ## SOMETIMES_CONSUMES
gEfiConsoleOutDeviceGuid ## SOMETIMES_CONSUMES
gEfiPrimaryConsoleOutDeviceGuid ## PRODUCES
gEfiPrimaryConsoleInDeviceGuid ## PRODUCES
gEfiPrimaryStandardErrorDeviceGuid ## PRODUCES
[Protocols]
gEfiConsoleControlProtocolGuid ## PRODUCES