From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.93; helo=mga11.intel.com; envelope-from=hao.a.wu@intel.com; receiver=edk2-devel@lists.01.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (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 891D320945BAC for ; Wed, 27 Sep 2017 05:40:04 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2017 05:43:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,445,1500966000"; d="scan'208";a="904374781" Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by FMSMGA003.fm.intel.com with ESMTP; 27 Sep 2017 05:43:16 -0700 From: Hao Wu To: edk2-devel@lists.01.org Cc: Hao Wu , Ruiyu Ni , Jaben Carsey Date: Wed, 27 Sep 2017 20:43:12 +0800 Message-Id: <20170927124312.27228-1-hao.a.wu@intel.com> X-Mailer: git-send-email 2.12.0.windows.1 Subject: [PATCH] ShellPkg/dh: Add the 'dh' dump support for Partition Info protocol 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: , X-List-Received-Date: Wed, 27 Sep 2017 12:40:04 -0000 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=655 The dump information will include: a. The type of the partition (Mbr, Gpt or Other); b. Whether the partition is an EFI System Partition. Cc: Ruiyu Ni Cc: Jaben Carsey Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Hao Wu --- .../UefiHandleParsingLib/UefiHandleParsingLib.c | 68 ++++++++++++++++++++++ .../UefiHandleParsingLib/UefiHandleParsingLib.h | 1 + .../UefiHandleParsingLib/UefiHandleParsingLib.inf | 1 + .../UefiHandleParsingLib/UefiHandleParsingLib.uni | 6 ++ 4 files changed, 76 insertions(+) diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c index d12466c7b0..1a56a699ba 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c @@ -1933,6 +1933,69 @@ ERROR_EXIT: return NULL; } +/** + Function to dump information about Partition Information protocol. + + This will allocate the return buffer from boot services pool. + + @param[in] TheHandle The handle that has the protocol installed. + @param[in] Verbose TRUE for additional information, FALSE otherwise. + + @retval A pointer to a string containing the information. +**/ +CHAR16* +EFIAPI +PartitionInfoProtocolDumpInformation ( + IN CONST EFI_HANDLE TheHandle, + IN CONST BOOLEAN Verbose + ) +{ + EFI_STATUS Status; + EFI_PARTITION_INFO_PROTOCOL *PartitionInfo; + CHAR16 *GetString; + CHAR16 *RetVal; + CONST CHAR16 *PartitionType; + + if (!Verbose) { + return NULL; + } + + Status = gBS->OpenProtocol ( + TheHandle, + &gEfiPartitionInfoProtocolGuid, + (VOID**)&PartitionInfo, + gImageHandle, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + if (EFI_ERROR (Status)) { + return NULL; + } + + HandleParsingHiiInit (); + GetString = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_PARTINFO_DUMP_MAIN), NULL); + if (GetString == NULL) { + return NULL; + } + + switch (PartitionInfo->Type) { + case PARTITION_TYPE_OTHER: PartitionType = L"Other"; break; + case PARTITION_TYPE_MBR: PartitionType = L"Mbr"; break; + case PARTITION_TYPE_GPT: PartitionType = L"Gpt"; break; + default: return NULL; + } + + RetVal = CatSPrint ( + NULL, + GetString, + PartitionType, + PartitionInfo->System == 1 ? L"Yes" : L"No" + ); + + SHELL_FREE_NON_NULL (GetString); + return RetVal; +} + // // Put the information on the NT32 protocol GUIDs here so we are not dependant on the Nt32Pkg // @@ -2147,6 +2210,11 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = { {STRING_TOKEN(STR_ADAPTER_INFO), &gEfiAdapterInformationProtocolGuid, AdapterInformationDumpInformation}, // +// UEFI 2.7 +// + {STRING_TOKEN(STR_PARTITION_INFO), &gEfiPartitionInfoProtocolGuid, PartitionInfoProtocolDumpInformation}, + +// // PI Spec ones // {STRING_TOKEN(STR_IDE_CONT_INIT), &gEfiIdeControllerInitProtocolGuid, NULL}, diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h index cf849658aa..68bb00c620 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h @@ -138,6 +138,7 @@ #include #include #include +#include #include #include diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf index 4c1c3d3846..ee1b85552b 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf @@ -292,6 +292,7 @@ gEfiHttpProtocolGuid ## UNDEFINED gEfiHttpUtilitiesProtocolGuid ## UNDEFINED gEfiRestProtocolGuid ## UNDEFINED + gEfiPartitionInfoProtocolGuid ## CONSUMES [Guids] gEfiFileInfoGuid ## UNDEFINED diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni index f49ca94623..1f2cc4a6f9 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni @@ -152,6 +152,9 @@ #string STR_SHELL #language en-US "Shell" #string STR_SHELL_DYNAMIC #language en-US "ShellDynamicCommand" +// Partition Information +#string STR_PARTITION_INFO #language en-US "PartitionInformation" + #string STR_EFI_GLOBAL_VARIABLE #language en-US "EFIGlobalVariable" // NT32 emulation @@ -478,3 +481,6 @@ " AttributesSetting : %%H%s%%N\r\n" " Compatibilities : %%H0x%L016x%%N\r\n" " LowestSupportedImageVersion : %%H0x%08x%%N\r\n" + +#string STR_PARTINFO_DUMP_MAIN #language en-US " Partition Type : %s\r\n" + " EFI System Partition : %s" -- 2.12.0.windows.1