ShellPkg: Connect all the consoles in "reconnect -r".

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16473 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Qiu Shumin 2014-12-04 01:18:04 +00:00 committed by shenshushi
parent 8f586b85c3
commit d86b04fbe9
3 changed files with 89 additions and 17 deletions

View File

@ -93,6 +93,8 @@ ShellConnectPciRootBridge (
for (RootBridgeIndex = 0; RootBridgeIndex < RootBridgeHandleCount; RootBridgeIndex++) {
gBS->ConnectController (RootBridgeHandleBuffer[RootBridgeIndex], NULL, NULL, FALSE);
}
FreePool (RootBridgeHandleBuffer);
return EFI_SUCCESS;
}
@ -192,7 +194,7 @@ ConnectControllers (
**/
EFI_STATUS
EFIAPI
ConnectFromDevPaths (
ShellConnectFromDevPaths (
IN CONST CHAR16 *Key
)
{
@ -462,31 +464,31 @@ ShellCommandRunConnect (
// do the conin and conout from EFI variables
// if the first fails dont 'loose' the error
//
Status = ConnectFromDevPaths(L"ConInDev");
Status = ShellConnectFromDevPaths(L"ConInDev");
if (EFI_ERROR(Status)) {
ConnectFromDevPaths(L"ConOutDev");
ShellConnectFromDevPaths(L"ConOutDev");
} else {
Status = ConnectFromDevPaths(L"ConOutDev");
Status = ShellConnectFromDevPaths(L"ConOutDev");
}
if (EFI_ERROR(Status)) {
ConnectFromDevPaths(L"ErrOutDev");
ShellConnectFromDevPaths(L"ErrOutDev");
} else {
Status = ConnectFromDevPaths(L"ErrOutDev");
Status = ShellConnectFromDevPaths(L"ErrOutDev");
}
if (EFI_ERROR(Status)) {
ConnectFromDevPaths(L"ErrOut");
ShellConnectFromDevPaths(L"ErrOut");
} else {
Status = ConnectFromDevPaths(L"ErrOut");
Status = ShellConnectFromDevPaths(L"ErrOut");
}
if (EFI_ERROR(Status)) {
ConnectFromDevPaths(L"ConIn");
ShellConnectFromDevPaths(L"ConIn");
} else {
Status = ConnectFromDevPaths(L"ConIn");
Status = ShellConnectFromDevPaths(L"ConIn");
}
if (EFI_ERROR(Status)) {
ConnectFromDevPaths(L"ConOut");
ShellConnectFromDevPaths(L"ConOut");
} else {
Status = ConnectFromDevPaths(L"ConOut");
Status = ShellConnectFromDevPaths(L"ConOut");
}
if (EFI_ERROR(Status)) {
ShellStatus = SHELL_DEVICE_ERROR;

View File

@ -1,7 +1,7 @@
/** @file
Main file for Reconnect shell Driver1 function.
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
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
@ -14,6 +14,30 @@
#include "UefiShellDriver1CommandsLib.h"
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
{L"-r", TypeFlag},
{NULL, TypeMax}
};
/**
Connect all the possible console devices.
**/
VOID
ConnectAllConsoles (
VOID
)
{
ShellConnectFromDevPaths(L"ConInDev");
ShellConnectFromDevPaths(L"ConOutDev");
ShellConnectFromDevPaths(L"ErrOutDev");
ShellConnectFromDevPaths(L"ErrOut");
ShellConnectFromDevPaths(L"ConIn");
ShellConnectFromDevPaths(L"ConOut");
}
/**
Function for 'reconnect' command.
@ -28,15 +52,46 @@ ShellCommandRunReconnect (
)
{
SHELL_STATUS ShellStatus;
LIST_ENTRY *Package;
CHAR16 *ProblemParam;
EFI_STATUS Status;
gInReconnect = TRUE;
ShellStatus = SHELL_SUCCESS;
//
// initialize the shell lib (we must be in non-auto-init...)
//
Status = ShellInitialize();
ASSERT_EFI_ERROR(Status);
ShellStatus = ShellCommandRunDisconnect(ImageHandle, SystemTable);
if (ShellStatus == SHELL_SUCCESS) {
ShellStatus = ShellCommandRunConnect(ImageHandle, SystemTable);
}
Status = CommandInit();
ASSERT_EFI_ERROR(Status);
//
// parse the command line
//
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
if (EFI_ERROR(Status)) {
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);
FreePool(ProblemParam);
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
ASSERT(FALSE);
}
} else {
ShellStatus = ShellCommandRunDisconnect(ImageHandle, SystemTable);
if (ShellStatus == SHELL_SUCCESS) {
if (ShellCommandLineGetFlag(Package, L"-r")) {
ConnectAllConsoles();
}
ShellStatus = ShellCommandRunConnect(ImageHandle, SystemTable);
}
}
gInReconnect = FALSE;
return (ShellStatus);
}

View File

@ -207,5 +207,20 @@ ShellCommandRunUnload (
IN EFI_SYSTEM_TABLE *SystemTable
);
/**
Do a connect from an EFI variable via it's key name.
@param[in] Key The name of the EFI Variable.
@retval EFI_SUCCESS The operation was successful.
**/
EFI_STATUS
EFIAPI
ShellConnectFromDevPaths (
IN CONST CHAR16 *Key
);
#endif