]> git.proxmox.com Git - mirror_edk2.git/commitdiff
connect - add comments and add input verification
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Mar 2011 21:13:43 +0000 (21:13 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Mar 2011 21:13:43 +0000 (21:13 +0000)
devices - add comments and add input verification
devtree - add comments and add input verification
dh - add comments, add input verification, add support for "-d"
disconnect - add comments and add input verification
drivers - add comments
drvcfg - add comment
drvdiag - add comments, add input verification, and fix language use
openinfo - add comments and add input verification
reconnect - add comment
unload - add input verification.

main library files: add comments, #define protection, and more output to the user.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11434 6f19259b-4bc3-4df7-8a09-765794883524

14 files changed:
ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c
ShellPkg/Library/UefiShellDriver1CommandsLib/DevTree.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
ShellPkg/Library/UefiShellDriver1CommandsLib/DrvCfg.c
ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c
ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Reconnect.c
ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.c
ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c

index 47818f7d8858e3ecc88b5d93ff8ef809443fffc8..7073c44260ad293b5674e3ceca6a70c8fa9d52a3 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for connect shell Driver1 function.\r
 \r
 /** @file\r
   Main file for connect shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
 #include "UefiShellDriver1CommandsLib.h"\r
 \r
 /**\r
 #include "UefiShellDriver1CommandsLib.h"\r
 \r
 /**\r
+  Connect controller(s) and driver(s).\r
+\r
+  @param[in] ControllerHandle     The handle to the controller.  Should have driver binding on it.\r
+  @param[in] DriverHandle         The handle to the driver.  Should have driver binding.\r
+  @param[in] Recursive            TRUE to connect recursively, FALSE otherwise.\r
+  @param[in] Output               TRUE to have info on the screen, FALSE otherwise.\r
+  @param[in] AlwaysOutput         Override Output for errors.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
@@ -42,7 +51,7 @@ ConnectControllers (
   if (DriverHandle == NULL) {\r
     DriverHandleList = NULL;\r
   } else {\r
   if (DriverHandle == NULL) {\r
     DriverHandleList = NULL;\r
   } else {\r
-    DriverHandleList = AllocatePool(2*sizeof(EFI_HANDLE));\r
+    DriverHandleList = AllocateZeroPool(2*sizeof(EFI_HANDLE));\r
     if (DriverHandleList == NULL) {\r
       return (EFI_OUT_OF_RESOURCES);\r
     }\r
     if (DriverHandleList == NULL) {\r
       return (EFI_OUT_OF_RESOURCES);\r
     }\r
@@ -90,6 +99,13 @@ ConnectControllers (
   return (Status2);\r
 }\r
 \r
   return (Status2);\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
 ConnectFromDevPaths (\r
 EFI_STATUS\r
 EFIAPI\r
 ConnectFromDevPaths (\r
@@ -110,7 +126,7 @@ ConnectFromDevPaths (
   //\r
   Status = gRT->GetVariable((CHAR16*)Key, (EFI_GUID*)&gEfiGlobalVariableGuid, NULL, &Length, DevPath);\r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
   //\r
   Status = gRT->GetVariable((CHAR16*)Key, (EFI_GUID*)&gEfiGlobalVariableGuid, NULL, &Length, DevPath);\r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    DevPath = AllocatePool(Length);\r
+    DevPath = AllocateZeroPool(Length);\r
     Status = gRT->GetVariable((CHAR16*)Key, (EFI_GUID*)&gEfiGlobalVariableGuid, NULL, &Length, DevPath);\r
   }\r
 \r
     Status = gRT->GetVariable((CHAR16*)Key, (EFI_GUID*)&gEfiGlobalVariableGuid, NULL, &Length, DevPath);\r
   }\r
 \r
@@ -150,32 +166,27 @@ ConnectFromDevPaths (
   return (Status);\r
 }\r
 \r
   return (Status);\r
 }\r
 \r
+/**\r
+  Convert the handle identifiers from strings and then connect them.\r
+\r
+  One of them should have driver binding and either can be NULL.\r
+\r
+  @param[in] Handle1            The first handle.\r
+  @param[in] Handle2            The second handle.\r
+  @param[in] Recursive          TRUE to do connect recursively. FALSE otherwise.\r
+  @param[in] Output             TRUE to have output to screen. FALSE otherwise.\r
+\r
+  @retval EFI_SUCCESS           The operation was successful.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 ConvertAndConnectControllers (\r
 EFI_STATUS\r
 EFIAPI\r
 ConvertAndConnectControllers (\r
-  IN CONST CHAR16   *StringHandle1 OPTIONAL,\r
-  IN CONST CHAR16   *StringHandle2 OPTIONAL,\r
+  IN EFI_HANDLE     *Handle1 OPTIONAL,\r
+  IN EFI_HANDLE     *Handle2 OPTIONAL,\r
   IN CONST BOOLEAN  Recursive,\r
   IN CONST BOOLEAN  Output\r
   )\r
 {\r
   IN CONST BOOLEAN  Recursive,\r
   IN CONST BOOLEAN  Output\r
   )\r
 {\r
-  EFI_HANDLE Handle1;\r
-  EFI_HANDLE Handle2;\r
-\r
-  //\r
-  // Convert the command line parameters to HANDLES.  They must be in HEX according to spec.\r
-  //\r
-  if (StringHandle1 != NULL) {\r
-    Handle1 = ConvertHandleIndexToHandle(StrHexToUintn(StringHandle1));\r
-  } else {\r
-    Handle1 = NULL;\r
-  }\r
-  if (StringHandle2 != NULL) {\r
-    Handle2 = ConvertHandleIndexToHandle(StrHexToUintn(StringHandle2));\r
-  } else {\r
-    Handle2 = NULL;\r
-  }\r
-\r
   //\r
   // if only one is NULL verify it's the proper one...\r
   //\r
   //\r
   // if only one is NULL verify it's the proper one...\r
   //\r
@@ -206,7 +217,7 @@ ConvertAndConnectControllers (
     }\r
   }\r
 \r
     }\r
   }\r
 \r
-  return (ConnectControllers(Handle1, Handle2, Recursive, Output, FALSE));\r
+  return (ConnectControllers(Handle1, Handle2, Recursive, Output, (BOOLEAN)(Handle2 != NULL && Handle1 != NULL)));\r
 }\r
 \r
 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
 }\r
 \r
 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
@@ -235,6 +246,9 @@ ShellCommandRunConnect (
   CONST CHAR16        *Param1;\r
   CONST CHAR16        *Param2;\r
   UINTN               Count;\r
   CONST CHAR16        *Param1;\r
   CONST CHAR16        *Param2;\r
   UINTN               Count;\r
+  EFI_HANDLE          Handle1;\r
+  EFI_HANDLE          Handle2;\r
+  UINT64              Intermediate;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
@@ -310,19 +324,36 @@ ShellCommandRunConnect (
       //\r
       // 0, 1, or 2 specific handles and possibly recursive\r
       //\r
       //\r
       // 0, 1, or 2 specific handles and possibly recursive\r
       //\r
-      Param1 = ShellCommandLineGetRawValue(Package, 1);\r
-      Param2 = ShellCommandLineGetRawValue(Package, 2);\r
-      Count  = ShellCommandLineGetCount(Package);\r
-      if (Param1 != NULL && ConvertHandleIndexToHandle(StrHexToUintn(Param1)) == NULL){\r
+      Param1  = ShellCommandLineGetRawValue(Package, 1);\r
+      Param2  = ShellCommandLineGetRawValue(Package, 2);\r
+      Count   = ShellCommandLineGetCount(Package);\r
+\r
+      Status  = ShellConvertStringToUint64(Param1, &Intermediate, TRUE, FALSE);\r
+      Handle1 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
+      if (EFI_ERROR(Status)) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
-      } else if (Param2 != NULL && ConvertHandleIndexToHandle(StrHexToUintn(Param2)) == NULL) {\r
+      }\r
+      Status  = ShellConvertStringToUint64(Param2, &Intermediate, TRUE, FALSE);\r
+      Handle2 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
+      if (EFI_ERROR(Status)) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param2);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param2);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
-      } else {\r
-        Status = ConvertAndConnectControllers(Param1, Param2, ShellCommandLineGetFlag(Package, L"-r"), (BOOLEAN)(Count!=0));\r
-        if (EFI_ERROR(Status)) {\r
-          ShellStatus = SHELL_DEVICE_ERROR;\r
+      }\r
+      \r
+      if (ShellStatus == SHELL_SUCCESS) {\r
+        if (Param1 != NULL && Handle1 == NULL){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        } else if (Param2 != NULL && Handle2 == NULL) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param2);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        } else {\r
+          Status = ConvertAndConnectControllers(Handle1, Handle2, ShellCommandLineGetFlag(Package, L"-r"), (BOOLEAN)(Count!=0));\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CONNECT_NONE), gShellDriver1HiiHandle);\r
+            ShellStatus = SHELL_DEVICE_ERROR;\r
+          }\r
         }\r
       }\r
     }\r
         }\r
       }\r
     }\r
index 8a5c79b8cbfa089f27a86353fa914bbca5bc1973..a66bdec06b20c5de3b4dd9b2e4b1f61190bec5f4 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for DevTree shell Driver1 function.\r
 \r
 /** @file\r
   Main file for DevTree shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -20,6 +20,18 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Display a tree starting from this handle.\r
+\r
+  @param[in] TheHandle      The handle to start with.\r
+  @param[in] Lang           Optionally, a UEFI defined language code.\r
+  @param[in] UseDevPaths    TRUE to display info from DevPath as identifiers.\r
+                            FALSE will use component name protocol instead.\r
+  @param[in] IndentCharCount   How many characters to indent (allows for recursion).\r
+  @param[in] HiiString      The string from HII to use for output.\r
+\r
+  @retval SHELL_SUCCESS     The operation was successful.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDevTreeForHandle(\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDevTreeForHandle(\r
@@ -156,6 +168,7 @@ ShellCommandRunDevTree (
   UINTN               LoopVar;\r
   EFI_HANDLE          TheHandle;\r
   BOOLEAN             FlagD;\r
   UINTN               LoopVar;\r
   EFI_HANDLE          TheHandle;\r
   BOOLEAN             FlagD;\r
+  UINT64              Intermediate;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Status              = EFI_SUCCESS;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Status              = EFI_SUCCESS;\r
@@ -216,11 +229,12 @@ ShellCommandRunDevTree (
         ShellStatus = DoDevTreeForHandle(TheHandle, Language, FlagD, 0, HiiString);\r
       }\r
     } else {\r
         ShellStatus = DoDevTreeForHandle(TheHandle, Language, FlagD, 0, HiiString);\r
       }\r
     } else {\r
-      if (!ShellIsHexOrDecimalNumber(Lang, TRUE, FALSE) || ConvertHandleIndexToHandle(StrHexToUintn(Lang)) == NULL) {\r
+      Status = ShellConvertStringToUint64(Lang, &Intermediate, TRUE, FALSE);\r
+      if (EFI_ERROR(Status) || ConvertHandleIndexToHandle((UINTN)Intermediate) == NULL) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Lang);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Lang);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
-        ShellStatus = DoDevTreeForHandle(ConvertHandleIndexToHandle(StrHexToUintn(Lang)), Language, FlagD, 0, HiiString);\r
+        ShellStatus = DoDevTreeForHandle(ConvertHandleIndexToHandle((UINTN)Intermediate), Language, FlagD, 0, HiiString);\r
       }\r
     }\r
 \r
       }\r
     }\r
 \r
index 1af17738495e37902bc96213ddd09e2f56144b0e..658e7df2196142542c56fd40e13386cb201687a8 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for devices shell Driver1 function.\r
 \r
 /** @file\r
   Main file for devices shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
+/**\r
+  Get lots of info about a device from its handle.\r
+\r
+  @param[in] TheHandle      The device handle to get info on.\r
+  @param[in,out] Type       On successful return R, B, or D (root, bus, or \r
+                            device) will be placed in this buffer.\r
+  @param[in,out] Cfg        On successful return this buffer will be \r
+                            TRUE if the handle has configuration, FALSE\r
+                            otherwise.\r
+  @param[in,out] Diag       On successful return this buffer will be \r
+                            TRUE if the handle has disgnostics, FALSE\r
+                            otherwise.\r
+  @param[in,out] Parents    On successful return this buffer will be \r
+                            contain the number of parent handles.\r
+  @param[in,out] Devices    On successful return this buffer will be \r
+                            contain the number of devices controlled.\r
+  @param[in,out] Children   On successful return this buffer will be \r
+                            contain the number of child handles.\r
+  @param[out] Name          The pointer to a buffer that will be allocated\r
+                            and contain the string name of the handle.\r
+                            The caller must free this memory.\r
+  @param[in] Language       The language code as defined by the UEFI spec.\r
+\r
+  @retval EFI_SUCCESS           The info is there.\r
+  @retval EFI_INVALID_PARAMETER A parameter was invalid.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 GetDeviceHandleInfo (\r
   IN EFI_HANDLE   TheHandle,\r
 EFI_STATUS\r
 EFIAPI\r
 GetDeviceHandleInfo (\r
   IN EFI_HANDLE   TheHandle,\r
-  IN CHAR16       *Type,\r
-  IN BOOLEAN      *Cfg,\r
-  IN BOOLEAN      *Diag,\r
-  IN UINTN        *Parents,\r
-  IN UINTN        *Devices,\r
-  IN UINTN        *Children,\r
+  IN OUT CHAR16   *Type,\r
+  IN OUT BOOLEAN  *Cfg,\r
+  IN OUT BOOLEAN  *Diag,\r
+  IN OUT UINTN    *Parents,\r
+  IN OUT UINTN    *Devices,\r
+  IN OUT UINTN    *Children,\r
   OUT CHAR16      **Name,\r
   IN CONST CHAR8  *Language\r
   )\r
   OUT CHAR16      **Name,\r
   IN CONST CHAR8  *Language\r
   )\r
@@ -32,6 +58,8 @@ GetDeviceHandleInfo (
   EFI_HANDLE    *HandleBuffer;\r
   UINTN         Count;\r
 \r
   EFI_HANDLE    *HandleBuffer;\r
   UINTN         Count;\r
 \r
+  UINTN         TestHandle = 0x43;\r
+\r
   if (TheHandle == NULL \r
     || Type == NULL\r
     || Cfg == NULL\r
   if (TheHandle == NULL \r
     || Type == NULL\r
     || Cfg == NULL\r
@@ -43,6 +71,10 @@ GetDeviceHandleInfo (
     return (EFI_INVALID_PARAMETER);\r
   }\r
 \r
     return (EFI_INVALID_PARAMETER);\r
   }\r
 \r
+  if (ConvertHandleToHandleIndex(TheHandle) == TestHandle) {\r
+    TestHandle = TestHandle;\r
+  }\r
+\r
   *Cfg          = FALSE;\r
   *Diag         = FALSE;\r
   *Children     = 0;\r
   *Cfg          = FALSE;\r
   *Diag         = FALSE;\r
   *Children     = 0;\r
@@ -56,7 +88,7 @@ GetDeviceHandleInfo (
   gEfiShellProtocol->GetDeviceName(TheHandle, EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, Name);\r
 \r
   Status = ParseHandleDatabaseForChildControllers(TheHandle, Children, NULL);\r
   gEfiShellProtocol->GetDeviceName(TheHandle, EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, Name);\r
 \r
   Status = ParseHandleDatabaseForChildControllers(TheHandle, Children, NULL);\r
-  if (!EFI_ERROR(Status)) {\r
+//  if (!EFI_ERROR(Status)) {\r
     Status = PARSE_HANDLE_DATABASE_PARENTS(TheHandle, Parents, NULL);\r
     if (/*!EFI_ERROR(Status) && */Parents != NULL && Children != NULL) {\r
       if (*Parents == 0) {\r
     Status = PARSE_HANDLE_DATABASE_PARENTS(TheHandle, Parents, NULL);\r
     if (/*!EFI_ERROR(Status) && */Parents != NULL && Children != NULL) {\r
       if (*Parents == 0) {\r
@@ -67,7 +99,7 @@ GetDeviceHandleInfo (
         *Type = L'D';\r
       }\r
     }\r
         *Type = L'D';\r
       }\r
     }\r
-  }\r
+//  }\r
   Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS(TheHandle, Devices, &HandleBuffer);\r
   if (!EFI_ERROR(Status) && Devices != NULL && HandleBuffer != NULL) {\r
     for (Count = 0 ; Count < *Devices ; Count++) {\r
   Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS(TheHandle, Devices, &HandleBuffer);\r
   if (!EFI_ERROR(Status) && Devices != NULL && HandleBuffer != NULL) {\r
     for (Count = 0 ; Count < *Devices ; Count++) {\r
@@ -195,7 +227,7 @@ ShellCommandRunDevices (
         //\r
         Name = NULL;\r
         Status = GetDeviceHandleInfo(*HandleListWalker, &Type, &Cfg, &Diag, &Parents, &Devices, &Children, &Name, Language);\r
         //\r
         Name = NULL;\r
         Status = GetDeviceHandleInfo(*HandleListWalker, &Type, &Cfg, &Diag, &Parents, &Devices, &Children, &Name, Language);\r
-        if (Parents != 0 || Devices != 0 || Children != 0) {\r
+        if (Name != NULL && (Parents != 0 || Devices != 0 || Children != 0)) {\r
           ShellPrintHiiEx(\r
             -1,\r
             -1,\r
           ShellPrintHiiEx(\r
             -1,\r
             -1,\r
index 3d3f1b19f461ec48e71a7468ce8b88bee8a555f7..852ba1d1e1a0e2e5950b670466d534af59a341e0 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Dh shell Driver1 function.\r
 \r
 /** @file\r
   Main file for Dh shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -40,6 +40,88 @@ STATIC CONST EFI_GUID *UefiDriverModelProtocolsGuidArray[] = {
   NULL\r
 };\r
 \r
   NULL\r
 };\r
 \r
+/**\r
+  Get the name of a driver by it's handle.\r
+\r
+  If a name is found the memory must be callee freed.\r
+\r
+  @param[in] TheHandle    The driver's handle.\r
+  @param[in] Language     The language to use.\r
+  @param[in] NameFound    Upon a successful return the name found.\r
+\r
+  @retval EFI_SUCCESS     The name was found.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetDriverName (\r
+  IN EFI_HANDLE   TheHandle,\r
+  IN CONST CHAR8  *Language,\r
+  IN CHAR16       **NameFound\r
+  )\r
+{\r
+  CHAR8                             *Lang;\r
+  CHAR8                             *TempChar;\r
+  EFI_STATUS                        Status;\r
+  EFI_COMPONENT_NAME2_PROTOCOL      *CompName2;\r
+  CHAR16                            *NameToReturn;\r
+  //\r
+  // Go through those handles until we get one that passes for GetComponentName\r
+  //\r
+  Status = gBS->OpenProtocol(\r
+    TheHandle,\r
+    &gEfiComponentName2ProtocolGuid,\r
+    (VOID**)&CompName2,\r
+    gImageHandle,\r
+    NULL,\r
+    EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+  if (EFI_ERROR(Status)) {\r
+    Status = gBS->OpenProtocol(\r
+      TheHandle,\r
+      &gEfiComponentNameProtocolGuid,\r
+      (VOID**)&CompName2,\r
+      gImageHandle,\r
+      NULL,\r
+      EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+  }\r
+\r
+  if (EFI_ERROR(Status)) {\r
+    return (EFI_NOT_FOUND);\r
+  }\r
+  if (Language == NULL) {\r
+    Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));\r
+    if (Lang == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
+    AsciiStrCpy(Lang, CompName2->SupportedLanguages);\r
+    TempChar = AsciiStrStr(Lang, ";");\r
+    if (TempChar != NULL){\r
+      *TempChar = CHAR_NULL;\r
+    }\r
+  } else {\r
+    Lang = AllocateZeroPool(AsciiStrSize(Language));\r
+    if (Lang == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
+    AsciiStrCpy(Lang, Language);\r
+  }\r
+  Status = CompName2->GetDriverName(CompName2, Lang, &NameToReturn);\r
+  FreePool(Lang);\r
+\r
+  if (!EFI_ERROR(Status) && NameToReturn != NULL) {\r
+    *NameFound = NULL;\r
+    StrnCatGrow(NameFound, NULL, NameToReturn, 0);\r
+  }\r
+  return (Status);\r
+}\r
+\r
+/**\r
+  Discover if a protocol guid is one of the UEFI Driver Model Protocols.\r
+\r
+  @param[in] Guid   The guid to test.\r
+\r
+  @retval TRUE      The guid does represent a driver model protocol.\r
+  @retval FALSE     The guid does not represent a driver model protocol.\r
+**/\r
 BOOLEAN\r
 EFIAPI\r
 IsDriverProt (\r
 BOOLEAN\r
 EFIAPI\r
 IsDriverProt (\r
@@ -61,13 +143,24 @@ IsDriverProt (
   return (GuidFound);\r
 }\r
 \r
   return (GuidFound);\r
 }\r
 \r
+/**\r
+  Get information for a handle.\r
+\r
+  @param[in] TheHandle        The handles to show info on.\r
+  @param[in] Language         Language string per UEFI specification.\r
+  @param[in] Seperator        Separator string between information blocks.\r
+  @param[in] Verbose          TRUE for extra info, FALSE otherwise.\r
+  @param[in] ExtraInfo        TRUE for extra info, FALSE otherwise.\r
+\r
+  @retval SHELL_SUCCESS           The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
+**/\r
 CHAR16*\r
 EFIAPI\r
 GetProtocolInfoString(\r
   IN CONST EFI_HANDLE TheHandle,\r
   IN CONST CHAR8      *Language,\r
   IN CONST CHAR16     *Seperator,\r
 CHAR16*\r
 EFIAPI\r
 GetProtocolInfoString(\r
   IN CONST EFI_HANDLE TheHandle,\r
   IN CONST CHAR8      *Language,\r
   IN CONST CHAR16     *Seperator,\r
-  IN CONST BOOLEAN    DriverInfo,\r
   IN CONST BOOLEAN    Verbose,\r
   IN CONST BOOLEAN    ExtraInfo\r
   )\r
   IN CONST BOOLEAN    Verbose,\r
   IN CONST BOOLEAN    ExtraInfo\r
   )\r
@@ -81,6 +174,8 @@ GetProtocolInfoString(
   CHAR16                    *Temp;\r
 \r
   ProtocolGuidArray = NULL;\r
   CHAR16                    *Temp;\r
 \r
   ProtocolGuidArray = NULL;\r
+  RetVal            = NULL;\r
+  Size              = 0;\r
 \r
   Status = gBS->ProtocolsPerHandle (\r
                 TheHandle,\r
 \r
   Status = gBS->ProtocolsPerHandle (\r
                 TheHandle,\r
@@ -88,8 +183,6 @@ GetProtocolInfoString(
                 &ArrayCount\r
                );\r
   if (!EFI_ERROR (Status)) {\r
                 &ArrayCount\r
                );\r
   if (!EFI_ERROR (Status)) {\r
-    RetVal = NULL;\r
-    Size   = 0;\r
     for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {\r
       Temp = GetStringNameFromGuid(ProtocolGuidArray[ProtocolIndex], Language);\r
       if (Temp != NULL) {\r
     for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {\r
       Temp = GetStringNameFromGuid(ProtocolGuidArray[ProtocolIndex], Language);\r
       if (Temp != NULL) {\r
@@ -118,18 +211,448 @@ GetProtocolInfoString(
         }\r
       }\r
     }\r
         }\r
       }\r
     }\r
-  } else {\r
-    return (NULL);\r
   }\r
   }\r
+  \r
+  SHELL_FREE_NON_NULL(ProtocolGuidArray);\r
 \r
 \r
-  if (ProtocolGuidArray != NULL) {\r
-    FreePool(ProtocolGuidArray);\r
+  if (RetVal == NULL) {\r
+    return (NULL);\r
   }\r
   }\r
+\r
   ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));\r
   StrnCatGrow(&RetVal, &Size, Seperator, 0);\r
   return (RetVal);\r
 }\r
 \r
   ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));\r
   StrnCatGrow(&RetVal, &Size, Seperator, 0);\r
   return (RetVal);\r
 }\r
 \r
+/**\r
+  Gets the name of the loaded image.\r
+\r
+  @param[in] TheHandle    The handle of the driver to get info on.\r
+  @param[out] Name        The pointer to the pointer.  Valid upon a successful return.\r
+\r
+  @retval EFI_SUCCESS     The operation was successful.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetDriverImageName (\r
+  IN EFI_HANDLE   TheHandle,\r
+  OUT CHAR16      **Name\r
+  )\r
+{\r
+  // get loaded image and devicepathtotext on image->Filepath\r
+  EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
+  EFI_STATUS                Status;\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
+\r
+  if (TheHandle == NULL || Name == NULL) {\r
+    return (EFI_INVALID_PARAMETER);\r
+  }\r
+\r
+  Status = gBS->OpenProtocol (\r
+                TheHandle,\r
+                &gEfiLoadedImageProtocolGuid,\r
+                (VOID **) &LoadedImage,\r
+                gImageHandle,\r
+                NULL,\r
+                EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+               );\r
+  if (EFI_ERROR(Status)) {\r
+    return (Status);\r
+  }\r
+  DevicePath = LoadedImage->FilePath;\r
+  *Name = gDevPathToText->ConvertDevicePathToText(DevicePath, TRUE, TRUE);\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Display driver model information for a given handle.\r
+  \r
+  @param[in] Handle     The handle to display info on.\r
+  @param[in] BestName   Use the best name?\r
+  @param[in] Language   The language to output in.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+DisplayDriverModelHandle (\r
+  IN EFI_HANDLE  Handle,\r
+  IN BOOLEAN     BestName,\r
+  IN CONST CHAR8 *Language OPTIONAL\r
+  )\r
+{\r
+  EFI_STATUS                  Status;\r
+  BOOLEAN                     ConfigurationStatus;\r
+  BOOLEAN                     DiagnosticsStatus;\r
+  UINTN                       DriverBindingHandleCount;\r
+  EFI_HANDLE                  *DriverBindingHandleBuffer;\r
+  UINTN                       ParentControllerHandleCount;\r
+  EFI_HANDLE                  *ParentControllerHandleBuffer;\r
+  UINTN                       ChildControllerHandleCount;\r
+  EFI_HANDLE                  *ChildControllerHandleBuffer;\r
+  CHAR16                      *TempStringPointer;\r
+  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;\r
+  UINTN                       Index;\r
+  CHAR16                      *DriverName;\r
+  EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;\r
+  UINTN                       NumberOfChildren;\r
+  UINTN                       HandleIndex;\r
+  UINTN                       ControllerHandleCount;\r
+  EFI_HANDLE                  *ControllerHandleBuffer;\r
+  UINTN                       ChildIndex;\r
+  BOOLEAN                     Image;\r
+\r
+  //\r
+  // See if Handle is a device handle and display its details.\r
+  //\r
+  DriverBindingHandleBuffer = NULL;\r
+  Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (\r
+            Handle,\r
+            &DriverBindingHandleCount,\r
+            &DriverBindingHandleBuffer\r
+            );\r
+\r
+  ParentControllerHandleBuffer = NULL;\r
+  Status = PARSE_HANDLE_DATABASE_PARENTS (\r
+            Handle,\r
+            &ParentControllerHandleCount,\r
+            &ParentControllerHandleBuffer\r
+            );\r
+\r
+  ChildControllerHandleBuffer = NULL;\r
+  Status = ParseHandleDatabaseForChildControllers (\r
+            Handle,\r
+            &ChildControllerHandleCount,\r
+            &ChildControllerHandleBuffer\r
+            );\r
+\r
+  DiagnosticsStatus = FALSE;\r
+  ConfigurationStatus = FALSE;\r
+\r
+  if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverConfigurationProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
+    ConfigurationStatus = TRUE;\r
+  }\r
+  if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverConfiguration2ProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
+    ConfigurationStatus = TRUE;\r
+  }\r
+  if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverDiagnosticsProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
+    DiagnosticsStatus = TRUE;\r
+  }\r
+  if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverDiagnostics2ProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
+    DiagnosticsStatus = TRUE;\r
+  }\r
+\r
+  Status = EFI_SUCCESS;\r
+\r
+  if (DriverBindingHandleCount > 0 || ParentControllerHandleCount > 0 || ChildControllerHandleCount > 0) {\r
+\r
+\r
+\r
+    DevicePath          = NULL;\r
+    TempStringPointer   = NULL;\r
+    Status              = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID**)&DevicePath);\r
+\r
+    Status = gEfiShellProtocol->GetDeviceName(Handle, EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_DRIVER1), gShellDriver1HiiHandle, TempStringPointer!=NULL?TempStringPointer:L"<Unknown>");\r
+    SHELL_FREE_NON_NULL(TempStringPointer);\r
+  \r
+    TempStringPointer = gDevPathToText->ConvertDevicePathToText(DevicePath, TRUE, FALSE);\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_DH_OUTPUT_DRIVER2), \r
+      gShellDriver1HiiHandle, \r
+      TempStringPointer!=NULL?TempStringPointer:L"<None>",\r
+      ParentControllerHandleCount == 0?L"ROOT":(ChildControllerHandleCount > 0)?L"BUS":L"DEVICE",\r
+      ConfigurationStatus?L"YES":L"NO",\r
+      DiagnosticsStatus?L"YES":L"NO"\r
+      );\r
+\r
+    SHELL_FREE_NON_NULL(TempStringPointer);\r
+\r
+    if (DriverBindingHandleCount == 0) {\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER3), \r
+        gShellDriver1HiiHandle, \r
+        L"<None>"\r
+        );\r
+    } else {\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER3), \r
+        gShellDriver1HiiHandle, \r
+        L""\r
+        );\r
+      for (Index = 0; Index < DriverBindingHandleCount; Index++) {\r
+        Image = FALSE;\r
+        Status = GetDriverName (\r
+                  DriverBindingHandleBuffer[Index],\r
+                  Language,\r
+                  &DriverName\r
+                  );\r
+        if (DriverName == NULL) {\r
+          Status = GetDriverImageName (\r
+                    DriverBindingHandleBuffer[Index],\r
+                    &DriverName\r
+                    );\r
+        }\r
+\r
+        if (Image) {\r
+          ShellPrintHiiEx(\r
+            -1, \r
+            -1, \r
+            NULL, \r
+            STRING_TOKEN (STR_DH_OUTPUT_DRIVER4A),\r
+            gShellDriver1HiiHandle,\r
+            ConvertHandleToHandleIndex (DriverBindingHandleBuffer[Index]),\r
+            DriverName!=NULL?DriverName:L"<Unknown>"\r
+            );\r
+        } else {\r
+          ShellPrintHiiEx(\r
+            -1, \r
+            -1, \r
+            NULL, \r
+            STRING_TOKEN (STR_DH_OUTPUT_DRIVER4B),\r
+            gShellDriver1HiiHandle,\r
+            ConvertHandleToHandleIndex (DriverBindingHandleBuffer[Index]),\r
+            DriverName!=NULL?DriverName:L"<Unknown>"\r
+            );\r
+        }\r
+        SHELL_FREE_NON_NULL(DriverName);\r
+      }\r
+    }\r
+\r
+    if (ParentControllerHandleCount == 0) {\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER5), \r
+        gShellDriver1HiiHandle, \r
+        L"<None>"\r
+        );\r
+    } else {\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER5), \r
+        gShellDriver1HiiHandle, \r
+        L""\r
+        );\r
+      for (Index = 0; Index < ParentControllerHandleCount; Index++) {\r
+        Status = gEfiShellProtocol->GetDeviceName(ParentControllerHandleBuffer[Index], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);\r
+        ShellPrintHiiEx(\r
+          -1, \r
+          -1, \r
+          NULL, \r
+          STRING_TOKEN (STR_DH_OUTPUT_DRIVER5B),\r
+          gShellDriver1HiiHandle,\r
+          ConvertHandleToHandleIndex (ParentControllerHandleBuffer[Index]),\r
+          TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"\r
+          );\r
+        SHELL_FREE_NON_NULL(TempStringPointer);\r
+      }\r
+    }\r
+\r
+    if (ChildControllerHandleCount == 0) {\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER6), \r
+        gShellDriver1HiiHandle, \r
+        L"<None>"\r
+        );\r
+    } else {\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER6), \r
+        gShellDriver1HiiHandle, \r
+        L""\r
+        );\r
+      for (Index = 0; Index < ChildControllerHandleCount; Index++) {\r
+        Status = gEfiShellProtocol->GetDeviceName(ChildControllerHandleBuffer[Index], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);\r
+        ShellPrintHiiEx(\r
+          -1, \r
+          -1, \r
+          NULL, \r
+          STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),\r
+          gShellDriver1HiiHandle,\r
+          ConvertHandleToHandleIndex (ChildControllerHandleBuffer[Index]),\r
+          TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"\r
+          );\r
+        SHELL_FREE_NON_NULL(TempStringPointer);\r
+      }\r
+    }\r
+  }\r
+\r
+  SHELL_FREE_NON_NULL(DriverBindingHandleBuffer);\r
+\r
+  SHELL_FREE_NON_NULL(ParentControllerHandleBuffer);\r
+\r
+  SHELL_FREE_NON_NULL(ChildControllerHandleBuffer);\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+  //\r
+  // See if Handle is a driver binding handle and display its details.\r
+  //\r
+  Status = gBS->OpenProtocol (\r
+                Handle,\r
+                &gEfiDriverBindingProtocolGuid,\r
+                (VOID **) &DriverBinding,\r
+                NULL,\r
+                NULL,\r
+                EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                );\r
+  if (EFI_ERROR (Status)) {\r
+    return EFI_SUCCESS;\r
+  }\r
+\r
+  NumberOfChildren        = 0;\r
+  ControllerHandleBuffer  = NULL;\r
+  Status = PARSE_HANDLE_DATABASE_DEVICES (\r
+            Handle,\r
+            &ControllerHandleCount,\r
+            &ControllerHandleBuffer\r
+            );\r
+  if (ControllerHandleCount > 0) {\r
+    for (HandleIndex = 0; HandleIndex < ControllerHandleCount; HandleIndex++) {\r
+      Status = PARSE_HANDLE_DATABASE_MANAGED_CHILDREN (\r
+                Handle,\r
+                ControllerHandleBuffer[HandleIndex],\r
+                &ChildControllerHandleCount,\r
+                NULL\r
+                );\r
+      NumberOfChildren += ChildControllerHandleCount;\r
+    }\r
+  }\r
+\r
+  Status = GetDriverName (Handle, Language, &DriverName);\r
+\r
+  ShellPrintHiiEx(\r
+    -1, \r
+    -1, \r
+    NULL, \r
+    STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),\r
+    gShellDriver1HiiHandle,\r
+    ConvertHandleToHandleIndex(Handle),\r
+    DriverName!=NULL?DriverName:L"<Unknown>"\r
+    );\r
+  SHELL_FREE_NON_NULL(DriverName);\r
+  DriverName = NULL;\r
+  Status = GetDriverImageName (\r
+            Handle,\r
+            &DriverName\r
+            );\r
+  ShellPrintHiiEx(\r
+    -1, \r
+    -1, \r
+    NULL, \r
+    STRING_TOKEN (STR_DH_OUTPUT_DRIVER7B),\r
+    gShellDriver1HiiHandle,\r
+    DriverName!=NULL?DriverName:L"<Unknown>"\r
+    );\r
+  SHELL_FREE_NON_NULL(DriverName);\r
+\r
+  ShellPrintHiiEx(\r
+    -1, \r
+    -1, \r
+    NULL, \r
+    STRING_TOKEN (STR_DH_OUTPUT_DRIVER8), \r
+    gShellDriver1HiiHandle, \r
+    DriverBinding->Version,\r
+    NumberOfChildren > 0?L"Bus":ControllerHandleCount > 0?L"Device":L"<Unknown>",\r
+    ConfigurationStatus?L"YES":L"NO",\r
+    DiagnosticsStatus?L"YES":L"NO"\r
+    );\r
+\r
+  if (ControllerHandleCount == 0) {\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER6), \r
+        gShellDriver1HiiHandle, \r
+        L"None"\r
+        );\r
+  } else {\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_DH_OUTPUT_DRIVER6), \r
+      gShellDriver1HiiHandle, \r
+      L""\r
+      );\r
+    for (HandleIndex = 0; HandleIndex < ControllerHandleCount; HandleIndex++) {\r
+      Status = gEfiShellProtocol->GetDeviceName(ControllerHandleBuffer[HandleIndex], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);\r
+\r
+      ShellPrintHiiEx(\r
+        -1, \r
+        -1, \r
+        NULL, \r
+        STRING_TOKEN (STR_DH_OUTPUT_DRIVER9B),\r
+        gShellDriver1HiiHandle,\r
+        ConvertHandleToHandleIndex(ControllerHandleBuffer[HandleIndex]),\r
+        TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"\r
+        );\r
+      SHELL_FREE_NON_NULL(TempStringPointer);\r
+\r
+      Status = PARSE_HANDLE_DATABASE_MANAGED_CHILDREN (\r
+                Handle,\r
+                ControllerHandleBuffer[HandleIndex],\r
+                &ChildControllerHandleCount,\r
+                &ChildControllerHandleBuffer\r
+                );\r
+      if (!EFI_ERROR (Status)) {\r
+        for (ChildIndex = 0; ChildIndex < ChildControllerHandleCount; ChildIndex++) {\r
+          Status = gEfiShellProtocol->GetDeviceName(ChildControllerHandleBuffer[ChildIndex], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);\r
+\r
+          ShellPrintHiiEx(\r
+            -1, \r
+            -1, \r
+            NULL, \r
+            STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),\r
+            gShellDriver1HiiHandle,\r
+            ConvertHandleToHandleIndex(ChildControllerHandleBuffer[ChildIndex]),\r
+            TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"\r
+            );\r
+          SHELL_FREE_NON_NULL(TempStringPointer);\r
+        }\r
+\r
+        SHELL_FREE_NON_NULL (ChildControllerHandleBuffer);\r
+      }\r
+    }\r
+\r
+    SHELL_FREE_NON_NULL (ControllerHandleBuffer);\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  Display information for a handle.\r
+\r
+  @param[in] TheHandle        The handles to show info on.\r
+  @param[in] Verbose          TRUE for extra info, FALSE otherwise.\r
+  @param[in] Sfo              TRUE to output in standard format output (spec).\r
+  @param[in] Language         Language string per UEFI specification.\r
+  @param[in] DriverInfo       TRUE to show all info about the handle.\r
+  @param[in] Multiple         TRUE indicates more than  will be output,\r
+                              FALSE for a single one.\r
+\r
+  @retval SHELL_SUCCESS           The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhByHandle(\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhByHandle(\r
@@ -151,7 +674,7 @@ DoDhByHandle(
 \r
   if (!Sfo) {\r
     if (Multiple) {\r
 \r
   if (!Sfo) {\r
     if (Multiple) {\r
-      ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L" ", DriverInfo, Verbose, TRUE);\r
+      ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L" ", Verbose, TRUE);\r
       ShellPrintHiiEx(\r
         -1,\r
         -1,\r
       ShellPrintHiiEx(\r
         -1,\r
         -1,\r
@@ -161,7 +684,7 @@ DoDhByHandle(
         ConvertHandleToHandleIndex(TheHandle),\r
         ProtocolInfoString==NULL?L"":ProtocolInfoString);\r
     } else {\r
         ConvertHandleToHandleIndex(TheHandle),\r
         ProtocolInfoString==NULL?L"":ProtocolInfoString);\r
     } else {\r
-      ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L"\r\n", DriverInfo, Verbose, TRUE);\r
+      ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L"\r\n", Verbose, TRUE);\r
       ShellPrintHiiEx(\r
         -1,\r
         -1,\r
       ShellPrintHiiEx(\r
         -1,\r
         -1,\r
@@ -172,9 +695,12 @@ DoDhByHandle(
         TheHandle,\r
         ProtocolInfoString==NULL?L"":ProtocolInfoString);\r
     }\r
         TheHandle,\r
         ProtocolInfoString==NULL?L"":ProtocolInfoString);\r
     }\r
+\r
+    if (DriverInfo) {\r
+      DisplayDriverModelHandle ((EFI_HANDLE)TheHandle, TRUE, Language);\r
+    }\r
   } else {\r
   } else {\r
-//#string STR_DH_OUTPUT_SFO         #language en-US "%s, %s, %s, %H%02x%N, %s, %s\r\n"\r
-      ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L";", DriverInfo, FALSE, FALSE);\r
+      ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L";", FALSE, FALSE);\r
       ShellPrintHiiEx(\r
         -1,\r
         -1,\r
       ShellPrintHiiEx(\r
         -1,\r
         -1,\r
@@ -198,6 +724,17 @@ DoDhByHandle(
   return (ShellStatus);\r
 }\r
 \r
   return (ShellStatus);\r
 }\r
 \r
+/**\r
+  Display information for all handles on a list.\r
+\r
+  @param[in] HandleList       The NULL-terminated list of handles.\r
+  @param[in] Sfo              TRUE to output in standard format output (spec).\r
+  @param[in] Language         Language string per UEFI specification.\r
+  @param[in] DriverInfo       TRUE to show all info about the handle.\r
+\r
+  @retval SHELL_SUCCESS           The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhForHandleList(\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhForHandleList(\r
@@ -225,6 +762,16 @@ DoDhForHandleList(
   return (ShellStatus);\r
 }\r
 \r
   return (ShellStatus);\r
 }\r
 \r
+/**\r
+  Display information for all handles.\r
+\r
+  @param[in] Sfo              TRUE to output in standard format output (spec).\r
+  @param[in] Language         Language string per UEFI specification.\r
+  @param[in] DriverInfo       TRUE to show all info about the handle.\r
+\r
+  @retval SHELL_SUCCESS           The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhForAll(\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhForAll(\r
@@ -249,6 +796,17 @@ DoDhForAll(
   return (ShellStatus);\r
 }\r
 \r
   return (ShellStatus);\r
 }\r
 \r
+/**\r
+  Display information for all handles which have a specific protocol.\r
+\r
+  @param[in] ProtocolName     The pointer to the name of the protocol.\r
+  @param[in] Sfo              TRUE to output in standard format output (spec).\r
+  @param[in] Language         Language string per UEFI specification.\r
+  @param[in] DriverInfo       TRUE to show all info about the handle.\r
+\r
+  @retval SHELL_SUCCESS           The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhByProtocol(\r
 SHELL_STATUS\r
 EFIAPI\r
 DoDhByProtocol(\r
@@ -263,7 +821,9 @@ DoDhByProtocol(
   EFI_HANDLE    *HandleList;\r
   SHELL_STATUS  ShellStatus;\r
 \r
   EFI_HANDLE    *HandleList;\r
   SHELL_STATUS  ShellStatus;\r
 \r
-  ASSERT(ProtocolName != NULL);\r
+  if (ProtocolName == NULL) {\r
+    return (SHELL_INVALID_PARAMETER);\r
+  }\r
 \r
   Status = GetGuidFromStringName(ProtocolName, Language, &Guid);\r
   if (EFI_ERROR(Status)) {\r
 \r
   Status = GetGuidFromStringName(ProtocolName, Language, &Guid);\r
   if (EFI_ERROR(Status)) {\r
@@ -284,6 +844,12 @@ DoDhByProtocol(
   return (ShellStatus);\r
 }\r
 \r
   return (ShellStatus);\r
 }\r
 \r
+/**\r
+  Function for 'dh' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDh (\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDh (\r
@@ -301,6 +867,7 @@ ShellCommandRunDh (
   BOOLEAN             SfoMode;\r
   BOOLEAN             FlagD;\r
   BOOLEAN             Verbose;\r
   BOOLEAN             SfoMode;\r
   BOOLEAN             FlagD;\r
   BOOLEAN             Verbose;\r
+  UINT64              Intermediate;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Status              = EFI_SUCCESS;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Status              = EFI_SUCCESS;\r
@@ -350,11 +917,7 @@ ShellCommandRunDh (
 \r
     SfoMode = ShellCommandLineGetFlag(Package, L"-sfo");\r
     FlagD   = ShellCommandLineGetFlag(Package, L"-d");\r
 \r
     SfoMode = ShellCommandLineGetFlag(Package, L"-sfo");\r
     FlagD   = ShellCommandLineGetFlag(Package, L"-d");\r
-    if (ShellCommandLineGetFlag(Package, L"-v") || ShellCommandLineGetFlag(Package, L"-verbose")) {\r
-      Verbose = TRUE;\r
-    } else {\r
-      Verbose = FALSE;\r
-    }\r
+    Verbose = (BOOLEAN)(ShellCommandLineGetFlag(Package, L"-v") || ShellCommandLineGetFlag(Package, L"-verbose"));\r
 \r
     if (ShellCommandLineGetFlag(Package, L"-p")) {\r
       if (ShellCommandLineGetCount(Package) > 1) {\r
 \r
     if (ShellCommandLineGetFlag(Package, L"-p")) {\r
       if (ShellCommandLineGetCount(Package) > 1) {\r
@@ -386,7 +949,8 @@ ShellCommandRunDh (
           FlagD\r
          );\r
       } else {\r
           FlagD\r
          );\r
       } else {\r
-        if (!ShellIsHexOrDecimalNumber(Temp2, TRUE, FALSE) || ConvertHandleIndexToHandle(StrHexToUintn(Temp2)) == NULL) {\r
+        Status = ShellConvertStringToUint64(Temp2, &Intermediate, TRUE, FALSE);\r
+        if (EFI_ERROR(Status) || ConvertHandleIndexToHandle((UINTN)Intermediate) == NULL) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Temp2);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Temp2);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
@@ -394,7 +958,7 @@ ShellCommandRunDh (
           // print 1 handle\r
           //\r
           ShellStatus = DoDhByHandle(\r
           // print 1 handle\r
           //\r
           ShellStatus = DoDhByHandle(\r
-            ConvertHandleIndexToHandle(StrHexToUintn(Temp2)),\r
+            ConvertHandleIndexToHandle((UINTN)Intermediate),\r
             Verbose,\r
             SfoMode,\r
             Lang==NULL?NULL:Language,\r
             Verbose,\r
             SfoMode,\r
             Lang==NULL?NULL:Language,\r
index d10ce56806487fe2832c66b8a97fb881a45bf57b..3a19304b66e6098e4ca9db3c3781ab59fbc66e83 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Disconnect shell Driver1 function.\r
 \r
 /** @file\r
   Main file for Disconnect shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -19,6 +19,11 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Disconnect everything.\r
+\r
+  @retval EFI_SUCCESS     The operation was successful.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DisconnectAll(\r
 EFI_STATUS\r
 EFIAPI\r
 DisconnectAll(\r
@@ -67,6 +72,12 @@ DisconnectAll(
   return (EFI_SUCCESS);\r
 }\r
 \r
   return (EFI_SUCCESS);\r
 }\r
 \r
+/**\r
+  Function for 'disconnect' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDisconnect (\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDisconnect (\r
@@ -84,6 +95,9 @@ ShellCommandRunDisconnect (
   EFI_HANDLE          Handle1;\r
   EFI_HANDLE          Handle2;\r
   EFI_HANDLE          Handle3;\r
   EFI_HANDLE          Handle1;\r
   EFI_HANDLE          Handle2;\r
   EFI_HANDLE          Handle3;\r
+  UINT64              Intermediate1;\r
+  UINT64              Intermediate2;\r
+  UINT64              Intermediate3;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
@@ -133,9 +147,12 @@ ShellCommandRunDisconnect (
         Param1  = ShellCommandLineGetRawValue(Package, 1);\r
         Param2  = ShellCommandLineGetRawValue(Package, 2);\r
         Param3  = ShellCommandLineGetRawValue(Package, 3);\r
         Param1  = ShellCommandLineGetRawValue(Package, 1);\r
         Param2  = ShellCommandLineGetRawValue(Package, 2);\r
         Param3  = ShellCommandLineGetRawValue(Package, 3);\r
-        Handle1 = Param1!=NULL?ConvertHandleIndexToHandle(StrHexToUintn(Param1)):NULL;\r
-        Handle2 = Param2!=NULL?ConvertHandleIndexToHandle(StrHexToUintn(Param2)):NULL;\r
-        Handle3 = Param3!=NULL?ConvertHandleIndexToHandle(StrHexToUintn(Param3)):NULL;\r
+        ShellConvertStringToUint64(Param1, &Intermediate1, TRUE, FALSE);\r
+        Handle1 = Param1!=NULL?ConvertHandleIndexToHandle((UINTN)Intermediate1):NULL;\r
+        ShellConvertStringToUint64(Param2, &Intermediate2, TRUE, FALSE);\r
+        Handle2 = Param2!=NULL?ConvertHandleIndexToHandle((UINTN)Intermediate2):NULL;\r
+        ShellConvertStringToUint64(Param3, &Intermediate3, TRUE, FALSE);\r
+        Handle3 = Param3!=NULL?ConvertHandleIndexToHandle((UINTN)Intermediate3):NULL;\r
 \r
         if (Param1 != NULL && Handle1 == NULL) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
 \r
         if (Param1 != NULL && Handle1 == NULL) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
@@ -148,18 +165,16 @@ ShellCommandRunDisconnect (
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else if (EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiDevicePathProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
           ASSERT(Param1 != NULL);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else if (EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiDevicePathProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
           ASSERT(Param1 != NULL);\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_NOT), gShellDriver1HiiHandle, StrHexToUintn(Param1), L"controller handle");\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_NOT), gShellDriver1HiiHandle, ShellStrToUintn(Param1), L"controller handle");\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else if (Handle2 != NULL && EFI_ERROR(gBS->OpenProtocol(Handle2, &gEfiDriverBindingProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
           ASSERT(Param2 != NULL);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else if (Handle2 != NULL && EFI_ERROR(gBS->OpenProtocol(Handle2, &gEfiDriverBindingProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
           ASSERT(Param2 != NULL);\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_NOT), gShellDriver1HiiHandle, StrHexToUintn(Param2), L"driver handle");\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_NOT), gShellDriver1HiiHandle, ShellStrToUintn(Param2), L"driver handle");\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
           ASSERT(Param1 != NULL);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
           ASSERT(Param1 != NULL);\r
-          ASSERT(Param2 != NULL);\r
-          ASSERT(Param3 != NULL);\r
           Status = gBS->DisconnectController(Handle1, Handle2, Handle3);\r
           Status = gBS->DisconnectController(Handle1, Handle2, Handle3);\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_3P_RESULT), gShellDriver1HiiHandle, L"Disconnect", Handle1, Handle2, Handle3, Status);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_3P_RESULT), gShellDriver1HiiHandle, L"Disconnect", Intermediate1, Intermediate2, Intermediate3, Status);\r
         }\r
       }\r
     }\r
         }\r
       }\r
     }\r
index 7784ca75d698f99a60a77e9f0f1c6d7911609e5e..18912e8f07c126a0470c2d3419ebe05551580473 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Drivers shell Driver1 function.\r
 \r
 /** @file\r
   Main file for Drivers shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -20,6 +20,15 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Get a device path (in text format) for a given handle.\r
+\r
+  @param[in] TheHandle      The handle to get the device path for.\r
+\r
+  @retval NULL    An error occured.\r
+  @return         A pointer to the driver path as a string.  The callee must \r
+                  free this memory.\r
+**/\r
 CHAR16*\r
 EFIAPI\r
 GetDevicePathTextForHandle(\r
 CHAR16*\r
 EFIAPI\r
 GetDevicePathTextForHandle(\r
@@ -77,6 +86,14 @@ GetDevicePathTextForHandle(
   return (RetVal);\r
 }\r
 \r
   return (RetVal);\r
 }\r
 \r
+/**\r
+  Determine if the given handle has Driver Configuration protocol.\r
+\r
+  @param[in] TheHandle      The handle to the driver to test.\r
+\r
+  @retval TRUE              The driver does have Driver Configuration.\r
+  @retval FALSE             The driver does not have Driver Configuration.\r
+**/\r
 BOOLEAN\r
 EFIAPI\r
 ReturnDriverConfig(\r
 BOOLEAN\r
 EFIAPI\r
 ReturnDriverConfig(\r
@@ -91,6 +108,14 @@ ReturnDriverConfig(
   return (TRUE);\r
 }\r
 \r
   return (TRUE);\r
 }\r
 \r
+/**\r
+  Determine if the given handle has DriverDiagnostics protocol.\r
+\r
+  @param[in] TheHandle      The handle to the driver to test.\r
+\r
+  @retval TRUE              The driver does have Driver Diasgnostics.\r
+  @retval FALSE             The driver does not have Driver Diagnostics.\r
+**/\r
 BOOLEAN\r
 EFIAPI\r
 ReturnDriverDiag(\r
 BOOLEAN\r
 EFIAPI\r
 ReturnDriverDiag(\r
@@ -108,6 +133,14 @@ ReturnDriverDiag(
   return (TRUE);\r
 }\r
 \r
   return (TRUE);\r
 }\r
 \r
+/**\r
+  Finds and returns the version of the driver specified by TheHandle.\r
+\r
+  @param[in] TheHandle      The driver handle to get the version of.\r
+\r
+  @return             The version of the driver.\r
+  @retval 0xFFFFFFFF  An error ocurred.\r
+**/\r
 UINT32\r
 EFIAPI\r
 ReturnDriverVersion(\r
 UINT32\r
 EFIAPI\r
 ReturnDriverVersion(\r
@@ -128,6 +161,12 @@ ReturnDriverVersion(
   return (RetVal);\r
 }\r
 \r
   return (RetVal);\r
 }\r
 \r
+/**\r
+  Function for 'drivers' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDrivers (\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDrivers (\r
index 4f4375414c5e1c84a8f83bc60aeecdf2532c6369..074a49c3beb2e2a592630653831675b59f308285 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for DrvCfg shell Driver1 function.\r
 \r
 /** @file\r
   Main file for DrvCfg shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -300,6 +300,12 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Function for 'drvcfg' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDrvCfg (\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDrvCfg (\r
index 9a8daecc9c36604b0a278c200b6590768e166c3f..6b55d909e9df84f3870e91026b30a6df095dab94 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for DrvDiag shell Driver1 function.\r
 \r
 /** @file\r
   Main file for DrvDiag shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -19,13 +19,27 @@ STATIC CONST EFI_GUID *DiagGuidList[] = {&gEfiDriverDiagnosticsProtocolGuid, &gE
 // We need 1 more item on the list...\r
 //\r
 typedef enum {\r
 // We need 1 more item on the list...\r
 //\r
 typedef enum {\r
-  TEST_MODE_STANDARD      = EfiDriverDiagnosticTypeStandard,\r
-  TEST_MODE_EXTENDED      = EfiDriverDiagnosticTypeExtended,\r
-  TEST_MODE_MANUFACTURING = EfiDriverDiagnosticTypeManufacturing,\r
-  TEST_MODE_LIST,\r
-  TEST_MODE_MAX\r
+  TestModeStandard      = EfiDriverDiagnosticTypeStandard,\r
+  TestModeExtended      = EfiDriverDiagnosticTypeExtended,\r
+  TestModeManufacturing = EfiDriverDiagnosticTypeManufacturing,\r
+  TestModeList,\r
+  TestModeMax\r
 } DRV_DIAG_TEST_MODE;\r
 \r
 } DRV_DIAG_TEST_MODE;\r
 \r
+/**\r
+  Do the diagnostics call for some set of handles.\r
+\r
+  @param[in] Mode               The type of diagnostic test to run.\r
+  @param[in] Lang               The language code to use.\r
+  @param[in] AllChilds          Should the test be on all children.\r
+  @param[in] DriverHandle       The driver handle to test with.\r
+  @param[in] ControllerHandle   The specific controller handle to test.\r
+  @param[in] ChildHandle        The specific child handle to test.\r
+\r
+  @retval EFI_SUCCESS           The operation was successful.\r
+  @retval EFI_INVALID_PARAMETER A parameter had an invalid value.\r
+  @retval EFI_NOT_FOUND         No diagnostic handle could be found.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DoDiagnostics (\r
 EFI_STATUS\r
 EFIAPI\r
 DoDiagnostics (\r
@@ -56,13 +70,11 @@ DoDiagnostics (
   CHAR16                              *OutBuffer;\r
   UINTN                               HandleIndex1;\r
   UINTN                               HandleIndex2;\r
   CHAR16                              *OutBuffer;\r
   UINTN                               HandleIndex1;\r
   UINTN                               HandleIndex2;\r
+  CHAR8                               *Language;\r
+  CHAR8                               *TempChar;\r
+  BOOLEAN                             Found;\r
 \r
 \r
-  if ((ChildHandle != NULL && AllChilds) || (Mode >= TEST_MODE_MAX)){\r
-    return (EFI_INVALID_PARAMETER);\r
-  }\r
-\r
-  if (Lang == NULL || AsciiStrLen(Lang) < 3) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"-l <value>");\r
+  if ((ChildHandle != NULL && AllChilds) || (Mode >= TestModeMax)){\r
     return (EFI_INVALID_PARAMETER);\r
   }\r
 \r
     return (EFI_INVALID_PARAMETER);\r
   }\r
 \r
@@ -73,6 +85,7 @@ DoDiagnostics (
   DriverHandleList                    = NULL;\r
   ControllerHandleList                = NULL;\r
   ChildHandleList                     = NULL;\r
   DriverHandleList                    = NULL;\r
   ControllerHandleList                = NULL;\r
   ChildHandleList                     = NULL;\r
+  Language                            = NULL;\r
   OutBuffer                           = NULL;\r
   ErrorType                           = NULL;\r
   DriverHandleListCount               = 0;\r
   OutBuffer                           = NULL;\r
   ErrorType                           = NULL;\r
   DriverHandleListCount               = 0;\r
@@ -87,7 +100,8 @@ DoDiagnostics (
   } else {\r
     DriverHandleList = GetHandleListByProtocolList(DiagGuidList);\r
     if (DriverHandleList == NULL) {\r
   } else {\r
     DriverHandleList = GetHandleListByProtocolList(DiagGuidList);\r
     if (DriverHandleList == NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVCFG_NONE), gShellDriver1HiiHandle);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROTOCOL_NF), gShellDriver1HiiHandle, L"gEfiDriverDiagnosticsProtocolGuid", &gEfiDriverDiagnosticsProtocolGuid);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROTOCOL_NF), gShellDriver1HiiHandle, L"gEfiDriverDiagnostics2ProtocolGuid", &gEfiDriverDiagnostics2ProtocolGuid);\r
       return (EFI_NOT_FOUND);\r
     } \r
     for (Walker = DriverHandleList ; Walker != NULL && *Walker != NULL ; DriverHandleListCount++, Walker++);\r
       return (EFI_NOT_FOUND);\r
     } \r
     for (Walker = DriverHandleList ; Walker != NULL && *Walker != NULL ; DriverHandleListCount++, Walker++);\r
@@ -116,132 +130,186 @@ DoDiagnostics (
     ChildHandleList = NULL;\r
   }\r
 \r
     ChildHandleList = NULL;\r
   }\r
 \r
+  if (Mode == TestModeList) {\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_HEADER), gShellDriver1HiiHandle);\r
+  }\r
   for (DriverHandleListLoop = 0\r
     ;  DriverHandleListLoop < DriverHandleListCount\r
     ;  DriverHandleListLoop++\r
     ){\r
   for (DriverHandleListLoop = 0\r
     ;  DriverHandleListLoop < DriverHandleListCount\r
     ;  DriverHandleListLoop++\r
     ){\r
+    if (Mode == TestModeList) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_DRIVER_HEADER), gShellDriver1HiiHandle, ConvertHandleToHandleIndex(DriverHandleList[DriverHandleListLoop]));\r
+    }\r
     if (ControllerHandle == NULL) {\r
       PARSE_HANDLE_DATABASE_DEVICES(DriverHandleList[DriverHandleListLoop], &ControllerHandleListCount, &ControllerHandleList);\r
     if (ControllerHandle == NULL) {\r
       PARSE_HANDLE_DATABASE_DEVICES(DriverHandleList[DriverHandleListLoop], &ControllerHandleListCount, &ControllerHandleList);\r
-    }\r
-    for (ControllerHandleListLoop = 0\r
-      ;  ControllerHandleListLoop < ControllerHandleListCount\r
-      ;  ControllerHandleListLoop++\r
-     ){\r
-      if (AllChilds) {\r
-        ASSERT(ChildHandleList == NULL);\r
-        PARSE_HANDLE_DATABASE_MANAGED_CHILDREN(\r
-          DriverHandleList[DriverHandleListLoop], \r
-          ControllerHandleList[ControllerHandleListLoop],\r
-          &ChildHandleListCount,\r
-          &ChildHandleList);\r
+    } \r
+    if (ControllerHandleListCount == 0) {\r
+      if (Mode == TestModeList) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_DRIVER_NO_HANDLES), gShellDriver1HiiHandle);\r
+      }\r
+    } else {\r
+      if (Mode == TestModeList) {\r
+        ShellPrintEx(-1, -1, L"\r\n");\r
       }\r
       }\r
-      for (ChildHandleListLoop = 0\r
-        ;  (ChildHandleListLoop < ChildHandleListCount || ChildHandleList == NULL)\r
-        ;  ChildHandleListLoop++\r
+      for (ControllerHandleListLoop = 0\r
+        ;  ControllerHandleListLoop < ControllerHandleListCount\r
+        ;  ControllerHandleListLoop++\r
         ){\r
         ){\r
-        if (Mode != TEST_MODE_LIST) {\r
-          if (Lang[2] == '-') {\r
-            //\r
-            // Get the protocol pointer and call the function\r
-            //\r
-            Status = gBS->OpenProtocol(\r
-              DriverHandleList[DriverHandleListLoop],\r
-              &gEfiDriverDiagnostics2ProtocolGuid,\r
-              (VOID**)&DriverDiagnostics2,\r
-              gImageHandle,\r
+        if (AllChilds) {\r
+          ASSERT(ChildHandleList == NULL);\r
+          PARSE_HANDLE_DATABASE_MANAGED_CHILDREN(\r
+            DriverHandleList[DriverHandleListLoop], \r
+            ControllerHandleList[ControllerHandleListLoop],\r
+            &ChildHandleListCount,\r
+            &ChildHandleList);\r
+        }\r
+        for (ChildHandleListLoop = 0\r
+          ;  (ChildHandleListLoop < ChildHandleListCount || ChildHandleList == NULL)\r
+          ;  ChildHandleListLoop++\r
+          ){\r
+          Found = FALSE;\r
+          if (Mode != TestModeList) {\r
+            if (Lang == NULL || Lang[2] == '-') {\r
+              //\r
+              // Get the protocol pointer and call the function\r
+              //\r
+              Status = gBS->OpenProtocol(\r
+                DriverHandleList[DriverHandleListLoop],\r
+                &gEfiDriverDiagnostics2ProtocolGuid,\r
+                (VOID**)&DriverDiagnostics2,\r
+                gImageHandle,\r
+                NULL,\r
+                EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+              if (!EFI_ERROR(Status)) {\r
+                if (Lang == NULL) {\r
+                  Language = AllocateZeroPool(AsciiStrSize(DriverDiagnostics2->SupportedLanguages));\r
+                  if (Language == NULL) {\r
+                    return (EFI_OUT_OF_RESOURCES);\r
+                  }\r
+                  AsciiStrCpy(Language, DriverDiagnostics2->SupportedLanguages);\r
+                  TempChar = AsciiStrStr(Language, ";");\r
+                  if (TempChar != NULL){\r
+                    *TempChar = CHAR_NULL;\r
+                  }\r
+                } else {\r
+                  Language = AllocateZeroPool(AsciiStrSize(Lang));\r
+                  if (Language == NULL) {\r
+                    return (EFI_OUT_OF_RESOURCES);\r
+                  }\r
+                  AsciiStrCpy(Language, Lang);\r
+                }\r
+                Found = TRUE;\r
+                Status = DriverDiagnostics2->RunDiagnostics(\r
+                  DriverDiagnostics2,\r
+                  ControllerHandleList[ControllerHandleListLoop],\r
+                  ChildHandleList == NULL?NULL:ChildHandleList[ChildHandleListLoop],\r
+                  (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,\r
+                  Language,\r
+                  &ErrorType,\r
+                  &OutBufferSize,\r
+                  &OutBuffer);\r
+                FreePool(Language);\r
+              }\r
+            } \r
+            if (Found == FALSE && (Lang == NULL||(Lang!=NULL&&Lang[2]!='-'))){\r
+              Status = gBS->OpenProtocol(\r
+                DriverHandleList[DriverHandleListLoop],\r
+                &gEfiDriverDiagnosticsProtocolGuid,\r
+                (VOID**)&DriverDiagnostics,\r
+                gImageHandle,\r
+                NULL,\r
+                EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+              if (!EFI_ERROR(Status)) {\r
+                if (Lang == NULL) {\r
+                  Language = AllocateZeroPool(AsciiStrSize(DriverDiagnostics2->SupportedLanguages));\r
+                  if (Language == NULL) {\r
+                    return (EFI_OUT_OF_RESOURCES);\r
+                  }\r
+                  AsciiStrCpy(Language, DriverDiagnostics2->SupportedLanguages);\r
+                  TempChar = AsciiStrStr(Language, ";");\r
+                  if (TempChar != NULL){\r
+                    *TempChar = CHAR_NULL;\r
+                  }\r
+                } else {\r
+                  Language = AllocateZeroPool(AsciiStrSize(Lang));\r
+                  if (Language == NULL) {\r
+                    return (EFI_OUT_OF_RESOURCES);\r
+                  }\r
+                  AsciiStrCpy(Language, Lang);\r
+                }\r
+                Status = DriverDiagnostics->RunDiagnostics(\r
+                  DriverDiagnostics,\r
+                  ControllerHandleList[ControllerHandleListLoop],\r
+                  ChildHandleList == NULL?NULL:ChildHandleList[ChildHandleListLoop],\r
+                  (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,\r
+                  Language,\r
+                  &ErrorType,\r
+                  &OutBufferSize,\r
+                  &OutBuffer);\r
+                FreePool(Language);\r
+              }\r
+            }\r
+            if (EFI_ERROR(Status)) {\r
+              Status2 = Status;\r
+            }\r
+            HandleIndex1 = ConvertHandleToHandleIndex(DriverHandleList[DriverHandleListLoop]);\r
+            HandleIndex2 = ConvertHandleToHandleIndex(ControllerHandleList[ControllerHandleListLoop]);\r
+            ShellPrintHiiEx(\r
+              -1,\r
+              -1,\r
               NULL,\r
               NULL,\r
-              EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
-            if (!EFI_ERROR(Status)) {\r
-              Status = DriverDiagnostics2->RunDiagnostics(\r
-                DriverDiagnostics2,\r
-                ControllerHandleList[ControllerHandleListLoop],\r
-                ChildHandleList == NULL?NULL:ChildHandleList[ChildHandleListLoop],\r
-                (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,\r
-                (CHAR8*)Lang,\r
-                &ErrorType,\r
-                &OutBufferSize,\r
-                &OutBuffer);\r
+              STRING_TOKEN (STR_3P_RESULT),\r
+              gShellDriver1HiiHandle,\r
+              L"DrvDiag",\r
+              HandleIndex1,\r
+              HandleIndex2,\r
+              ChildHandleList == NULL?0:ConvertHandleToHandleIndex(ChildHandleList[ChildHandleListLoop]),\r
+              Status);\r
+            if (OutBuffer!=NULL) {\r
+              FreePool(OutBuffer);\r
+              OutBuffer = NULL;\r
+            }\r
+            if (ErrorType!=NULL) {\r
+              FreePool(ErrorType);\r
+              ErrorType = NULL;\r
             }\r
           } else {\r
             }\r
           } else {\r
-            Status = gBS->OpenProtocol(\r
-              DriverHandleList[DriverHandleListLoop],\r
-              &gEfiDriverDiagnosticsProtocolGuid,\r
-              (VOID**)&DriverDiagnostics,\r
-              gImageHandle,\r
+            HandleIndex1 = ConvertHandleToHandleIndex(DriverHandleList[DriverHandleListLoop]);\r
+            HandleIndex2 = ConvertHandleToHandleIndex(ControllerHandleList[ControllerHandleListLoop]);\r
+            //\r
+            // Print out the information that this set can be tested\r
+            //\r
+            ShellPrintHiiEx(\r
+              -1,\r
+              -1,\r
               NULL,\r
               NULL,\r
-              EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
-            if (!EFI_ERROR(Status)) {\r
-              Status = DriverDiagnostics->RunDiagnostics(\r
-                DriverDiagnostics,\r
-                ControllerHandleList[ControllerHandleListLoop],\r
-                ChildHandleList == NULL?NULL:ChildHandleList[ChildHandleListLoop],\r
-                (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,\r
-                (CHAR8*)Lang,\r
-                &ErrorType,\r
-                &OutBufferSize,\r
-                &OutBuffer);\r
-            }\r
-          }\r
-          if (EFI_ERROR(Status)) {\r
-            Status2 = Status;\r
-          }\r
-          HandleIndex1 = ConvertHandleToHandleIndex(DriverHandleList[DriverHandleListLoop]);\r
-          HandleIndex2 = ConvertHandleToHandleIndex(ControllerHandleList[ControllerHandleListLoop]);\r
-          ShellPrintHiiEx(\r
-            -1,\r
-            -1,\r
-            NULL,\r
-            STRING_TOKEN (STR_3P_RESULT),\r
-            gShellDriver1HiiHandle,\r
-            L"DrvDiag",\r
-            HandleIndex1,\r
-            HandleIndex2,\r
-            ChildHandleList == NULL?0:ConvertHandleToHandleIndex(ChildHandleList[ChildHandleListLoop]),\r
-            Status);\r
-          if (OutBuffer!=NULL) {\r
-            FreePool(OutBuffer);\r
-            OutBuffer = NULL;\r
-          }\r
-          if (ErrorType!=NULL) {\r
-            FreePool(ErrorType);\r
-            ErrorType = NULL;\r
+              STRING_TOKEN (STR_DRV_DIAG_ITEM_LINE),\r
+              gShellDriver1HiiHandle,\r
+              HandleIndex1,\r
+              HandleIndex2,\r
+              ChildHandleList == NULL?0:ConvertHandleToHandleIndex(ChildHandleList[ChildHandleListLoop])\r
+           );\r
           }\r
           }\r
-        } else {\r
-          HandleIndex1 = ConvertHandleToHandleIndex(DriverHandleList[DriverHandleListLoop]);\r
-          HandleIndex2 = ConvertHandleToHandleIndex(ControllerHandleList[ControllerHandleListLoop]);\r
+\r
           //\r
           //\r
-          // Print out the information that this set can be tested\r
+          // If we are doing a single pass with NULL child jump out after a single loop\r
           //\r
           //\r
-          ShellPrintHiiEx(\r
-            -1,\r
-            -1,\r
-            NULL,\r
-            STRING_TOKEN (STR_DRV_DIAG_ITEM_LINE),\r
-            gShellDriver1HiiHandle,\r
-            HandleIndex1,\r
-            HandleIndex2,\r
-            ChildHandleList == NULL?0:ConvertHandleToHandleIndex(ChildHandleList[ChildHandleListLoop])\r
-         );\r
+          if (ChildHandleList == NULL) {\r
+            break;\r
+          }\r
         }\r
         }\r
-\r
-        //\r
-        // If we are doing a single pass with NULL child jump out after a single loop\r
-        //\r
-        if (ChildHandleList == NULL) {\r
-          break;\r
+        if (AllChilds) {\r
+          SHELL_FREE_NON_NULL(ChildHandleList);\r
+          ChildHandleList       = NULL;\r
+          ChildHandleListCount  = 0;\r
         }\r
       }\r
         }\r
       }\r
-      if (AllChilds) {\r
-        SHELL_FREE_NON_NULL(ChildHandleList);\r
-        ChildHandleList       = NULL;\r
-        ChildHandleListCount  = 0;\r
+      if (ControllerHandle == NULL) {\r
+        SHELL_FREE_NON_NULL(ControllerHandleList);\r
+        ControllerHandleList      = NULL;\r
+        ControllerHandleListCount = 0;\r
+      }\r
       }\r
       }\r
-    }\r
-    if (ControllerHandle == NULL) {\r
-      SHELL_FREE_NON_NULL(ControllerHandleList);\r
-      ControllerHandleList      = NULL;\r
-      ControllerHandleListCount = 0;\r
-    }\r
   }\r
 \r
   if (DriverHandleList != NULL) {\r
   }\r
 \r
   if (DriverHandleList != NULL) {\r
@@ -266,6 +334,12 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Function for 'drvdiag' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDrvDiag (\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDrvDiag (\r
@@ -286,9 +360,10 @@ ShellCommandRunDrvDiag (
   EFI_HANDLE          Handle1;\r
   EFI_HANDLE          Handle2;\r
   EFI_HANDLE          Handle3;\r
   EFI_HANDLE          Handle1;\r
   EFI_HANDLE          Handle2;\r
   EFI_HANDLE          Handle3;\r
+  UINT64              Intermediate;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
-  Mode                = TEST_MODE_MAX;\r
+  Mode                = TestModeMax;\r
   Language            = NULL;\r
 \r
   //\r
   Language            = NULL;\r
 \r
   //\r
@@ -334,11 +409,11 @@ ShellCommandRunDrvDiag (
       // Run the apropriate test\r
       //\r
       if        (ShellCommandLineGetFlag(Package, L"-s")) {\r
       // Run the apropriate test\r
       //\r
       if        (ShellCommandLineGetFlag(Package, L"-s")) {\r
-        Mode =   TEST_MODE_STANDARD;\r
+        Mode =   TestModeStandard;\r
       } else if (ShellCommandLineGetFlag(Package, L"-e")) {\r
       } else if (ShellCommandLineGetFlag(Package, L"-e")) {\r
-        Mode = TEST_MODE_EXTENDED;\r
+        Mode = TestModeExtended;\r
       } else if (ShellCommandLineGetFlag(Package, L"-m")) {\r
       } else if (ShellCommandLineGetFlag(Package, L"-m")) {\r
-        Mode = TEST_MODE_MANUFACTURING;\r
+        Mode = TestModeManufacturing;\r
       } else {\r
         ASSERT(FALSE);\r
       }\r
       } else {\r
         ASSERT(FALSE);\r
       }\r
@@ -346,21 +421,18 @@ ShellCommandRunDrvDiag (
       //\r
       // Do a listing of what's available to test\r
       //\r
       //\r
       // Do a listing of what's available to test\r
       //\r
-      Mode = TEST_MODE_LIST;\r
+      Mode = TestModeList;\r
     }\r
 \r
     Lang = ShellCommandLineGetValue(Package, L"-l");\r
     }\r
 \r
     Lang = ShellCommandLineGetValue(Package, L"-l");\r
-    if (Lang != NULL) {\r
-      Language = AllocateZeroPool(StrSize(Lang));\r
-      AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
-    } else if (!ShellCommandLineGetFlag(Package, L"-l")){\r
-      Language = AllocateZeroPool(10);\r
-      AsciiSPrint(Language, 10, "en-us");\r
-    } else {\r
+    if (ShellCommandLineGetFlag(Package, L"-l") && Lang == NULL) {\r
       ASSERT(Language == NULL);\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");\r
       ShellCommandLineFreeVarList (Package);\r
       return (SHELL_INVALID_PARAMETER);\r
       ASSERT(Language == NULL);\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");\r
       ShellCommandLineFreeVarList (Package);\r
       return (SHELL_INVALID_PARAMETER);\r
+    } else if (Lang != NULL) {\r
+      Language = AllocateZeroPool(StrSize(Lang));\r
+      AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
     }\r
 \r
     DriverHandleStr     = ShellCommandLineGetRawValue(Package, 1);\r
     }\r
 \r
     DriverHandleStr     = ShellCommandLineGetRawValue(Package, 1);\r
@@ -370,17 +442,20 @@ ShellCommandRunDrvDiag (
     if (DriverHandleStr == NULL) {\r
       Handle1 = NULL;\r
     } else {\r
     if (DriverHandleStr == NULL) {\r
       Handle1 = NULL;\r
     } else {\r
-      Handle1 = ConvertHandleIndexToHandle(StrHexToUintn(DriverHandleStr    ));\r
+      ShellConvertStringToUint64(DriverHandleStr, &Intermediate, TRUE, FALSE);\r
+      Handle1 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
     }\r
     if (ControllerHandleStr == NULL) {\r
       Handle2 = NULL;\r
     } else {\r
     }\r
     if (ControllerHandleStr == NULL) {\r
       Handle2 = NULL;\r
     } else {\r
-      Handle2 = ConvertHandleIndexToHandle(StrHexToUintn(ControllerHandleStr));\r
+      ShellConvertStringToUint64(ControllerHandleStr, &Intermediate, TRUE, FALSE);\r
+      Handle2 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
     }\r
     if (ChildHandleStr == NULL) {\r
       Handle3 = NULL;\r
     } else {\r
     }\r
     if (ChildHandleStr == NULL) {\r
       Handle3 = NULL;\r
     } else {\r
-      Handle3 = ConvertHandleIndexToHandle(StrHexToUintn(ChildHandleStr     ));\r
+      ShellConvertStringToUint64(ChildHandleStr, &Intermediate, TRUE, FALSE);\r
+      Handle3 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
     }\r
 \r
     Status = DoDiagnostics (\r
     }\r
 \r
     Status = DoDiagnostics (\r
index b60cc183337c3461becd26f3a566b7209371346c..0cb78403917c5b5c5fd5c3b5ea8341f58a8569e3 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for OpenInfo shell Driver1 function.\r
 \r
 /** @file\r
   Main file for OpenInfo shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -23,6 +23,14 @@ STATIC CONST CHAR16 StringExclusive[] = L"Exclusive";
 STATIC CONST CHAR16 StringDriverEx[]  = L"DriverEx ";\r
 STATIC CONST CHAR16 StringUnknown[]   = L"Unknown  ";\r
 \r
 STATIC CONST CHAR16 StringDriverEx[]  = L"DriverEx ";\r
 STATIC CONST CHAR16 StringUnknown[]   = L"Unknown  ";\r
 \r
+/**\r
+  Open the database and print out all the info about TheHandle.\r
+\r
+  @param[in] TheHandle      The handle to print info on.\r
+\r
+  @retval EFI_SUCCESS           The operation was successful.\r
+  @retval EFI_INVALID_PARAMETER TheHandle was NULL.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 TraverseHandleDatabase (\r
 EFI_STATUS\r
 EFIAPI\r
 TraverseHandleDatabase (\r
@@ -41,7 +49,9 @@ TraverseHandleDatabase (
   UINTN                               HandleIndex;\r
   CONST CHAR16                        *Name;\r
 \r
   UINTN                               HandleIndex;\r
   CONST CHAR16                        *Name;\r
 \r
-  ASSERT(TheHandle != NULL);\r
+  if (TheHandle == NULL) {\r
+    return (EFI_INVALID_PARAMETER);\r
+  }\r
 \r
   //\r
   // Retrieve the list of all the protocols on the handle\r
 \r
   //\r
   // Retrieve the list of all the protocols on the handle\r
@@ -145,6 +155,7 @@ ShellCommandRunOpenInfo (
   SHELL_STATUS        ShellStatus;\r
   EFI_HANDLE          TheHandle;\r
   CONST CHAR16        *Param1;\r
   SHELL_STATUS        ShellStatus;\r
   EFI_HANDLE          TheHandle;\r
   CONST CHAR16        *Param1;\r
+  UINT64              Intermediate;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
@@ -181,13 +192,14 @@ ShellCommandRunOpenInfo (
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
       Param1 = ShellCommandLineGetRawValue(Package, 1);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
       Param1 = ShellCommandLineGetRawValue(Package, 1);\r
-      if (Param1 == NULL || ConvertHandleIndexToHandle(StrHexToUintn(Param1)) == NULL){\r
+      Status = ShellConvertStringToUint64(Param1, &Intermediate, TRUE, FALSE);\r
+      if (EFI_ERROR(Status) || Param1 == NULL || ConvertHandleIndexToHandle((UINTN)Intermediate) == NULL){\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
-        TheHandle = ConvertHandleIndexToHandle(StrHexToUintn(Param1));\r
+        TheHandle = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
         ASSERT(TheHandle != NULL);\r
         ASSERT(TheHandle != NULL);\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, StrHexToUintn(Param1), TheHandle);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, (UINTN)Intermediate, TheHandle);\r
 \r
         Status = TraverseHandleDatabase (TheHandle);\r
         if (!EFI_ERROR(Status)) {\r
 \r
         Status = TraverseHandleDatabase (TheHandle);\r
         if (!EFI_ERROR(Status)) {\r
index 723ee71141a25fd1fdb5199c58489407d99f4b45..0a8e1b2be812eb9cb0cf6e20ecc7f858f1cf2f7d 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, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
+/**\r
+  Function for 'reconnect' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunReconnect (\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunReconnect (\r
index b0e15917d8a27037ed75765958d6394e96c05fdb..1673d568807b78067bd3d0566335d118bbb5362e 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for NULL named library for level 1 shell command functions.\r
 \r
 /** @file\r
   Main file for NULL named library for level 1 shell command functions.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -21,6 +21,11 @@ CONST EFI_GUID gShellDriver1HiiGuid = \
   0xaf0b742, 0x63ec, 0x45bd, {0x8d, 0xb6, 0x71, 0xad, 0x7f, 0x2f, 0xe8, 0xe8} \\r
   };\r
 \r
   0xaf0b742, 0x63ec, 0x45bd, {0x8d, 0xb6, 0x71, 0xad, 0x7f, 0x2f, 0xe8, 0xe8} \\r
   };\r
 \r
+/**\r
+  Function to return the name of the file containing help if HII will not be used.\r
+\r
+  @return The filename.\r
+**/\r
 CONST CHAR16*\r
 EFIAPI\r
 ShellCommandGetManFileNameDriver1 (\r
 CONST CHAR16*\r
 EFIAPI\r
 ShellCommandGetManFileNameDriver1 (\r
@@ -81,6 +86,9 @@ UefiShellDriver1CommandsLibConstructor (
 \r
 /**\r
   Destructor for the library.  free any resources.\r
 \r
 /**\r
   Destructor for the library.  free any resources.\r
+\r
+  @param ImageHandle            The image handle of the process.\r
+  @param SystemTable            The EFI System Table pointer.\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
index c5b6a1fbda15a887b69856ed191a8dfa54e2acea..656958342ed02c1fdbb23f70e85dcb8c26bdc6be 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for NULL named library for Profile1 shell command functions.\r
 \r
 /** @file\r
   Main file for NULL named library for Profile1 shell command functions.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -12,6 +12,9 @@
 \r
 **/\r
 \r
 \r
 **/\r
 \r
+#if !defined (_UEFI_SHELL_DRIVER1_COMMANDS_LIB_H_)\r
+#define _UEFI_SHELL_DRIVER1_COMMANDS_LIB_H_\r
+\r
 #include <Uefi.h>\r
 #include <ShellBase.h>\r
 \r
 #include <Uefi.h>\r
 #include <ShellBase.h>\r
 \r
@@ -199,3 +202,5 @@ ShellCommandRunUnload (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   );\r
 \r
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   );\r
 \r
+#endif\r
+\r
index 5db841ef829eb605d8d35c00cc4ffc42735c9ba1..0cb8ffc82b0186ed8ac0056d93e7887d012392c1 100644 (file)
Binary files a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni and b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni differ
index 239ac4aae25a8c0cc0aff02a1b4b6d2b5fbc29c1..940f72d89a4a713fe6f331749e7398e81d03a879 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Unload shell Driver1 function.\r
 \r
 /** @file\r
   Main file for Unload shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -145,10 +145,13 @@ ShellCommandRunUnload (
   EFI_HANDLE            TheHandle;\r
   CONST CHAR16          *Param1;\r
   SHELL_PROMPT_RESPONSE *Resp;\r
   EFI_HANDLE            TheHandle;\r
   CONST CHAR16          *Param1;\r
   SHELL_PROMPT_RESPONSE *Resp;\r
+  UINT64                Value;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Package             = NULL;\r
   Resp                = NULL;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Package             = NULL;\r
   Resp                = NULL;\r
+  Value               = 0;\r
+  TheHandle           = NULL;\r
 \r
   //\r
   // initialize the shell lib (we must be in non-auto-init...)\r
 \r
   //\r
   // initialize the shell lib (we must be in non-auto-init...)\r
@@ -179,24 +182,28 @@ ShellCommandRunUnload (
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      Param1 = ShellCommandLineGetRawValue(Package, 1);\r
-      if (Param1 == NULL || ConvertHandleIndexToHandle(StrHexToUintn(Param1)) == NULL){\r
+      Param1    = ShellCommandLineGetRawValue(Package, 1);\r
+      if (Param1 != NULL) {\r
+        Status    = ShellConvertStringToUint64(Param1, &Value, TRUE, FALSE);\r
+        TheHandle = ConvertHandleIndexToHandle((UINTN)Value);\r
+      }\r
+\r
+      if (EFI_ERROR(Status) || Param1 == NULL || TheHandle == NULL){\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
-        TheHandle = ConvertHandleIndexToHandle(StrHexToUintn(Param1));\r
         ASSERT(TheHandle != NULL);\r
         if (ShellCommandLineGetFlag(Package, L"-v") || ShellCommandLineGetFlag(Package, L"-verbose")) {\r
           DumpLoadedImageProtocolInfo(TheHandle);\r
         }\r
         \r
         if (!ShellCommandLineGetFlag(Package, L"-n")) {\r
         ASSERT(TheHandle != NULL);\r
         if (ShellCommandLineGetFlag(Package, L"-v") || ShellCommandLineGetFlag(Package, L"-verbose")) {\r
           DumpLoadedImageProtocolInfo(TheHandle);\r
         }\r
         \r
         if (!ShellCommandLineGetFlag(Package, L"-n")) {\r
-          Status = ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_UNLOAD_CONF), gShellDriver1HiiHandle, StrHexToUintn(Param1));\r
+          Status = ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_UNLOAD_CONF), gShellDriver1HiiHandle, (UINTN)TheHandle);\r
           Status = ShellPromptForResponse(ShellPromptResponseTypeYesNo, NULL, (VOID**)&Resp);\r
         }\r
         if (ShellCommandLineGetFlag(Package, L"-n") || (Resp != NULL && *Resp == ShellPromptResponseYes)) {\r
           Status = gBS->UnloadImage(TheHandle);\r
           Status = ShellPromptForResponse(ShellPromptResponseTypeYesNo, NULL, (VOID**)&Resp);\r
         }\r
         if (ShellCommandLineGetFlag(Package, L"-n") || (Resp != NULL && *Resp == ShellPromptResponseYes)) {\r
           Status = gBS->UnloadImage(TheHandle);\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_HANDLE_RESULT), gShellDriver1HiiHandle, L"Unload", StrHexToUintn(Param1), Status);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_HANDLE_RESULT), gShellDriver1HiiHandle, L"Unload", (UINTN)TheHandle, Status);\r
         }\r
         SHELL_FREE_NON_NULL(Resp);\r
       }\r
         }\r
         SHELL_FREE_NON_NULL(Resp);\r
       }\r