]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Connect all the consoles in "reconnect -r".
authorQiu Shumin <shumin.qiu@intel.com>
Thu, 4 Dec 2014 01:18:04 +0000 (01:18 +0000)
committershenshushi <shenshushi@Edk2>
Thu, 4 Dec 2014 01:18:04 +0000 (01:18 +0000)
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

ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Reconnect.c
ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h

index 11b8e91bc5cd2ebf89e0d9baeaa0f5ae47d639f0..bd4a374d91a14812a58498410ccdf9591d3e35af 100644 (file)
@@ -93,6 +93,8 @@ ShellConnectPciRootBridge (
   for (RootBridgeIndex = 0; RootBridgeIndex < RootBridgeHandleCount; RootBridgeIndex++) {    \r
     gBS->ConnectController (RootBridgeHandleBuffer[RootBridgeIndex], NULL, NULL, FALSE);    \r
   }  \r
   for (RootBridgeIndex = 0; RootBridgeIndex < RootBridgeHandleCount; RootBridgeIndex++) {    \r
     gBS->ConnectController (RootBridgeHandleBuffer[RootBridgeIndex], NULL, NULL, FALSE);    \r
   }  \r
+\r
+  FreePool (RootBridgeHandleBuffer);\r
   \r
   return EFI_SUCCESS;\r
 }\r
   \r
   return EFI_SUCCESS;\r
 }\r
@@ -192,7 +194,7 @@ ConnectControllers (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-ConnectFromDevPaths (\r
+ShellConnectFromDevPaths (\r
   IN CONST CHAR16 *Key\r
   )\r
 {\r
   IN CONST CHAR16 *Key\r
   )\r
 {\r
@@ -462,31 +464,31 @@ ShellCommandRunConnect (
       // do the conin and conout from EFI variables\r
       // if the first fails dont 'loose' the error\r
       //\r
       // do the conin and conout from EFI variables\r
       // if the first fails dont 'loose' the error\r
       //\r
-      Status = ConnectFromDevPaths(L"ConInDev");\r
+      Status = ShellConnectFromDevPaths(L"ConInDev");\r
       if (EFI_ERROR(Status)) {\r
       if (EFI_ERROR(Status)) {\r
-        ConnectFromDevPaths(L"ConOutDev");\r
+        ShellConnectFromDevPaths(L"ConOutDev");\r
       } else {\r
       } else {\r
-        Status = ConnectFromDevPaths(L"ConOutDev");\r
+        Status = ShellConnectFromDevPaths(L"ConOutDev");\r
       }\r
       if (EFI_ERROR(Status)) {\r
       }\r
       if (EFI_ERROR(Status)) {\r
-        ConnectFromDevPaths(L"ErrOutDev");\r
+        ShellConnectFromDevPaths(L"ErrOutDev");\r
       } else {\r
       } else {\r
-        Status = ConnectFromDevPaths(L"ErrOutDev");\r
+        Status = ShellConnectFromDevPaths(L"ErrOutDev");\r
       }\r
       if (EFI_ERROR(Status)) {\r
       }\r
       if (EFI_ERROR(Status)) {\r
-        ConnectFromDevPaths(L"ErrOut");\r
+        ShellConnectFromDevPaths(L"ErrOut");\r
       } else {\r
       } else {\r
-        Status = ConnectFromDevPaths(L"ErrOut");\r
+        Status = ShellConnectFromDevPaths(L"ErrOut");\r
       }\r
       if (EFI_ERROR(Status)) {\r
       }\r
       if (EFI_ERROR(Status)) {\r
-        ConnectFromDevPaths(L"ConIn");\r
+        ShellConnectFromDevPaths(L"ConIn");\r
       } else {\r
       } else {\r
-        Status = ConnectFromDevPaths(L"ConIn");\r
+        Status = ShellConnectFromDevPaths(L"ConIn");\r
       }\r
       if (EFI_ERROR(Status)) {\r
       }\r
       if (EFI_ERROR(Status)) {\r
-        ConnectFromDevPaths(L"ConOut");\r
+        ShellConnectFromDevPaths(L"ConOut");\r
       } else {\r
       } else {\r
-        Status = ConnectFromDevPaths(L"ConOut");\r
+        Status = ShellConnectFromDevPaths(L"ConOut");\r
       }\r
       if (EFI_ERROR(Status)) {\r
         ShellStatus = SHELL_DEVICE_ERROR;\r
       }\r
       if (EFI_ERROR(Status)) {\r
         ShellStatus = SHELL_DEVICE_ERROR;\r
index e6a0fba20d894d17aa3e7ed5159e02688390de55..e4747e310a61f41b0c0b5c783286f88b6e89a931 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Reconnect shell Driver1 function.\r
 \r
 /** @file\r
   Main file for Reconnect shell Driver1 function.\r
 \r
-  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
 \r
 #include "UefiShellDriver1CommandsLib.h"\r
 \r
 \r
 #include "UefiShellDriver1CommandsLib.h"\r
 \r
+STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
+  {L"-r", TypeFlag},\r
+  {NULL, TypeMax}\r
+  };\r
+\r
+/**\r
+  Connect all the possible console devices.\r
+\r
+**/\r
+VOID\r
+ConnectAllConsoles (\r
+  VOID\r
+  )\r
+{  \r
+  ShellConnectFromDevPaths(L"ConInDev");\r
+  ShellConnectFromDevPaths(L"ConOutDev");\r
+  ShellConnectFromDevPaths(L"ErrOutDev");\r
+  \r
+  ShellConnectFromDevPaths(L"ErrOut");\r
+  ShellConnectFromDevPaths(L"ConIn");\r
+  ShellConnectFromDevPaths(L"ConOut");\r
+}\r
+\r
+\r
 /**\r
   Function for 'reconnect' command.\r
 \r
 /**\r
   Function for 'reconnect' command.\r
 \r
@@ -28,15 +52,46 @@ ShellCommandRunReconnect (
   )\r
 {\r
   SHELL_STATUS        ShellStatus;\r
   )\r
 {\r
   SHELL_STATUS        ShellStatus;\r
+  LIST_ENTRY          *Package;\r
+  CHAR16              *ProblemParam;\r
+  EFI_STATUS          Status;\r
 \r
   gInReconnect = TRUE;\r
 \r
   gInReconnect = TRUE;\r
+  ShellStatus = SHELL_SUCCESS;\r
+  \r
+  //\r
+  // initialize the shell lib (we must be in non-auto-init...)\r
+  //\r
+  Status = ShellInitialize();\r
+  ASSERT_EFI_ERROR(Status);\r
 \r
 \r
-  ShellStatus = ShellCommandRunDisconnect(ImageHandle, SystemTable);\r
-  if (ShellStatus == SHELL_SUCCESS) {\r
-    ShellStatus = ShellCommandRunConnect(ImageHandle, SystemTable);\r
-  }\r
+  Status = CommandInit();\r
+  ASSERT_EFI_ERROR(Status);\r
+\r
+  //\r
+  // parse the command line\r
+  //\r
+  Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
+  if (EFI_ERROR(Status)) {\r
+    if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
+      FreePool(ProblemParam);\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+    } else {\r
+      ASSERT(FALSE);\r
+    }\r
+  } else {\r
+    ShellStatus = ShellCommandRunDisconnect(ImageHandle, SystemTable);\r
+    if (ShellStatus == SHELL_SUCCESS) {\r
+      if (ShellCommandLineGetFlag(Package, L"-r")) {\r
+        ConnectAllConsoles();\r
+      }\r
+      ShellStatus = ShellCommandRunConnect(ImageHandle, SystemTable);\r
+    }\r
+  }  \r
 \r
   gInReconnect = FALSE;\r
 \r
   return (ShellStatus);\r
 }\r
 \r
   gInReconnect = FALSE;\r
 \r
   return (ShellStatus);\r
 }\r
+\r
index 1b8e56822db17808d4ca7852eff6e8a527eb4e9b..c65d0ed69597b38a1f91c2f5e51706234b5cf8c4 100644 (file)
@@ -207,5 +207,20 @@ ShellCommandRunUnload (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   );\r
 \r
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   );\r
 \r
+/**\r
+  Do a connect from an EFI variable via it's key name.\r
+\r
+  @param[in] Key      The name of the EFI Variable.\r
+\r
+  @retval EFI_SUCCESS   The operation was successful.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ShellConnectFromDevPaths (\r
+  IN CONST CHAR16 *Key\r
+  );\r
+\r
+\r
+\r
 #endif\r
 \r
 #endif\r
 \r