summaryrefslogtreecommitdiff
path: root/ShellPkg
diff options
context:
space:
mode:
authorHuajing Li <huajing.li@intel.com>2017-08-09 10:54:32 +0800
committerRuiyu Ni <ruiyu.ni@intel.com>2017-08-10 12:29:34 +0800
commit416d48f755518fd1d202b97be2e9944df6e8f0d4 (patch)
treeb1f7c01fad696d49323987b4973022f5f11f3b7b /ShellPkg
parent7ef0dae092afcfb6fab7e8372c78097672168c4a (diff)
downloadedk2-416d48f755518fd1d202b97be2e9944df6e8f0d4.zip
edk2-416d48f755518fd1d202b97be2e9944df6e8f0d4.tar.gz
edk2-416d48f755518fd1d202b97be2e9944df6e8f0d4.tar.bz2
ShellPkg/drivers: Show Image Name in non-SFO mode
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Huajing Li <huajing.li@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Diffstat (limited to 'ShellPkg')
-rw-r--r--ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c99
-rw-r--r--ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h4
-rw-r--r--ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni2
3 files changed, 100 insertions, 5 deletions
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
index ffdef04..f3c1476 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 b061243..fa51677 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 7a3e61e..5ca548d 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"