public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@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>
Subject: Re: [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode
Date: Thu, 10 Aug 2017 08:53:11 +0100	[thread overview]
Message-ID: <CAKv+Gu8_8f60y0cYnOYTax0hbeuu2HOeaag53q6gaFzLxPq9Ug@mail.gmail.com> (raw)
In-Reply-To: <20170809074935.230172-2-ruiyu.ni@intel.com>

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


  reply	other threads:[~2017-08-10  7:50 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 [this message]
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=CAKv+Gu8_8f60y0cYnOYTax0hbeuu2HOeaag53q6gaFzLxPq9Ug@mail.gmail.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