diff options
author | Qiu Shumin <shumin.qiu@intel.com> | 2014-12-04 01:18:04 +0000 |
---|---|---|
committer | shenshushi <shenshushi@Edk2> | 2014-12-04 01:18:04 +0000 |
commit | d86b04fbe9955e3fc56f3f529a505005ad3a090f (patch) | |
tree | 65e4427fe3d0a7d74a14fc7023e295601ac33c97 | |
parent | 8f586b85c3f617ba802e663b4b3b303e06140863 (diff) | |
download | edk2-d86b04fbe9955e3fc56f3f529a505005ad3a090f.tar.gz edk2-d86b04fbe9955e3fc56f3f529a505005ad3a090f.tar.bz2 edk2-d86b04fbe9955e3fc56f3f529a505005ad3a090f.zip |
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
3 files changed, 89 insertions, 17 deletions
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c index 11b8e91bc5..bd4a374d91 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c @@ -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;
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Reconnect.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Reconnect.c index e6a0fba20d..e4747e310a 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Reconnect.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Reconnect.c @@ -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);
}
+
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h index 1b8e56822d..c65d0ed695 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h @@ -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
|