public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ruiyu Ni <ruiyu.ni@intel.com>
To: edk2-devel@lists.01.org
Cc: Huajing Li <huajing.li@intel.com>
Subject: [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode
Date: Wed,  9 Aug 2017 15:49:34 +0800	[thread overview]
Message-ID: <20170809074935.230172-2-ruiyu.ni@intel.com> (raw)
In-Reply-To: <20170809074935.230172-1-ruiyu.ni@intel.com>

From: Huajing Li <huajing.li@intel.com>

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Huajing Li <huajing.li@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
---
 .../Library/UefiShellDriver1CommandsLib/Drivers.c  | 99 +++++++++++++++++++++-
 .../UefiShellDriver1CommandsLib.h                  |  4 +
 .../UefiShellDriver1CommandsLib.uni                |  2 +-
 3 files changed, 100 insertions(+), 5 deletions(-)

diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
index ffdef04352..f3c1476872 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
@@ -2,7 +2,7 @@
   Main file for Drivers shell Driver1 function.
 
   (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>
-  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
   which accompanies this distribution.  The full text of the license may be found at
@@ -161,6 +161,92 @@ ReturnDriverVersion(
 }
 
 /**
+  Get image name from Image Handle.
+
+  @param[in] Handle      Image Handle
+
+  @return         A pointer to the image name as a string.
+**/
+CHAR16 *
+GetImageNameFromHandle (
+  IN CONST EFI_HANDLE Handle
+  )
+{
+  EFI_STATUS                        Status;
+  EFI_DRIVER_BINDING_PROTOCOL       *DriverBinding;
+  EFI_LOADED_IMAGE_PROTOCOL         *LoadedImage;
+  EFI_DEVICE_PATH_PROTOCOL          *DevPathNode;
+  EFI_GUID                          *NameGuid;
+  CHAR16                            *ImageName;
+  UINTN                             BufferSize;
+  UINT32                            AuthenticationStatus;
+  EFI_FIRMWARE_VOLUME2_PROTOCOL     *Fv2;
+
+  LoadedImage   = NULL;
+  DriverBinding = NULL;
+  ImageName     = NULL;
+
+  Status = gBS->OpenProtocol (
+                  Handle,
+                  &gEfiDriverBindingProtocolGuid,
+                  (VOID **) &DriverBinding,
+                  NULL,
+                  NULL,
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
+                  );
+  if (EFI_ERROR (Status)) {
+      return NULL;
+  }
+  Status = gBS->OpenProtocol (
+                  DriverBinding->ImageHandle,
+                  &gEfiLoadedImageProtocolGuid,
+                  (VOID**)&LoadedImage,
+                  gImageHandle,
+                  NULL,
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
+                  );
+  if (!EFI_ERROR (Status)) {
+    DevPathNode = LoadedImage->FilePath;
+    if (DevPathNode == NULL) {
+      return NULL;
+    }
+    while (!IsDevicePathEnd (DevPathNode)) {
+      NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode);
+      if (NameGuid != NULL) {
+        Status = gBS->HandleProtocol (
+                        LoadedImage->DeviceHandle,
+                        &gEfiFirmwareVolume2ProtocolGuid,
+                        &Fv2
+                        );
+        if (!EFI_ERROR (Status)) {
+          Status = Fv2->ReadSection (
+                          Fv2,
+                          NameGuid,
+                          EFI_SECTION_USER_INTERFACE,
+                          0,
+                          (VOID **)&ImageName,
+                          &BufferSize,
+                          &AuthenticationStatus
+                          );
+          if (!EFI_ERROR (Status)) {
+            break;
+          }
+          ImageName = NULL;
+        }
+      }
+      //
+      // Next device path node
+      //
+      DevPathNode = NextDevicePathNode (DevPathNode);
+    }
+    if (ImageName == NULL) {
+      ImageName = ConvertDevicePathToText (LoadedImage->FilePath, TRUE, TRUE);
+    }
+  }
+  return ImageName;
+}
+
+/**
   Function for 'drivers' command.
 
   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
@@ -186,6 +272,7 @@ ShellCommandRunDrivers (
   CHAR16              *Temp2;
   CONST CHAR16        *FullDriverName;
   CHAR16              *TruncatedDriverName;
+  CHAR16              *ImageName;
   CHAR16              *FormatString;
   UINT32              DriverVersion;
   BOOLEAN             DriverConfig;
@@ -274,6 +361,7 @@ ShellCommandRunDrivers (
         DriverConfig   = ReturnDriverConfig(*HandleWalker);
         DriverDiag     = ReturnDriverDiag  (*HandleWalker);
         FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);
+        ImageName      = GetImageNameFromHandle (*HandleWalker);
 
         TruncatedDriverName = NULL;
         if (!SfoFlag && (FullDriverName != NULL)) {
@@ -293,15 +381,18 @@ ShellCommandRunDrivers (
           DeviceCount,
           ChildCount,
           SfoFlag?FullDriverName:TruncatedDriverName,
-          Temp2==NULL?L"":Temp2
-         );
+          SfoFlag ? (Temp2 == NULL ? L"" : Temp2) : (ImageName == NULL ? L"" : ImageName)
+          );
         if (TruncatedDriverName != NULL) {
           FreePool (TruncatedDriverName);
         }
         if (Temp2 != NULL) {
           FreePool(Temp2);
         }
-        
+        if (ImageName != NULL) {
+          FreePool (ImageName);
+        }
+
         if (ShellGetExecutionBreakFlag ()) {
           ShellStatus = SHELL_ABORTED;
           break;
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
index b061243af7..fa51677aa2 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
@@ -24,6 +24,10 @@
 
 #include <IndustryStandard/Pci.h>
 
+#include <Pi/PiFirmwareVolume.h>
+#include <Pi/PiFirmwareFile.h>
+#include <Protocol/FirmwareVolume2.h>
+
 #include <Protocol/Shell.h>
 #include <Protocol/ShellParameters.h>
 #include <Protocol/DevicePath.h>
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
index 7a3e61e5fc..5ca548d9f6 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
@@ -93,7 +93,7 @@
 "             T   D\r\n"
 "             Y C I\r\n"
 "             P F A\r\n"
-"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE PATH\r\n"
+"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE NAME\r\n"
 "=== ======== = = = === === =================================== ==========\r\n"
 #string STR_DRIVERS_ITEM_LINE     #language en-US "%H%3x%N %08x %1c %1c %1c %3d %3d %-35s %s\r\n"
 #string STR_DRIVERS_ITEM_LINE_SFO #language en-US "DriversInfo,"%x","%x","%c","%c","%c","%d","%d","%s","%s"\r\n"
-- 
2.12.2.windows.2



       reply	other threads:[~2017-08-09  7:47 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20170809074935.230172-1-ruiyu.ni@intel.com>
2017-08-09  7:49 ` Ruiyu Ni [this message]
2017-08-10  7:53   ` [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode Ard Biesheuvel
2017-08-10 10:14     ` Leif Lindholm
2017-08-09  7:49 ` [PATCH 2/2] ShellPkg/driver: Show "-" " Ruiyu Ni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170809074935.230172-2-ruiyu.ni@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox