From nobody Sat May 4 00:13:46 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.zohomail.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 1499405994889197.70577180017597; Thu, 6 Jul 2017 22:39:54 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 6DA5F21CC5368; Thu, 6 Jul 2017 22:38:10 -0700 (PDT) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 121E721CAD98C for ; Thu, 6 Jul 2017 22:38:09 -0700 (PDT) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Jul 2017 22:39:50 -0700 Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by fmsmga006.fm.intel.com with ESMTP; 06 Jul 2017 22:39:49 -0700 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,320,1496127600"; d="scan'208";a="124202123" From: Hao Wu To: edk2-devel@lists.01.org Date: Fri, 7 Jul 2017 13:39:43 +0800 Message-Id: <20170707053944.10500-2-hao.a.wu@intel.com> X-Mailer: git-send-email 2.12.0.windows.1 In-Reply-To: <20170707053944.10500-1-hao.a.wu@intel.com> References: <20170707053944.10500-1-hao.a.wu@intel.com> Subject: [edk2] [PATCH v2 1/2] MdePkg: Add EFI Partition Information Protocol definitions 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: Hao Wu , Ruiyu Ni , Michael D Kinney , Liming Gao MIME-Version: 1.0 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" Cc: Ruiyu Ni Cc: Michael D Kinney Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu Reviewed-by: Ruiyu Ni --- MdePkg/Include/Protocol/PartitionInfo.h | 74 ++++++++++++++++++++ MdePkg/MdePkg.dec | 3 + 2 files changed, 77 insertions(+) diff --git a/MdePkg/Include/Protocol/PartitionInfo.h b/MdePkg/Include/Proto= col/PartitionInfo.h new file mode 100644 index 0000000000..005b1cf18a --- /dev/null +++ b/MdePkg/Include/Protocol/PartitionInfo.h @@ -0,0 +1,74 @@ +/** @file + This file defines the EFI Partition Information Protocol. + + Copyright (c) 2017, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + + @par Revision Reference: + This Protocol is introduced in UEFI Specification 2.7 + +**/ + +#ifndef __PARTITION_INFO_PROTOCOL_H__ +#define __PARTITION_INFO_PROTOCOL_H__ + +#include +#include + +// +// EFI Partition Information Protocol GUID value +// +#define EFI_PARTITION_INFO_PROTOCOL_GUID \ + { 0x8cf2f62c, 0xbc9b, 0x4821, { 0x80, 0x8d, 0xec, 0x9e, 0xc4, 0x21, 0xa1= , 0xa0 }}; + + +#define EFI_PARTITION_INFO_PROTOCOL_REVISION 0x0001000 +#define PARTITION_TYPE_OTHER 0x00 +#define PARTITION_TYPE_MBR 0x01 +#define PARTITION_TYPE_GPT 0x02 + +#pragma pack(1) + +/// +/// Partition Information Protocol structure. +/// +typedef struct { + // + // Set to EFI_PARTITION_INFO_PROTOCOL_REVISION. + // + UINT32 Revision; + // + // Partition info type (PARTITION_TYPE_MBR, PARTITION_TYPE_GPT, or PARTI= TION_TYPE_OTHER). + // + UINT32 Type; + // + // If 1, partition describes an EFI System Partition. + // + UINT8 System; + UINT8 Reserved[7]; + union { + /// + /// MBR data + /// + MBR_PARTITION_RECORD Mbr; + /// + /// GPT data + /// + EFI_PARTITION_ENTRY Gpt; + } Info; +} EFI_PARTITION_INFO_PROTOCOL; + +#pragma pack() + +/// +/// Partition Information Protocol GUID variable. +/// +extern EFI_GUID gEfiPartitionInfoProtocolGuid; + +#endif diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 7a7504b7a3..c48f248526 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -1671,6 +1671,9 @@ ## Include/Protocol/BluetoothLeConfig.h gEfiBluetoothLeConfigProtocolGuid =3D { 0x8f76da58, 0x1f99, 0x42= 75, { 0xa4, 0xec, 0x47, 0x56, 0x51, 0x5b, 0x1c, 0xe8 } } =20 + ## Include/Protocol/PartitionInfo.h + gEfiPartitionInfoProtocolGuid =3D { 0x8cf2f62c, 0xbc9b, 0x48= 21, { 0x80, 0x8d, 0xec, 0x9e, 0xc4, 0x21, 0xa1, 0xa0 }} + # # Protocols defined in Shell2.0 # --=20 2.12.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel From nobody Sat May 4 00:13:46 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.zohomail.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 1499405996806109.48213499104406; Thu, 6 Jul 2017 22:39:56 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id A7C3721CC536B; Thu, 6 Jul 2017 22:38:11 -0700 (PDT) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 45D5621CC535F for ; Thu, 6 Jul 2017 22:38:10 -0700 (PDT) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Jul 2017 22:39:51 -0700 Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by fmsmga006.fm.intel.com with ESMTP; 06 Jul 2017 22:39:50 -0700 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,320,1496127600"; d="scan'208";a="124202133" From: Hao Wu To: edk2-devel@lists.01.org Date: Fri, 7 Jul 2017 13:39:44 +0800 Message-Id: <20170707053944.10500-3-hao.a.wu@intel.com> X-Mailer: git-send-email 2.12.0.windows.1 In-Reply-To: <20170707053944.10500-1-hao.a.wu@intel.com> References: <20170707053944.10500-1-hao.a.wu@intel.com> Subject: [edk2] [PATCH v2 2/2] MdeModulePkg/PartitionDxe: Add impl of Partition Information 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: , Cc: Hao Wu MIME-Version: 1.0 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" Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bret Barkelew Signed-off-by: Hao Wu Reviewed-by: Ruiyu Ni --- MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c | 43 ++++++++---= ---- MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c | 55 +++++++++++= +-------- MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c | 51 +++++++++++= +------ MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c | 23 ++++++-- MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h | 48 +++++++++--= ------ MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf | 3 +- 6 files changed, 135 insertions(+), 88 deletions(-) diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c b/MdeModul= ePkg/Universal/Disk/PartitionDxe/ElTorito.c index 2af38429dd..2084ee5abe 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c @@ -1,7 +1,7 @@ /** @file Decode an El Torito formatted CD-ROM =20 -Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
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 @@ -44,22 +44,23 @@ PartitionInstallElToritoChildHandles ( IN EFI_DEVICE_PATH_PROTOCOL *DevicePath ) { - EFI_STATUS Status; - UINT64 VolDescriptorOffset; - UINT32 Lba2KB; - EFI_BLOCK_IO_MEDIA *Media; - CDROM_VOLUME_DESCRIPTOR *VolDescriptor; - ELTORITO_CATALOG *Catalog; - UINTN Check; - UINTN Index; - UINTN BootEntry; - UINTN MaxIndex; - UINT16 *CheckBuffer; - CDROM_DEVICE_PATH CdDev; - UINT32 SubBlockSize; - UINT32 SectorCount; - EFI_STATUS Found; - UINT32 VolSpaceSize; + EFI_STATUS Status; + UINT64 VolDescriptorOffset; + UINT32 Lba2KB; + EFI_BLOCK_IO_MEDIA *Media; + CDROM_VOLUME_DESCRIPTOR *VolDescriptor; + ELTORITO_CATALOG *Catalog; + UINTN Check; + UINTN Index; + UINTN BootEntry; + UINTN MaxIndex; + UINT16 *CheckBuffer; + CDROM_DEVICE_PATH CdDev; + UINT32 SubBlockSize; + UINT32 SectorCount; + EFI_STATUS Found; + UINT32 VolSpaceSize; + EFI_PARTITION_INFO_PROTOCOL PartitionInfo; =20 Found =3D EFI_NOT_FOUND; Media =3D BlockIo->Media; @@ -248,6 +249,10 @@ PartitionInstallElToritoChildHandles ( ); } =20 + ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL)); + PartitionInfo.Revision =3D EFI_PARTITION_INFO_PROTOCOL_REVISION; + PartitionInfo.Type =3D PARTITION_TYPE_OTHER; + Status =3D PartitionInstallChildHandle ( This, Handle, @@ -257,10 +262,10 @@ PartitionInstallElToritoChildHandles ( BlockIo2, DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &CdDev, + &PartitionInfo, Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize), Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize) + CdDev.= PartitionSize - 1, - SubBlockSize, - FALSE + SubBlockSize ); if (!EFI_ERROR (Status)) { Found =3D EFI_SUCCESS; diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c b/MdeModulePkg/= Universal/Disk/PartitionDxe/Gpt.c index 35860515c1..2cd3e15e8a 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c @@ -13,7 +13,7 @@ PartitionValidGptTable(), PartitionCheckGptEntry() routine will accept d= isk partition content and validate the GPT table and GPT entry. =20 -Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
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 @@ -205,19 +205,20 @@ PartitionInstallGptChildHandles ( IN EFI_DEVICE_PATH_PROTOCOL *DevicePath ) { - EFI_STATUS Status; - UINT32 BlockSize; - EFI_LBA LastBlock; - MASTER_BOOT_RECORD *ProtectiveMbr; - EFI_PARTITION_TABLE_HEADER *PrimaryHeader; - EFI_PARTITION_TABLE_HEADER *BackupHeader; - EFI_PARTITION_ENTRY *PartEntry; - EFI_PARTITION_ENTRY *Entry; - EFI_PARTITION_ENTRY_STATUS *PEntryStatus; - UINTN Index; - EFI_STATUS GptValidStatus; - HARDDRIVE_DEVICE_PATH HdDev; - UINT32 MediaId; + EFI_STATUS Status; + UINT32 BlockSize; + EFI_LBA LastBlock; + MASTER_BOOT_RECORD *ProtectiveMbr; + EFI_PARTITION_TABLE_HEADER *PrimaryHeader; + EFI_PARTITION_TABLE_HEADER *BackupHeader; + EFI_PARTITION_ENTRY *PartEntry; + EFI_PARTITION_ENTRY *Entry; + EFI_PARTITION_ENTRY_STATUS *PEntryStatus; + UINTN Index; + EFI_STATUS GptValidStatus; + HARDDRIVE_DEVICE_PATH HdDev; + UINT32 MediaId; + EFI_PARTITION_INFO_PROTOCOL PartitionInfo; =20 ProtectiveMbr =3D NULL; PrimaryHeader =3D NULL; @@ -380,17 +381,25 @@ PartitionInstallGptChildHandles ( } =20 ZeroMem (&HdDev, sizeof (HdDev)); - HdDev.Header.Type =3D MEDIA_DEVICE_PATH; - HdDev.Header.SubType =3D MEDIA_HARDDRIVE_DP; + HdDev.Header.Type =3D MEDIA_DEVICE_PATH; + HdDev.Header.SubType =3D MEDIA_HARDDRIVE_DP; SetDevicePathNodeLength (&HdDev.Header, sizeof (HdDev)); =20 - HdDev.PartitionNumber =3D (UINT32) Index + 1; - HdDev.MBRType =3D MBR_TYPE_EFI_PARTITION_TABLE_HEADER; - HdDev.SignatureType =3D SIGNATURE_TYPE_GUID; - HdDev.PartitionStart =3D Entry->StartingLBA; - HdDev.PartitionSize =3D Entry->EndingLBA - Entry->StartingLBA + 1; + HdDev.PartitionNumber =3D (UINT32) Index + 1; + HdDev.MBRType =3D MBR_TYPE_EFI_PARTITION_TABLE_HEADER; + HdDev.SignatureType =3D SIGNATURE_TYPE_GUID; + HdDev.PartitionStart =3D Entry->StartingLBA; + HdDev.PartitionSize =3D Entry->EndingLBA - Entry->StartingLBA + 1; CopyMem (HdDev.Signature, &Entry->UniquePartitionGUID, sizeof (EFI_GUI= D)); =20 + ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL)); + PartitionInfo.Revision =3D EFI_PARTITION_INFO_PROTOCOL_REVISION; + PartitionInfo.Type =3D PARTITION_TYPE_GPT; + if (CompareGuid (&Entry->PartitionTypeGUID, &gEfiPartTypeSystemPartGui= d)) { + PartitionInfo.System =3D 1; + } + CopyMem (&PartitionInfo.Info.Gpt, Entry, sizeof (EFI_PARTITION_ENTRY)); + DEBUG ((EFI_D_INFO, " Index : %d\n", (UINT32) Index)); DEBUG ((EFI_D_INFO, " Start LBA : %lx\n", (UINT64) HdDev.PartitionStar= t)); DEBUG ((EFI_D_INFO, " End LBA : %lx\n", (UINT64) Entry->EndingLBA)); @@ -407,10 +416,10 @@ PartitionInstallGptChildHandles ( BlockIo2, DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &HdDev, + &PartitionInfo, Entry->StartingLBA, Entry->EndingLBA, - BlockSize, - CompareGuid(&Entry->PartitionTypeGUID, &gEfiPartTypeSystemP= artGuid) + BlockSize ); } =20 diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c b/MdeModulePkg/= Universal/Disk/PartitionDxe/Mbr.c index 377fb19319..55e9d26bae 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c @@ -12,7 +12,7 @@ the legacy boot strap code. =20 Copyright (c) 2014, Hewlett-Packard Development Company, L.P.
-Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
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 @@ -129,18 +129,19 @@ PartitionInstallMbrChildHandles ( IN EFI_DEVICE_PATH_PROTOCOL *DevicePath ) { - EFI_STATUS Status; - MASTER_BOOT_RECORD *Mbr; - UINT32 ExtMbrStartingLba; - UINT32 Index; - HARDDRIVE_DEVICE_PATH HdDev; - HARDDRIVE_DEVICE_PATH ParentHdDev; - EFI_STATUS Found; - EFI_DEVICE_PATH_PROTOCOL *DevicePathNode; - EFI_DEVICE_PATH_PROTOCOL *LastDevicePathNode; - UINT32 BlockSize; - UINT32 MediaId; - EFI_LBA LastBlock; + EFI_STATUS Status; + MASTER_BOOT_RECORD *Mbr; + UINT32 ExtMbrStartingLba; + UINT32 Index; + HARDDRIVE_DEVICE_PATH HdDev; + HARDDRIVE_DEVICE_PATH ParentHdDev; + EFI_STATUS Found; + EFI_DEVICE_PATH_PROTOCOL *DevicePathNode; + EFI_DEVICE_PATH_PROTOCOL *LastDevicePathNode; + UINT32 BlockSize; + UINT32 MediaId; + EFI_LBA LastBlock; + EFI_PARTITION_INFO_PROTOCOL PartitionInfo; =20 Found =3D EFI_NOT_FOUND; =20 @@ -225,6 +226,14 @@ PartitionInstallMbrChildHandles ( HdDev.PartitionSize =3D UNPACK_UINT32 (Mbr->Partition[Index].SizeI= nLBA); CopyMem (HdDev.Signature, &(Mbr->UniqueMbrSignature[0]), sizeof (Mbr= ->UniqueMbrSignature)); =20 + ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL)); + PartitionInfo.Revision =3D EFI_PARTITION_INFO_PROTOCOL_REVISION; + PartitionInfo.Type =3D PARTITION_TYPE_MBR; + if (Mbr->Partition[Index].OSIndicator =3D=3D EFI_PARTITION) { + PartitionInfo.System =3D 1; + } + CopyMem (&PartitionInfo.Info.Mbr, &Mbr->Partition[Index], sizeof (MB= R_PARTITION_RECORD)); + Status =3D PartitionInstallChildHandle ( This, Handle, @@ -234,10 +243,10 @@ PartitionInstallMbrChildHandles ( BlockIo2, DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &HdDev, + &PartitionInfo, HdDev.PartitionStart, HdDev.PartitionStart + HdDev.PartitionSize - 1, - MBR_SIZE, - (BOOLEAN) (Mbr->Partition[Index].OSIndicator =3D=3D EFI_PA= RTITION) + MBR_SIZE ); =20 if (!EFI_ERROR (Status)) { @@ -288,6 +297,14 @@ PartitionInstallMbrChildHandles ( // *((UINT32 *) &HdDev.Signature[0]) =3D 0; =20 + ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL)); + PartitionInfo.Revision =3D EFI_PARTITION_INFO_PROTOCOL_REVISION; + PartitionInfo.Type =3D PARTITION_TYPE_MBR; + if (Mbr->Partition[0].OSIndicator =3D=3D EFI_PARTITION) { + PartitionInfo.System =3D 1; + } + CopyMem (&PartitionInfo.Info.Mbr, &Mbr->Partition[0], sizeof (MBR_PA= RTITION_RECORD)); + Status =3D PartitionInstallChildHandle ( This, Handle, @@ -297,10 +314,10 @@ PartitionInstallMbrChildHandles ( BlockIo2, DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &HdDev, + &PartitionInfo, HdDev.PartitionStart - ParentHdDev.PartitionStart, HdDev.PartitionStart - ParentHdDev.PartitionStart + HdDev= .PartitionSize - 1, - MBR_SIZE, - (BOOLEAN) (Mbr->Partition[0].OSIndicator =3D=3D EFI_PARTI= TION) + MBR_SIZE ); if (!EFI_ERROR (Status)) { Found =3D EFI_SUCCESS; diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c b/MdeModu= lePkg/Universal/Disk/PartitionDxe/Partition.c index 1c53bf0233..5a7d119b43 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c @@ -4,7 +4,7 @@ of the raw block devices media. Currently "El Torito CD-ROM", Legacy MBR, and GPT partition schemes are supported. =20 -Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
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 @@ -514,6 +514,8 @@ PartitionDriverBindingStop ( &Private->BlockIo, &gEfiBlockIo2ProtocolGuid, &Private->BlockIo2, + &gEfiPartitionInfoProtocolGuid, + &Private->PartitionInfo, Private->EspGuid, NULL, NULL @@ -526,6 +528,8 @@ PartitionDriverBindingStop ( Private->DevicePath, &gEfiBlockIoProtocolGuid, &Private->BlockIo, + &gEfiPartitionInfoProtocolGuid, + &Private->PartitionInfo, Private->EspGuid, NULL, NULL @@ -1092,10 +1096,10 @@ PartitionFlushBlocksEx ( @param[in] ParentBlockIo2 Parent BlockIo2 interface. @param[in] ParentDevicePath Parent Device Path. @param[in] DevicePathNode Child Device Path node. + @param[in] PartitionInfo Child Partition Information interface. @param[in] Start Start Block. @param[in] End End Block. @param[in] BlockSize Child block size. - @param[in] InstallEspGuid Flag to install EFI System Partition GUID = on handle. =20 @retval EFI_SUCCESS A child handle was added. @retval other A child handle was not added. @@ -1111,10 +1115,10 @@ PartitionInstallChildHandle ( IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath, IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode, + IN EFI_PARTITION_INFO_PROTOCOL *PartitionInfo, IN EFI_LBA Start, IN EFI_LBA End, - IN UINT32 BlockSize, - IN BOOLEAN InstallEspGuid + IN UINT32 BlockSize ) { EFI_STATUS Status; @@ -1203,7 +1207,12 @@ PartitionInstallChildHandle ( return EFI_OUT_OF_RESOURCES; } =20 - if (InstallEspGuid) { + // + // Set the PartitionInfo into Private Data. + // + CopyMem (&Private->PartitionInfo, PartitionInfo, sizeof (EFI_PARTITION_I= NFO_PROTOCOL)); + + if ((PartitionInfo->System =3D=3D 1)) { Private->EspGuid =3D &gEfiPartTypeSystemPartGuid; } else { // @@ -1225,6 +1234,8 @@ PartitionInstallChildHandle ( &Private->BlockIo, &gEfiBlockIo2ProtocolGuid, &Private->BlockIo2, + &gEfiPartitionInfoProtocolGuid, + &Private->PartitionInfo, Private->EspGuid, NULL, NULL @@ -1236,6 +1247,8 @@ PartitionInstallChildHandle ( Private->DevicePath, &gEfiBlockIoProtocolGuid, &Private->BlockIo, + &gEfiPartitionInfoProtocolGuid, + &Private->PartitionInfo, Private->EspGuid, NULL, NULL diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h b/MdeModu= lePkg/Universal/Disk/PartitionDxe/Partition.h index 7cb19882cb..f2f6185317 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h @@ -4,7 +4,7 @@ of the raw block devices media. Currently "El Torito CD-ROM", Legacy=20 MBR, and GPT partition schemes are supported. =20 -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
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 @@ -27,6 +27,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER= EXPRESS OR IMPLIED. #include #include #include +#include #include #include #include @@ -45,25 +46,26 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITH= ER EXPRESS OR IMPLIED. // #define PARTITION_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'a', 'r', 't') typedef struct { - UINT64 Signature; - - EFI_HANDLE Handle; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - EFI_BLOCK_IO_PROTOCOL BlockIo; - EFI_BLOCK_IO2_PROTOCOL BlockIo2; - EFI_BLOCK_IO_MEDIA Media; - EFI_BLOCK_IO_MEDIA Media2;//For BlockIO2 - - EFI_DISK_IO_PROTOCOL *DiskIo; - EFI_DISK_IO2_PROTOCOL *DiskIo2; - EFI_BLOCK_IO_PROTOCOL *ParentBlockIo; - EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2; - UINT64 Start; - UINT64 End; - UINT32 BlockSize; - BOOLEAN InStop; - - EFI_GUID *EspGuid; + UINT64 Signature; + + EFI_HANDLE Handle; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_BLOCK_IO_PROTOCOL BlockIo; + EFI_BLOCK_IO2_PROTOCOL BlockIo2; + EFI_BLOCK_IO_MEDIA Media; + EFI_BLOCK_IO_MEDIA Media2;//For BlockIO2 + EFI_PARTITION_INFO_PROTOCOL PartitionInfo; + + EFI_DISK_IO_PROTOCOL *DiskIo; + EFI_DISK_IO2_PROTOCOL *DiskIo2; + EFI_BLOCK_IO_PROTOCOL *ParentBlockIo; + EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2; + UINT64 Start; + UINT64 End; + UINT32 BlockSize; + BOOLEAN InStop; + + EFI_GUID *EspGuid; =20 } PARTITION_PRIVATE_DATA; =20 @@ -321,10 +323,10 @@ PartitionComponentNameGetControllerName ( @param[in] ParentBlockIo2 Parent BlockIo2 interface. @param[in] ParentDevicePath Parent Device Path. @param[in] DevicePathNode Child Device Path node. + @param[in] PartitionInfo Child Partition Information interface. @param[in] Start Start Block. @param[in] End End Block. @param[in] BlockSize Child block size. - @param[in] InstallEspGuid Flag to install EFI System Partition GUID = on handle. =20 @retval EFI_SUCCESS A child handle was added. @retval other A child handle was not added. @@ -340,10 +342,10 @@ PartitionInstallChildHandle ( IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath, IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode, + IN EFI_PARTITION_INFO_PROTOCOL *PartitionInfo, IN EFI_LBA Start, IN EFI_LBA End, - IN UINT32 BlockSize, - IN BOOLEAN InstallEspGuid + IN UINT32 BlockSize ); =20 /** diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf b/Md= eModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf index 680626378f..48212773e8 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf @@ -11,7 +11,7 @@ # This external input must be validated carefully to avoid security issue= like # buffer overflow, integer overflow. # -# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at @@ -82,6 +82,7 @@ ## BY_START ## TO_START gEfiDevicePathProtocolGuid + gEfiPartitionInfoProtocolGuid ## BY_START gEfiDiskIoProtocolGuid ## TO_START gEfiDiskIo2ProtocolGuid ## TO_START =20 --=20 2.12.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel