MdeModulePkg/PartitionDxe: Add impl of Partition Information Protocol
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bret Barkelew <brbarkel@microsoft.com> Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Decode an El Torito formatted CD-ROM
|
Decode an El Torito formatted CD-ROM
|
||||||
|
|
||||||
Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
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
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT64 VolDescriptorOffset;
|
UINT64 VolDescriptorOffset;
|
||||||
UINT32 Lba2KB;
|
UINT32 Lba2KB;
|
||||||
EFI_BLOCK_IO_MEDIA *Media;
|
EFI_BLOCK_IO_MEDIA *Media;
|
||||||
CDROM_VOLUME_DESCRIPTOR *VolDescriptor;
|
CDROM_VOLUME_DESCRIPTOR *VolDescriptor;
|
||||||
ELTORITO_CATALOG *Catalog;
|
ELTORITO_CATALOG *Catalog;
|
||||||
UINTN Check;
|
UINTN Check;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN BootEntry;
|
UINTN BootEntry;
|
||||||
UINTN MaxIndex;
|
UINTN MaxIndex;
|
||||||
UINT16 *CheckBuffer;
|
UINT16 *CheckBuffer;
|
||||||
CDROM_DEVICE_PATH CdDev;
|
CDROM_DEVICE_PATH CdDev;
|
||||||
UINT32 SubBlockSize;
|
UINT32 SubBlockSize;
|
||||||
UINT32 SectorCount;
|
UINT32 SectorCount;
|
||||||
EFI_STATUS Found;
|
EFI_STATUS Found;
|
||||||
UINT32 VolSpaceSize;
|
UINT32 VolSpaceSize;
|
||||||
|
EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
|
||||||
|
|
||||||
Found = EFI_NOT_FOUND;
|
Found = EFI_NOT_FOUND;
|
||||||
Media = BlockIo->Media;
|
Media = BlockIo->Media;
|
||||||
@ -248,6 +249,10 @@ PartitionInstallElToritoChildHandles (
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL));
|
||||||
|
PartitionInfo.Revision = EFI_PARTITION_INFO_PROTOCOL_REVISION;
|
||||||
|
PartitionInfo.Type = PARTITION_TYPE_OTHER;
|
||||||
|
|
||||||
Status = PartitionInstallChildHandle (
|
Status = PartitionInstallChildHandle (
|
||||||
This,
|
This,
|
||||||
Handle,
|
Handle,
|
||||||
@ -257,10 +262,10 @@ PartitionInstallElToritoChildHandles (
|
|||||||
BlockIo2,
|
BlockIo2,
|
||||||
DevicePath,
|
DevicePath,
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *) &CdDev,
|
(EFI_DEVICE_PATH_PROTOCOL *) &CdDev,
|
||||||
|
&PartitionInfo,
|
||||||
Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize),
|
Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize),
|
||||||
Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize) + CdDev.PartitionSize - 1,
|
Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize) + CdDev.PartitionSize - 1,
|
||||||
SubBlockSize,
|
SubBlockSize
|
||||||
FALSE
|
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
Found = EFI_SUCCESS;
|
Found = EFI_SUCCESS;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
PartitionValidGptTable(), PartitionCheckGptEntry() routine will accept disk
|
PartitionValidGptTable(), PartitionCheckGptEntry() routine will accept disk
|
||||||
partition content and validate the GPT table and GPT entry.
|
partition content and validate the GPT table and GPT entry.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
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
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT32 BlockSize;
|
UINT32 BlockSize;
|
||||||
EFI_LBA LastBlock;
|
EFI_LBA LastBlock;
|
||||||
MASTER_BOOT_RECORD *ProtectiveMbr;
|
MASTER_BOOT_RECORD *ProtectiveMbr;
|
||||||
EFI_PARTITION_TABLE_HEADER *PrimaryHeader;
|
EFI_PARTITION_TABLE_HEADER *PrimaryHeader;
|
||||||
EFI_PARTITION_TABLE_HEADER *BackupHeader;
|
EFI_PARTITION_TABLE_HEADER *BackupHeader;
|
||||||
EFI_PARTITION_ENTRY *PartEntry;
|
EFI_PARTITION_ENTRY *PartEntry;
|
||||||
EFI_PARTITION_ENTRY *Entry;
|
EFI_PARTITION_ENTRY *Entry;
|
||||||
EFI_PARTITION_ENTRY_STATUS *PEntryStatus;
|
EFI_PARTITION_ENTRY_STATUS *PEntryStatus;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
EFI_STATUS GptValidStatus;
|
EFI_STATUS GptValidStatus;
|
||||||
HARDDRIVE_DEVICE_PATH HdDev;
|
HARDDRIVE_DEVICE_PATH HdDev;
|
||||||
UINT32 MediaId;
|
UINT32 MediaId;
|
||||||
|
EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
|
||||||
|
|
||||||
ProtectiveMbr = NULL;
|
ProtectiveMbr = NULL;
|
||||||
PrimaryHeader = NULL;
|
PrimaryHeader = NULL;
|
||||||
@ -380,17 +381,25 @@ PartitionInstallGptChildHandles (
|
|||||||
}
|
}
|
||||||
|
|
||||||
ZeroMem (&HdDev, sizeof (HdDev));
|
ZeroMem (&HdDev, sizeof (HdDev));
|
||||||
HdDev.Header.Type = MEDIA_DEVICE_PATH;
|
HdDev.Header.Type = MEDIA_DEVICE_PATH;
|
||||||
HdDev.Header.SubType = MEDIA_HARDDRIVE_DP;
|
HdDev.Header.SubType = MEDIA_HARDDRIVE_DP;
|
||||||
SetDevicePathNodeLength (&HdDev.Header, sizeof (HdDev));
|
SetDevicePathNodeLength (&HdDev.Header, sizeof (HdDev));
|
||||||
|
|
||||||
HdDev.PartitionNumber = (UINT32) Index + 1;
|
HdDev.PartitionNumber = (UINT32) Index + 1;
|
||||||
HdDev.MBRType = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;
|
HdDev.MBRType = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;
|
||||||
HdDev.SignatureType = SIGNATURE_TYPE_GUID;
|
HdDev.SignatureType = SIGNATURE_TYPE_GUID;
|
||||||
HdDev.PartitionStart = Entry->StartingLBA;
|
HdDev.PartitionStart = Entry->StartingLBA;
|
||||||
HdDev.PartitionSize = Entry->EndingLBA - Entry->StartingLBA + 1;
|
HdDev.PartitionSize = Entry->EndingLBA - Entry->StartingLBA + 1;
|
||||||
CopyMem (HdDev.Signature, &Entry->UniquePartitionGUID, sizeof (EFI_GUID));
|
CopyMem (HdDev.Signature, &Entry->UniquePartitionGUID, sizeof (EFI_GUID));
|
||||||
|
|
||||||
|
ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL));
|
||||||
|
PartitionInfo.Revision = EFI_PARTITION_INFO_PROTOCOL_REVISION;
|
||||||
|
PartitionInfo.Type = PARTITION_TYPE_GPT;
|
||||||
|
if (CompareGuid (&Entry->PartitionTypeGUID, &gEfiPartTypeSystemPartGuid)) {
|
||||||
|
PartitionInfo.System = 1;
|
||||||
|
}
|
||||||
|
CopyMem (&PartitionInfo.Info.Gpt, Entry, sizeof (EFI_PARTITION_ENTRY));
|
||||||
|
|
||||||
DEBUG ((EFI_D_INFO, " Index : %d\n", (UINT32) Index));
|
DEBUG ((EFI_D_INFO, " Index : %d\n", (UINT32) Index));
|
||||||
DEBUG ((EFI_D_INFO, " Start LBA : %lx\n", (UINT64) HdDev.PartitionStart));
|
DEBUG ((EFI_D_INFO, " Start LBA : %lx\n", (UINT64) HdDev.PartitionStart));
|
||||||
DEBUG ((EFI_D_INFO, " End LBA : %lx\n", (UINT64) Entry->EndingLBA));
|
DEBUG ((EFI_D_INFO, " End LBA : %lx\n", (UINT64) Entry->EndingLBA));
|
||||||
@ -407,10 +416,10 @@ PartitionInstallGptChildHandles (
|
|||||||
BlockIo2,
|
BlockIo2,
|
||||||
DevicePath,
|
DevicePath,
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *) &HdDev,
|
(EFI_DEVICE_PATH_PROTOCOL *) &HdDev,
|
||||||
|
&PartitionInfo,
|
||||||
Entry->StartingLBA,
|
Entry->StartingLBA,
|
||||||
Entry->EndingLBA,
|
Entry->EndingLBA,
|
||||||
BlockSize,
|
BlockSize
|
||||||
CompareGuid(&Entry->PartitionTypeGUID, &gEfiPartTypeSystemPartGuid)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
the legacy boot strap code.
|
the legacy boot strap code.
|
||||||
|
|
||||||
Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>
|
Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>
|
||||||
Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
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
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
MASTER_BOOT_RECORD *Mbr;
|
MASTER_BOOT_RECORD *Mbr;
|
||||||
UINT32 ExtMbrStartingLba;
|
UINT32 ExtMbrStartingLba;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
HARDDRIVE_DEVICE_PATH HdDev;
|
HARDDRIVE_DEVICE_PATH HdDev;
|
||||||
HARDDRIVE_DEVICE_PATH ParentHdDev;
|
HARDDRIVE_DEVICE_PATH ParentHdDev;
|
||||||
EFI_STATUS Found;
|
EFI_STATUS Found;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *LastDevicePathNode;
|
EFI_DEVICE_PATH_PROTOCOL *LastDevicePathNode;
|
||||||
UINT32 BlockSize;
|
UINT32 BlockSize;
|
||||||
UINT32 MediaId;
|
UINT32 MediaId;
|
||||||
EFI_LBA LastBlock;
|
EFI_LBA LastBlock;
|
||||||
|
EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
|
||||||
|
|
||||||
Found = EFI_NOT_FOUND;
|
Found = EFI_NOT_FOUND;
|
||||||
|
|
||||||
@ -225,6 +226,14 @@ PartitionInstallMbrChildHandles (
|
|||||||
HdDev.PartitionSize = UNPACK_UINT32 (Mbr->Partition[Index].SizeInLBA);
|
HdDev.PartitionSize = UNPACK_UINT32 (Mbr->Partition[Index].SizeInLBA);
|
||||||
CopyMem (HdDev.Signature, &(Mbr->UniqueMbrSignature[0]), sizeof (Mbr->UniqueMbrSignature));
|
CopyMem (HdDev.Signature, &(Mbr->UniqueMbrSignature[0]), sizeof (Mbr->UniqueMbrSignature));
|
||||||
|
|
||||||
|
ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL));
|
||||||
|
PartitionInfo.Revision = EFI_PARTITION_INFO_PROTOCOL_REVISION;
|
||||||
|
PartitionInfo.Type = PARTITION_TYPE_MBR;
|
||||||
|
if (Mbr->Partition[Index].OSIndicator == EFI_PARTITION) {
|
||||||
|
PartitionInfo.System = 1;
|
||||||
|
}
|
||||||
|
CopyMem (&PartitionInfo.Info.Mbr, &Mbr->Partition[Index], sizeof (MBR_PARTITION_RECORD));
|
||||||
|
|
||||||
Status = PartitionInstallChildHandle (
|
Status = PartitionInstallChildHandle (
|
||||||
This,
|
This,
|
||||||
Handle,
|
Handle,
|
||||||
@ -234,10 +243,10 @@ PartitionInstallMbrChildHandles (
|
|||||||
BlockIo2,
|
BlockIo2,
|
||||||
DevicePath,
|
DevicePath,
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *) &HdDev,
|
(EFI_DEVICE_PATH_PROTOCOL *) &HdDev,
|
||||||
|
&PartitionInfo,
|
||||||
HdDev.PartitionStart,
|
HdDev.PartitionStart,
|
||||||
HdDev.PartitionStart + HdDev.PartitionSize - 1,
|
HdDev.PartitionStart + HdDev.PartitionSize - 1,
|
||||||
MBR_SIZE,
|
MBR_SIZE
|
||||||
(BOOLEAN) (Mbr->Partition[Index].OSIndicator == EFI_PARTITION)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
@ -288,6 +297,14 @@ PartitionInstallMbrChildHandles (
|
|||||||
//
|
//
|
||||||
*((UINT32 *) &HdDev.Signature[0]) = 0;
|
*((UINT32 *) &HdDev.Signature[0]) = 0;
|
||||||
|
|
||||||
|
ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL));
|
||||||
|
PartitionInfo.Revision = EFI_PARTITION_INFO_PROTOCOL_REVISION;
|
||||||
|
PartitionInfo.Type = PARTITION_TYPE_MBR;
|
||||||
|
if (Mbr->Partition[0].OSIndicator == EFI_PARTITION) {
|
||||||
|
PartitionInfo.System = 1;
|
||||||
|
}
|
||||||
|
CopyMem (&PartitionInfo.Info.Mbr, &Mbr->Partition[0], sizeof (MBR_PARTITION_RECORD));
|
||||||
|
|
||||||
Status = PartitionInstallChildHandle (
|
Status = PartitionInstallChildHandle (
|
||||||
This,
|
This,
|
||||||
Handle,
|
Handle,
|
||||||
@ -297,10 +314,10 @@ PartitionInstallMbrChildHandles (
|
|||||||
BlockIo2,
|
BlockIo2,
|
||||||
DevicePath,
|
DevicePath,
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *) &HdDev,
|
(EFI_DEVICE_PATH_PROTOCOL *) &HdDev,
|
||||||
|
&PartitionInfo,
|
||||||
HdDev.PartitionStart - ParentHdDev.PartitionStart,
|
HdDev.PartitionStart - ParentHdDev.PartitionStart,
|
||||||
HdDev.PartitionStart - ParentHdDev.PartitionStart + HdDev.PartitionSize - 1,
|
HdDev.PartitionStart - ParentHdDev.PartitionStart + HdDev.PartitionSize - 1,
|
||||||
MBR_SIZE,
|
MBR_SIZE
|
||||||
(BOOLEAN) (Mbr->Partition[0].OSIndicator == EFI_PARTITION)
|
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
Found = EFI_SUCCESS;
|
Found = EFI_SUCCESS;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
of the raw block devices media. Currently "El Torito CD-ROM", Legacy
|
of the raw block devices media. Currently "El Torito CD-ROM", Legacy
|
||||||
MBR, and GPT partition schemes are supported.
|
MBR, and GPT partition schemes are supported.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -514,6 +514,8 @@ PartitionDriverBindingStop (
|
|||||||
&Private->BlockIo,
|
&Private->BlockIo,
|
||||||
&gEfiBlockIo2ProtocolGuid,
|
&gEfiBlockIo2ProtocolGuid,
|
||||||
&Private->BlockIo2,
|
&Private->BlockIo2,
|
||||||
|
&gEfiPartitionInfoProtocolGuid,
|
||||||
|
&Private->PartitionInfo,
|
||||||
Private->EspGuid,
|
Private->EspGuid,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
@ -526,6 +528,8 @@ PartitionDriverBindingStop (
|
|||||||
Private->DevicePath,
|
Private->DevicePath,
|
||||||
&gEfiBlockIoProtocolGuid,
|
&gEfiBlockIoProtocolGuid,
|
||||||
&Private->BlockIo,
|
&Private->BlockIo,
|
||||||
|
&gEfiPartitionInfoProtocolGuid,
|
||||||
|
&Private->PartitionInfo,
|
||||||
Private->EspGuid,
|
Private->EspGuid,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
@ -1092,10 +1096,10 @@ PartitionFlushBlocksEx (
|
|||||||
@param[in] ParentBlockIo2 Parent BlockIo2 interface.
|
@param[in] ParentBlockIo2 Parent BlockIo2 interface.
|
||||||
@param[in] ParentDevicePath Parent Device Path.
|
@param[in] ParentDevicePath Parent Device Path.
|
||||||
@param[in] DevicePathNode Child Device Path node.
|
@param[in] DevicePathNode Child Device Path node.
|
||||||
|
@param[in] PartitionInfo Child Partition Information interface.
|
||||||
@param[in] Start Start Block.
|
@param[in] Start Start Block.
|
||||||
@param[in] End End Block.
|
@param[in] End End Block.
|
||||||
@param[in] BlockSize Child block size.
|
@param[in] BlockSize Child block size.
|
||||||
@param[in] InstallEspGuid Flag to install EFI System Partition GUID on handle.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS A child handle was added.
|
@retval EFI_SUCCESS A child handle was added.
|
||||||
@retval other A child handle was not added.
|
@retval other A child handle was not added.
|
||||||
@ -1111,10 +1115,10 @@ PartitionInstallChildHandle (
|
|||||||
IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2,
|
IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
|
IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode,
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode,
|
||||||
|
IN EFI_PARTITION_INFO_PROTOCOL *PartitionInfo,
|
||||||
IN EFI_LBA Start,
|
IN EFI_LBA Start,
|
||||||
IN EFI_LBA End,
|
IN EFI_LBA End,
|
||||||
IN UINT32 BlockSize,
|
IN UINT32 BlockSize
|
||||||
IN BOOLEAN InstallEspGuid
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
@ -1203,7 +1207,12 @@ PartitionInstallChildHandle (
|
|||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (InstallEspGuid) {
|
//
|
||||||
|
// Set the PartitionInfo into Private Data.
|
||||||
|
//
|
||||||
|
CopyMem (&Private->PartitionInfo, PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL));
|
||||||
|
|
||||||
|
if ((PartitionInfo->System == 1)) {
|
||||||
Private->EspGuid = &gEfiPartTypeSystemPartGuid;
|
Private->EspGuid = &gEfiPartTypeSystemPartGuid;
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
@ -1225,6 +1234,8 @@ PartitionInstallChildHandle (
|
|||||||
&Private->BlockIo,
|
&Private->BlockIo,
|
||||||
&gEfiBlockIo2ProtocolGuid,
|
&gEfiBlockIo2ProtocolGuid,
|
||||||
&Private->BlockIo2,
|
&Private->BlockIo2,
|
||||||
|
&gEfiPartitionInfoProtocolGuid,
|
||||||
|
&Private->PartitionInfo,
|
||||||
Private->EspGuid,
|
Private->EspGuid,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
@ -1236,6 +1247,8 @@ PartitionInstallChildHandle (
|
|||||||
Private->DevicePath,
|
Private->DevicePath,
|
||||||
&gEfiBlockIoProtocolGuid,
|
&gEfiBlockIoProtocolGuid,
|
||||||
&Private->BlockIo,
|
&Private->BlockIo,
|
||||||
|
&gEfiPartitionInfoProtocolGuid,
|
||||||
|
&Private->PartitionInfo,
|
||||||
Private->EspGuid,
|
Private->EspGuid,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
of the raw block devices media. Currently "El Torito CD-ROM", Legacy
|
of the raw block devices media. Currently "El Torito CD-ROM", Legacy
|
||||||
MBR, and GPT partition schemes are supported.
|
MBR, and GPT partition schemes are supported.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
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 <Protocol/DriverBinding.h>
|
#include <Protocol/DriverBinding.h>
|
||||||
#include <Protocol/DiskIo.h>
|
#include <Protocol/DiskIo.h>
|
||||||
#include <Protocol/DiskIo2.h>
|
#include <Protocol/DiskIo2.h>
|
||||||
|
#include <Protocol/PartitionInfo.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/UefiDriverEntryPoint.h>
|
#include <Library/UefiDriverEntryPoint.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
@ -45,25 +46,26 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
//
|
//
|
||||||
#define PARTITION_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'a', 'r', 't')
|
#define PARTITION_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'a', 'r', 't')
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT64 Signature;
|
UINT64 Signature;
|
||||||
|
|
||||||
EFI_HANDLE Handle;
|
EFI_HANDLE Handle;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
EFI_BLOCK_IO_PROTOCOL BlockIo;
|
EFI_BLOCK_IO_PROTOCOL BlockIo;
|
||||||
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
|
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
|
||||||
EFI_BLOCK_IO_MEDIA Media;
|
EFI_BLOCK_IO_MEDIA Media;
|
||||||
EFI_BLOCK_IO_MEDIA Media2;//For BlockIO2
|
EFI_BLOCK_IO_MEDIA Media2;//For BlockIO2
|
||||||
|
EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
|
||||||
|
|
||||||
EFI_DISK_IO_PROTOCOL *DiskIo;
|
EFI_DISK_IO_PROTOCOL *DiskIo;
|
||||||
EFI_DISK_IO2_PROTOCOL *DiskIo2;
|
EFI_DISK_IO2_PROTOCOL *DiskIo2;
|
||||||
EFI_BLOCK_IO_PROTOCOL *ParentBlockIo;
|
EFI_BLOCK_IO_PROTOCOL *ParentBlockIo;
|
||||||
EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2;
|
EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2;
|
||||||
UINT64 Start;
|
UINT64 Start;
|
||||||
UINT64 End;
|
UINT64 End;
|
||||||
UINT32 BlockSize;
|
UINT32 BlockSize;
|
||||||
BOOLEAN InStop;
|
BOOLEAN InStop;
|
||||||
|
|
||||||
EFI_GUID *EspGuid;
|
EFI_GUID *EspGuid;
|
||||||
|
|
||||||
} PARTITION_PRIVATE_DATA;
|
} PARTITION_PRIVATE_DATA;
|
||||||
|
|
||||||
@ -321,10 +323,10 @@ PartitionComponentNameGetControllerName (
|
|||||||
@param[in] ParentBlockIo2 Parent BlockIo2 interface.
|
@param[in] ParentBlockIo2 Parent BlockIo2 interface.
|
||||||
@param[in] ParentDevicePath Parent Device Path.
|
@param[in] ParentDevicePath Parent Device Path.
|
||||||
@param[in] DevicePathNode Child Device Path node.
|
@param[in] DevicePathNode Child Device Path node.
|
||||||
|
@param[in] PartitionInfo Child Partition Information interface.
|
||||||
@param[in] Start Start Block.
|
@param[in] Start Start Block.
|
||||||
@param[in] End End Block.
|
@param[in] End End Block.
|
||||||
@param[in] BlockSize Child block size.
|
@param[in] BlockSize Child block size.
|
||||||
@param[in] InstallEspGuid Flag to install EFI System Partition GUID on handle.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS A child handle was added.
|
@retval EFI_SUCCESS A child handle was added.
|
||||||
@retval other A child handle was not added.
|
@retval other A child handle was not added.
|
||||||
@ -340,10 +342,10 @@ PartitionInstallChildHandle (
|
|||||||
IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2,
|
IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
|
IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode,
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode,
|
||||||
|
IN EFI_PARTITION_INFO_PROTOCOL *PartitionInfo,
|
||||||
IN EFI_LBA Start,
|
IN EFI_LBA Start,
|
||||||
IN EFI_LBA End,
|
IN EFI_LBA End,
|
||||||
IN UINT32 BlockSize,
|
IN UINT32 BlockSize
|
||||||
IN BOOLEAN InstallEspGuid
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
# This external input must be validated carefully to avoid security issue like
|
# This external input must be validated carefully to avoid security issue like
|
||||||
# buffer overflow, integer overflow.
|
# buffer overflow, integer overflow.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# 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
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -82,6 +82,7 @@
|
|||||||
## BY_START
|
## BY_START
|
||||||
## TO_START
|
## TO_START
|
||||||
gEfiDevicePathProtocolGuid
|
gEfiDevicePathProtocolGuid
|
||||||
|
gEfiPartitionInfoProtocolGuid ## BY_START
|
||||||
gEfiDiskIoProtocolGuid ## TO_START
|
gEfiDiskIoProtocolGuid ## TO_START
|
||||||
gEfiDiskIo2ProtocolGuid ## TO_START
|
gEfiDiskIo2ProtocolGuid ## TO_START
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user