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

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