]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
ShellPkg: Standardized HP Copyright Message String
[mirror_edk2.git] / ShellPkg / Library / UefiShellDriver1CommandsLib / Drivers.c
index 7784ca75d698f99a60a77e9f0f1c6d7911609e5e..f1c2a7f7bf5d2f2d1462284555715b2ec91de7a9 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
   Main file for Drivers shell Driver1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2010 - 2013, 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
 \r
 #include "UefiShellDriver1CommandsLib.h"\r
 \r
+#define MAX_LEN_DRIVER_NAME 35\r
+\r
 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
   {L"-sfo", TypeFlag},\r
   {L"-l", TypeValue},\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
@@ -71,12 +83,20 @@ GetDevicePathTextForHandle(
   }\r
   RetVal = gEfiShellProtocol->GetFilePathFromDevicePath(FinalPath);\r
   if (RetVal == NULL) {\r
-    RetVal = gDevPathToText->ConvertDevicePathToText(FinalPath, TRUE, TRUE);\r
+    RetVal = ConvertDevicePathToText(FinalPath, TRUE, TRUE);\r
   }\r
   FreePool(FinalPath);\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
@@ -91,6 +111,14 @@ ReturnDriverConfig(
   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
@@ -108,6 +136,14 @@ ReturnDriverDiag(
   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
@@ -128,6 +164,12 @@ ReturnDriverVersion(
   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
@@ -146,15 +188,19 @@ ShellCommandRunDrivers (
   UINTN               ChildCount;\r
   UINTN               DeviceCount;\r
   CHAR16              *Temp2;\r
+  CONST CHAR16        *FullDriverName;\r
+  CHAR16              *TruncatedDriverName;\r
   CHAR16              *FormatString;\r
   UINT32              DriverVersion;\r
   BOOLEAN             DriverConfig;\r
   BOOLEAN             DriverDiag;\r
+  BOOLEAN             SfoFlag;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Status              = EFI_SUCCESS;\r
   Language            = NULL;\r
   FormatString        = NULL;\r
+  SfoFlag             = FALSE;\r
 \r
   //\r
   // initialize the shell lib (we must be in non-auto-init...)\r
@@ -171,7 +217,7 @@ ShellCommandRunDrivers (
   Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
   if (EFI_ERROR(Status)) {\r
     if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"drivers", ProblemParam);  \r
       FreePool(ProblemParam);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
@@ -179,28 +225,37 @@ ShellCommandRunDrivers (
     }\r
   } else {\r
     if (ShellCommandLineGetCount(Package) > 1) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"drivers");  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\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
-        ASSERT(Language == NULL);\r
-  //      Language = AllocateZeroPool(10);\r
-  //      AsciiSPrint(Language, 10, "en-us");\r
-      } else {\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
+      if (ShellCommandLineGetFlag(Package, L"-l")){\r
+        Lang = ShellCommandLineGetValue(Package, L"-l");\r
+        if (Lang != NULL) {\r
+          Language = AllocateZeroPool(StrSize(Lang));\r
+          AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
+        } else {\r
+          ASSERT(Language == NULL);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drivers", L"-l");  \r
+          ShellCommandLineFreeVarList (Package);\r
+          return (SHELL_INVALID_PARAMETER);\r
+        }\r
       }\r
 \r
-      if (ShellCommandLineGetFlag(Package, L"-sfo")) {\r
-        FormatString = HiiGetString(gShellDriver1HiiHandle, STRING_TOKEN(STR_DRIVERS_ITEM_LINE_SFO), Language);\r
+      if (ShellCommandLineGetFlag (Package, L"-sfo")) {\r
+        SfoFlag = TRUE;\r
+        FormatString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DRIVERS_ITEM_LINE_SFO), Language);\r
+        //\r
+        // print the SFO header\r
+        //\r
+        ShellPrintHiiEx (\r
+          -1,\r
+          -1,\r
+          Language,\r
+          STRING_TOKEN (STR_GEN_SFO_HEADER),\r
+          gShellDriver1HiiHandle,\r
+          L"drivers");\r
       } else {\r
-        FormatString = HiiGetString(gShellDriver1HiiHandle, STRING_TOKEN(STR_DRIVERS_ITEM_LINE), Language);\r
+        FormatString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DRIVERS_ITEM_LINE), Language);\r
         //\r
         // print the header row\r
         //\r
@@ -208,21 +263,27 @@ ShellCommandRunDrivers (
           -1,\r
           -1,\r
           Language,\r
-          STRING_TOKEN(STR_DRIVERS_HEADER_LINES),\r
+          STRING_TOKEN (STR_DRIVERS_HEADER_LINES),\r
           gShellDriver1HiiHandle);\r
       }\r
 \r
       HandleList = GetHandleListByProtocol(&gEfiDriverBindingProtocolGuid);\r
       for (HandleWalker = HandleList ; HandleWalker != NULL && *HandleWalker != NULL ; HandleWalker++){\r
-        ChildCount    = 0;\r
-        DeviceCount   = 0;\r
-        Status        = ParseHandleDatabaseForChildDevices (*HandleWalker, &ChildCount , NULL);\r
-        Status        = PARSE_HANDLE_DATABASE_DEVICES      (*HandleWalker, &DeviceCount, NULL);\r
-        Temp2         = GetDevicePathTextForHandle(*HandleWalker);\r
-        DriverVersion = ReturnDriverVersion(*HandleWalker);\r
-        DriverConfig  = ReturnDriverConfig(*HandleWalker);\r
-        DriverDiag    = ReturnDriverDiag  (*HandleWalker);\r
-        Lang          = GetStringNameFromHandle(*HandleWalker, Language==NULL?"en":Language);\r
+        ChildCount     = 0;\r
+        DeviceCount    = 0;\r
+        Status         = ParseHandleDatabaseForChildDevices (*HandleWalker, &ChildCount , NULL);\r
+        Status         = PARSE_HANDLE_DATABASE_DEVICES      (*HandleWalker, &DeviceCount, NULL);\r
+        Temp2          = GetDevicePathTextForHandle(*HandleWalker);\r
+        DriverVersion  = ReturnDriverVersion(*HandleWalker);\r
+        DriverConfig   = ReturnDriverConfig(*HandleWalker);\r
+        DriverDiag     = ReturnDriverDiag  (*HandleWalker);\r
+        FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);\r
+\r
+        TruncatedDriverName = NULL;\r
+        if (!SfoFlag && (FullDriverName != NULL)) {\r
+          TruncatedDriverName = AllocateZeroPool ((MAX_LEN_DRIVER_NAME + 1) * sizeof (CHAR16));\r
+          StrnCpy (TruncatedDriverName, FullDriverName, MAX_LEN_DRIVER_NAME);\r
+        }\r
 \r
         ShellPrintEx(\r
           -1,\r
@@ -235,12 +296,20 @@ ShellCommandRunDrivers (
           DriverDiag?L'Y':L'N',\r
           DeviceCount,\r
           ChildCount,\r
-          Lang,\r
+          SfoFlag?FullDriverName:TruncatedDriverName,\r
           Temp2==NULL?L"":Temp2\r
          );\r
+        if (TruncatedDriverName != NULL) {\r
+          FreePool (TruncatedDriverName);\r
+        }\r
         if (Temp2 != NULL) {\r
           FreePool(Temp2);\r
         }\r
+        \r
+        if (ShellGetExecutionBreakFlag ()) {\r
+          ShellStatus = SHELL_ABORTED;\r
+          break;\r
+        }\r
       }\r
     }\r
     SHELL_FREE_NON_NULL(Language);\r