From nobody Sat Nov 2 10:31:21 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zoho.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1493934805687419.18583525291115; Thu, 4 May 2017 14:53:25 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 148E721959D22; Thu, 4 May 2017 14:53:23 -0700 (PDT) Received: from mx0b-00010702.pphosted.com (mx0a-00010702.pphosted.com [148.163.156.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 70A9E21959D2A for ; Thu, 4 May 2017 14:53:21 -0700 (PDT) Received: from pps.filterd (m0098780.ppops.net [127.0.0.1]) by mx0a-00010702.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v44Lp7Fe032153; Thu, 4 May 2017 16:53:20 -0500 Received: from ni.com (skprod2.natinst.com [130.164.80.23]) by mx0a-00010702.pphosted.com with ESMTP id 2a72m508wd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 04 May 2017 16:53:20 -0500 Received: from us-aus-exhub2.ni.corp.natinst.com (us-aus-exhub2.ni.corp.natinst.com [130.164.68.32]) by us-aus-skprod2.natinst.com (8.16.0.17/8.16.0.17) with ESMTPS id v44LrJBk001532 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 4 May 2017 16:53:19 -0500 Received: from us-aus-exhub1.ni.corp.natinst.com (130.164.68.41) by us-aus-exhub2.ni.corp.natinst.com (130.164.68.32) with Microsoft SMTP Server (TLS) id 15.0.1156.6; Thu, 4 May 2017 16:53:19 -0500 Received: from jmw-lm181.ni.corp.natinst.com (130.164.49.7) by us-aus-exhub1.ni.corp.natinst.com (130.164.68.41) with Microsoft SMTP Server id 15.0.1156.6 via Frontend Transport; Thu, 4 May 2017 16:53:19 -0500 X-Original-To: edk2-devel@lists.01.org From: Jeff Westfahl To: Date: Thu, 4 May 2017 16:53:04 -0500 Message-ID: <1493934784-30012-4-git-send-email-jeff.westfahl@ni.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493934784-30012-1-git-send-email-jeff.westfahl@ni.com> References: <1493934784-30012-1-git-send-email-jeff.westfahl@ni.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-05-04_14:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_policy_notspam policy=outbound_policy score=30 priorityscore=1501 malwarescore=0 suspectscore=13 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=30 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1705040308 Subject: [edk2] [PATCH 3/3] ShellPkg/HandleParsingLib: Show LoadedImageProtocol file name X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Jaben Carsey Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This patch adds support for showing the file name associated with a LoadedImageProtocol file path. This is a behavior that was present in the old shell but has been lost in the new shell. For example, using 'dh -v' in the old shell: Handle D3 (3A552218) Image (3A54C918) File:MicrocodeUpdate ParentHandle..: 3A666398 vs. the new shell: D3: 3A552218 LoadedImage Revision......: 0x00001000 ParentHandle..: 3A666398 Here's what the output of 'dh -v' looks like after this patch: D3: 3A552218 LoadedImage Name..........: MicrocodeUpdate Revision......: 0x00001000 ParentHandle..: 3A666398 This seems like useful information for the shell to display. Cc: Ruiyu Ni Cc: Jaben Carsey Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Westfahl --- .../UefiHandleParsingLib/UefiHandleParsingLib.c | 90 ++++++++++++++++++= +++- .../UefiHandleParsingLib/UefiHandleParsingLib.uni | 2 + 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c b= /ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c index c96f6dd..74934f8 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c @@ -16,12 +16,85 @@ =20 #include "UefiHandleParsingLib.h" #include "IndustryStandard/Acpi10.h" +#include "Pi/PiFirmwareFile.h" +#include "Pi/PiFirmwareVolume.h" +#include "Protocol/FirmwareVolume2.h" =20 EFI_HANDLE mHandleParsingHiiHandle =3D NULL; HANDLE_INDEX_LIST mHandleList =3D {{{NULL,NULL},0,0},0}; GUID_INFO_BLOCK *mGuidList; UINTN mGuidListCount; /** + Function to find the file name associated with a LoadedImageProtocol. + + @param[in] LoadedImage An instance of LoadedImageProtocol. + + @retval A string representation of the file name asso= ciated + with LoadedImage, or NULL if no name can be f= ound. +**/ +CHAR16* +FindLoadedImageFileName ( + IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage + ) +{ + EFI_GUID *NameGuid; + EFI_STATUS Status; + EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; + VOID *Buffer; + UINTN BufferSize; + UINT32 AuthenticationStatus; + + // + // Only subtype MEDIA_PIWG_FW_FILE_DP of type MEDIA_DEVICE_PATH is suppo= rted. + // + if ( (LoadedImage =3D=3D NULL) + || (LoadedImage->FilePath =3D=3D NULL) + || (LoadedImage->FilePath->Type !=3D MEDIA_DEVICE_PATH) + || (LoadedImage->FilePath->SubType !=3D MEDIA_PIWG_FW_FILE_DP) + ) { + return (NULL); + } + + NameGuid =3D EfiGetNameGuidFromFwVolDevicePathNode((MEDIA_FW_VOL_FILEPAT= H_DEVICE_PATH *)LoadedImage->FilePath); + + if (NameGuid =3D=3D NULL) { + return (NULL); + } + + // + // Get the FirmwareVolume2Protocol of the device handle that this image = was + // loaded from. + // + Status =3D gBS->HandleProtocol( + LoadedImage->DeviceHandle, + &gEfiFirmwareVolume2ProtocolGuid, + (VOID**)&Fv); + + // + // FirmwareVolume2Protocol is PI, and is not required to be available. + // + if (EFI_ERROR(Status)) { + return (NULL); + } + + // + // Read the user interface section of the image. + // + Buffer =3D NULL; + Status =3D Fv->ReadSection(Fv, NameGuid, EFI_SECTION_USER_INTERFACE, 0, = &Buffer, &BufferSize, &AuthenticationStatus); + + if (EFI_ERROR(Status)) { + return (NULL); + } + + // + // ReadSection returns just the section data, without any section header= . For + // a user interface section, the only data is the file name. + // + return (Buffer); +} + +/** Function to translate the EFI_MEMORY_TYPE into a string. =20 @param[in] Memory The memory type. @@ -169,6 +242,7 @@ LoadedImageProtocolDumpInformation( EFI_STATUS Status; CHAR16 *RetVal; CHAR16 *Temp; + CHAR16 *FileName; CHAR16 *FilePath; CHAR16 *CodeType; CHAR16 *DataType; @@ -192,6 +266,20 @@ LoadedImageProtocolDumpInformation( =20 HandleParsingHiiInit(); =20 + FileName =3D FindLoadedImageFileName(LoadedImage); + + RetVal =3D NULL; + if (FileName) { + Temp =3D HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_LI_DUM= P_NAME), NULL); + + if (Temp !=3D NULL) { + RetVal =3D CatSPrint(NULL, Temp, FileName); + } + + SHELL_FREE_NON_NULL(Temp); + SHELL_FREE_NON_NULL(FileName); + } + Temp =3D HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_LI_DUMP_= MAIN), NULL); if (Temp =3D=3D NULL) { return NULL; @@ -203,7 +291,7 @@ LoadedImageProtocolDumpInformation( CodeType =3D ConvertMemoryType(LoadedImage->ImageCodeType); =20 RetVal =3D CatSPrint( - NULL, + RetVal, Temp, LoadedImage->Revision, LoadedImage->ParentHandle, diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni= b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni index 7b3711d..e07c9a1 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni @@ -348,6 +348,8 @@ =20 =20 =20 +#string STR_LI_DUMP_NAME #language en-US " Name..........: %%= H%s%%N\r\n" + #string STR_LI_DUMP_MAIN #language en-US " Revision......: %%= H0x%08x%%N\r\n" " ParentHandle..: %%= H%x%%N\r\n" " SystemTable...: %%= H%x%%N\r\n" --=20 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel