From: Leif Lindholm <leif.lindholm@linaro.org>
To: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
Huajing Li <huajing.li@intel.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: Re: [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode
Date: Thu, 10 Aug 2017 11:14:35 +0100 [thread overview]
Message-ID: <20170810101435.pdgzhakln4vq3vwe@bivouac.eciton.net> (raw)
In-Reply-To: <CAKv+Gu8_8f60y0cYnOYTax0hbeuu2HOeaag53q6gaFzLxPq9Ug@mail.gmail.com>
At a quick glance, the fix should probably be
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
index 4d876bb108..26b785c563 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
@@ -216,7 +216,7 @@ GetImageNameFromHandle (
Status = gBS->HandleProtocol (
LoadedImage->DeviceHandle,
&gEfiFirmwareVolume2ProtocolGuid,
- &Fv2
+ (VOID **)&Fv2
);
if (!EFI_ERROR (Status)) {
Status = Fv2->ReadSection (
/
Leif
On Thu, Aug 10, 2017 at 08:53:11AM +0100, Ard Biesheuvel wrote:
> This patch is breaking the GCC build:
>
> ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c:
> In function 'GetImageNameFromHandle':
> 220:25: error: passing argument 3 of 'gBS->HandleProtocol' from
> incompatible pointer type [-Werror]
> 220:25: note: expected 'void **' but argument is of type 'struct
> EFI_FIRMWARE_VOLUME2_PROTOCOL **'
>
> Please fix.
>
> Regards,
> Ard.
>
>
> On 9 August 2017 at 08:49, Ruiyu Ni <ruiyu.ni@intel.com> wrote:
> > 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
> >
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
next prev parent reply other threads:[~2017-08-10 10:12 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 ` [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode Ruiyu Ni
2017-08-10 7:53 ` Ard Biesheuvel
2017-08-10 10:14 ` Leif Lindholm [this message]
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=20170810101435.pdgzhakln4vq3vwe@bivouac.eciton.net \
--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