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.88; helo=mga01.intel.com; envelope-from=hao.a.wu@intel.com; receiver=edk2-devel@lists.01.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 0059A21F2AF79 for ; Thu, 28 Sep 2017 01:29:48 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Sep 2017 01:33:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,449,1500966000"; d="scan'208";a="156473900" Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by fmsmga005.fm.intel.com with ESMTP; 28 Sep 2017 01:33:02 -0700 From: Hao Wu To: edk2-devel@lists.01.org Cc: Hao Wu , Ruiyu Ni , Jaben Carsey Date: Thu, 28 Sep 2017 16:32:59 +0800 Message-Id: <20170928083259.3776-1-hao.a.wu@intel.com> X-Mailer: git-send-email 2.12.0.windows.1 Subject: [PATCH v2] 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: Thu, 28 Sep 2017 08:29:49 -0000 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=655 V2 change: Put some strings into the UNI file for localization. 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 | 86 ++++++++++++++++++++++ .../UefiHandleParsingLib/UefiHandleParsingLib.h | 1 + .../UefiHandleParsingLib/UefiHandleParsingLib.inf | 1 + .../UefiHandleParsingLib/UefiHandleParsingLib.uni | 9 +++ 4 files changed, 97 insertions(+) diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c index d12466c7b0..a228226623 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c @@ -1933,6 +1933,87 @@ 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 *PartitionType; + CHAR16 *EfiSystemPartition; + CHAR16 *RetVal; + + 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 (); + + switch (PartitionInfo->Type) { + case PARTITION_TYPE_OTHER: + PartitionType = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_PARTINFO_DUMP_TYPE_OTHER), NULL); + break; + case PARTITION_TYPE_MBR: + PartitionType = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_PARTINFO_DUMP_TYPE_MBR), NULL); + break; + case PARTITION_TYPE_GPT: + PartitionType = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_PARTINFO_DUMP_TYPE_GPT), NULL); + break; + default: + PartitionType = NULL; + break; + } + if (PartitionType == NULL) { + return NULL; + } + + if (PartitionInfo->System == 1) { + EfiSystemPartition = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_PARTINFO_DUMP_EFI_SYS_PART), NULL); + } else { + EfiSystemPartition = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_PARTINFO_DUMP_NOT_EFI_SYS_PART), NULL); + } + if (EfiSystemPartition == NULL) { + SHELL_FREE_NON_NULL (PartitionType); + return NULL; + } + + RetVal = CatSPrint ( + NULL, + L"%s\r\n%s", + PartitionType, + EfiSystemPartition + ); + + SHELL_FREE_NON_NULL (EfiSystemPartition); + SHELL_FREE_NON_NULL (PartitionType); + return RetVal; +} + // // Put the information on the NT32 protocol GUIDs here so we are not dependant on the Nt32Pkg // @@ -2147,6 +2228,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..be583aa742 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,9 @@ " AttributesSetting : %%H%s%%N\r\n" " Compatibilities : %%H0x%L016x%%N\r\n" " LowestSupportedImageVersion : %%H0x%08x%%N\r\n" + +#string STR_PARTINFO_DUMP_TYPE_OTHER #language en-US " Partition Type : Other" +#string STR_PARTINFO_DUMP_TYPE_MBR #language en-US " Partition Type : MBR" +#string STR_PARTINFO_DUMP_TYPE_GPT #language en-US " Partition Type : GPT" +#string STR_PARTINFO_DUMP_EFI_SYS_PART #language en-US " EFI System Partition : Yes" +#string STR_PARTINFO_DUMP_NOT_EFI_SYS_PART #language en-US " EFI System Partition : No" -- 2.12.0.windows.1