]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg/drivers: Show Image Name in non-SFO mode
authorHuajing Li <huajing.li@intel.com>
Wed, 9 Aug 2017 02:54:32 +0000 (10:54 +0800)
committerRuiyu Ni <ruiyu.ni@intel.com>
Thu, 10 Aug 2017 04:29:34 +0000 (12:29 +0800)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Huajing Li <huajing.li@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni

index ffdef043529f4b08d7353cc4bd21ff2aeac45eb7..f3c1476872c0132905e4048e17bc5ece9ae00669 100644 (file)
@@ -2,7 +2,7 @@
   Main file for Drivers shell Driver1 function.\r
 \r
   (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>\r
   Main file for Drivers shell Driver1 function.\r
 \r
   (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>\r
-  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2017, 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
@@ -160,6 +160,92 @@ ReturnDriverVersion(
   return (RetVal);\r
 }\r
 \r
   return (RetVal);\r
 }\r
 \r
+/**\r
+  Get image name from Image Handle.\r
+\r
+  @param[in] Handle      Image Handle\r
+\r
+  @return         A pointer to the image name as a string.\r
+**/\r
+CHAR16 *\r
+GetImageNameFromHandle (\r
+  IN CONST EFI_HANDLE Handle\r
+  )\r
+{\r
+  EFI_STATUS                        Status;\r
+  EFI_DRIVER_BINDING_PROTOCOL       *DriverBinding;\r
+  EFI_LOADED_IMAGE_PROTOCOL         *LoadedImage;\r
+  EFI_DEVICE_PATH_PROTOCOL          *DevPathNode;\r
+  EFI_GUID                          *NameGuid;\r
+  CHAR16                            *ImageName;\r
+  UINTN                             BufferSize;\r
+  UINT32                            AuthenticationStatus;\r
+  EFI_FIRMWARE_VOLUME2_PROTOCOL     *Fv2;\r
+\r
+  LoadedImage   = NULL;\r
+  DriverBinding = NULL;\r
+  ImageName     = NULL;\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 NULL;\r
+  }\r
+  Status = gBS->OpenProtocol (\r
+                  DriverBinding->ImageHandle,\r
+                  &gEfiLoadedImageProtocolGuid,\r
+                  (VOID**)&LoadedImage,\r
+                  gImageHandle,\r
+                  NULL,\r
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                  );\r
+  if (!EFI_ERROR (Status)) {\r
+    DevPathNode = LoadedImage->FilePath;\r
+    if (DevPathNode == NULL) {\r
+      return NULL;\r
+    }\r
+    while (!IsDevicePathEnd (DevPathNode)) {\r
+      NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode);\r
+      if (NameGuid != NULL) {\r
+        Status = gBS->HandleProtocol (\r
+                        LoadedImage->DeviceHandle,\r
+                        &gEfiFirmwareVolume2ProtocolGuid,\r
+                        &Fv2\r
+                        );\r
+        if (!EFI_ERROR (Status)) {\r
+          Status = Fv2->ReadSection (\r
+                          Fv2,\r
+                          NameGuid,\r
+                          EFI_SECTION_USER_INTERFACE,\r
+                          0,\r
+                          (VOID **)&ImageName,\r
+                          &BufferSize,\r
+                          &AuthenticationStatus\r
+                          );\r
+          if (!EFI_ERROR (Status)) {\r
+            break;\r
+          }\r
+          ImageName = NULL;\r
+        }\r
+      }\r
+      //\r
+      // Next device path node\r
+      //\r
+      DevPathNode = NextDevicePathNode (DevPathNode);\r
+    }\r
+    if (ImageName == NULL) {\r
+      ImageName = ConvertDevicePathToText (LoadedImage->FilePath, TRUE, TRUE);\r
+    }\r
+  }\r
+  return ImageName;\r
+}\r
+\r
 /**\r
   Function for 'drivers' command.\r
 \r
 /**\r
   Function for 'drivers' command.\r
 \r
@@ -186,6 +272,7 @@ ShellCommandRunDrivers (
   CHAR16              *Temp2;\r
   CONST CHAR16        *FullDriverName;\r
   CHAR16              *TruncatedDriverName;\r
   CHAR16              *Temp2;\r
   CONST CHAR16        *FullDriverName;\r
   CHAR16              *TruncatedDriverName;\r
+  CHAR16              *ImageName;\r
   CHAR16              *FormatString;\r
   UINT32              DriverVersion;\r
   BOOLEAN             DriverConfig;\r
   CHAR16              *FormatString;\r
   UINT32              DriverVersion;\r
   BOOLEAN             DriverConfig;\r
@@ -274,6 +361,7 @@ ShellCommandRunDrivers (
         DriverConfig   = ReturnDriverConfig(*HandleWalker);\r
         DriverDiag     = ReturnDriverDiag  (*HandleWalker);\r
         FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);\r
         DriverConfig   = ReturnDriverConfig(*HandleWalker);\r
         DriverDiag     = ReturnDriverDiag  (*HandleWalker);\r
         FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);\r
+        ImageName      = GetImageNameFromHandle (*HandleWalker);\r
 \r
         TruncatedDriverName = NULL;\r
         if (!SfoFlag && (FullDriverName != NULL)) {\r
 \r
         TruncatedDriverName = NULL;\r
         if (!SfoFlag && (FullDriverName != NULL)) {\r
@@ -293,15 +381,18 @@ ShellCommandRunDrivers (
           DeviceCount,\r
           ChildCount,\r
           SfoFlag?FullDriverName:TruncatedDriverName,\r
           DeviceCount,\r
           ChildCount,\r
           SfoFlag?FullDriverName:TruncatedDriverName,\r
-          Temp2==NULL?L"":Temp2\r
-         );\r
+          SfoFlag ? (Temp2 == NULL ? L"" : Temp2) : (ImageName == NULL ? L"" : ImageName)\r
+          );\r
         if (TruncatedDriverName != NULL) {\r
           FreePool (TruncatedDriverName);\r
         }\r
         if (Temp2 != NULL) {\r
           FreePool(Temp2);\r
         }\r
         if (TruncatedDriverName != NULL) {\r
           FreePool (TruncatedDriverName);\r
         }\r
         if (Temp2 != NULL) {\r
           FreePool(Temp2);\r
         }\r
-        \r
+        if (ImageName != NULL) {\r
+          FreePool (ImageName);\r
+        }\r
+\r
         if (ShellGetExecutionBreakFlag ()) {\r
           ShellStatus = SHELL_ABORTED;\r
           break;\r
         if (ShellGetExecutionBreakFlag ()) {\r
           ShellStatus = SHELL_ABORTED;\r
           break;\r
index b061243af7898bc8b82411ecc735922d48094146..fa51677aa28488983dabd3af878de67aaa46dd90 100644 (file)
 \r
 #include <IndustryStandard/Pci.h>\r
 \r
 \r
 #include <IndustryStandard/Pci.h>\r
 \r
+#include <Pi/PiFirmwareVolume.h>\r
+#include <Pi/PiFirmwareFile.h>\r
+#include <Protocol/FirmwareVolume2.h>\r
+\r
 #include <Protocol/Shell.h>\r
 #include <Protocol/ShellParameters.h>\r
 #include <Protocol/DevicePath.h>\r
 #include <Protocol/Shell.h>\r
 #include <Protocol/ShellParameters.h>\r
 #include <Protocol/DevicePath.h>\r
index 7a3e61e5fc56254f21e2d5dc94dd5a71e6d1e46d..5ca548d9f6393f1d0471f891cdcf913e30a59d3f 100644 (file)
@@ -93,7 +93,7 @@
 "             T   D\r\n"\r
 "             Y C I\r\n"\r
 "             P F A\r\n"\r
 "             T   D\r\n"\r
 "             Y C I\r\n"\r
 "             P F A\r\n"\r
-"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE PATH\r\n"\r
+"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE NAME\r\n"\r
 "=== ======== = = = === === =================================== ==========\r\n"\r
 #string STR_DRIVERS_ITEM_LINE     #language en-US "%H%3x%N %08x %1c %1c %1c %3d %3d %-35s %s\r\n"\r
 #string STR_DRIVERS_ITEM_LINE_SFO #language en-US "DriversInfo,"%x","%x","%c","%c","%c","%d","%d","%s","%s"\r\n"\r
 "=== ======== = = = === === =================================== ==========\r\n"\r
 #string STR_DRIVERS_ITEM_LINE     #language en-US "%H%3x%N %08x %1c %1c %1c %3d %3d %-35s %s\r\n"\r
 #string STR_DRIVERS_ITEM_LINE_SFO #language en-US "DriversInfo,"%x","%x","%c","%c","%c","%d","%d","%s","%s"\r\n"\r