]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
ShellPkg: Fixes and updates for the 'devices' command
[mirror_edk2.git] / ShellPkg / Library / UefiShellDriver1CommandsLib / Drivers.c
index 1f7675b8b561d06224296f16be2d365b8a30108d..7dff549548fdc6443f20f815d3e0940270148cbb 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
   Main file for Drivers shell Driver1 function.\r
 \r
-  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2012-2014, Hewlett-Packard Development Company, L.P.\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
@@ -14,6 +15,8 @@
 \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
@@ -80,7 +83,7 @@ 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
@@ -185,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
@@ -234,10 +241,21 @@ ShellCommandRunDrivers (
         }\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
@@ -245,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);\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
@@ -272,9 +296,12 @@ 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