The name is reliable because it's used by all OEM's :) I'm the founder of EFIDroid, a port of UEFI to Qualcomm based Android devices. https://github.com/efidroid https://plus.google.com/u/0/communities/114053643671219382368
Android boot images(a container for kernel,ramdisk, devicetree and bootargs) are stored as a raw binary on named partitions(boot, recovery,...). Naming partitions is standard in Android and every single partition has a name. neither GPT GUID's nor file system labels(these actually can change with every format depending on the tools used). are persistent or reliable. On Wed, Sep 9, 2015 at 10:50 AM, Tian, Feng <[email protected]> wrote: > My concern is the name string is also not reliable. Different partition > tools may have different naming rules. > > Yes, "private protocol" I meant is using it as your local implementation. > > Last, still has a little curious on your usage model, could you explain > it more? Maybe there is a better way to solve your problem. > > Thanks > Feng > > -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Michael Zimmermann > Sent: Wednesday, September 09, 2015 15:48 > To: Tian, Feng > Cc: Ni, Ruiyu; [email protected] > Subject: Re: [edk2] [PATCH] MdeModulePkg: add PartitionName protocol > > UniquePartitionGUID isn't suitable because the device vendor's don't set > proper values(they're auto generated each time the partition table changes). > Instead names like "boot" are used so you can find the correct partition. > > by "Implement it as a private protocol" do u just mean "use your own fork" > or is there some different protocol type? > > On Wed, Sep 9, 2015 at 9:34 AM, Tian, Feng <[email protected]> wrote: > > > Michael, > > > > IMHO, I don't think it's valuable to introducing this new protocol to > > get a name string. It's too burden. If only you have this use case, I > > would suggest you implement it as a private protocol rather than the > public one. > > > > PS: Why UniquePartitionGUID doesn't work for your case? > > > > Thanks > > Feng > > > > -----Original Message----- > > From: edk2-devel [mailto:[email protected]] On Behalf Of > > Michael Zimmermann > > Sent: Wednesday, September 09, 2015 15:28 > > To: Ni, Ruiyu > > Cc: [email protected] > > Subject: Re: [edk2] [PATCH] MdeModulePkg: add PartitionName protocol > > > > Hi, > > > > I need the partition name because I need to boot from partitions by > > their GPT label(filesystem label and GUID aren't set/reliable). > > > > Usually I would've just added a name field to the existing DiskIo > > Protocol, but since it's a UEFI standard we can't/shouldn't do this. > > > > I chose option 3 over 1/2 because the others would mean that u have to > > parse the whole partition table again which would lead to redundant code. > > > > > > Michael > > > > On Sun, Sep 6, 2015 at 8:33 AM, Ni, Ruiyu <[email protected]> wrote: > > > > > Zimmermann, > > > There are three options to get the name of a partition: > > > 1. Directly use BlockIo interface to access the GPT meta data. > > > 2. Group the above code into a library 3. Group the above code into > > > a driver and expose the partition name as a protocol. > > > > > > I really do not think we need to go to option 3 directly. Can you > > > tell us the reason why a protocol is needed? > > > > > > Thanks, > > > Ray > > > > > > -----Original Message----- > > > From: edk2-devel [mailto:[email protected]] On Behalf > > > Of Michael Zimmermann > > > Sent: Thursday, September 3, 2015 2:23 PM > > > To: [email protected] > > > Subject: [edk2] [PATCH] MdeModulePkg: add PartitionName protocol > > > > > > This allows to retrieve the name of a partition. > > > > > > Contributed-under: TianoCore Contribution Agreement 1.0 > > > Signed-off-by: Michael Zimmermann <cecil.she [email protected]> > > > --- > > > MdeModulePkg/Include/Protocol/PartitionName.h | 42 > > > ++++++++++++++++++++++ > > > MdeModulePkg/MdeModulePkg.dec | 3 ++ > > > .../Universal/Disk/PartitionDxe/ElTorito.c | 3 +- > > > MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c | 3 +- > > > MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c | 6 ++-- > > > .../Universal/Disk/PartitionDxe/Partition.c | 13 ++++++- > > > .../Universal/Disk/PartitionDxe/Partition.h | 5 ++- > > > .../Universal/Disk/PartitionDxe/PartitionDxe.inf | 2 ++ > > > 8 files changed, 71 insertions(+), 6 deletions(-) create mode > > > 100644 MdeModulePkg/Include/Protocol/PartitionName.h > > > > > > diff --git a/MdeModulePkg/Include/Protocol/PartitionName.h > > > b/MdeModulePkg/Include/Protocol/PartitionName.h > > > new file mode 100644 > > > index 0000000..460ab27 > > > --- /dev/null > > > +++ b/MdeModulePkg/Include/Protocol/PartitionName.h > > > @@ -0,0 +1,42 @@ > > > +#ifndef __PARTITION_NAME_H__ > > > +#define __PARTITION_NAME_H__ > > > + > > > +#include <Uefi/UefiSpec.h> > > > + > > > +#define EFI_PARTITION_NAME_PROTOCOL_GUID \ > > > + { \ > > > + 0xf3287350, 0x384a, 0x44ec, {0x95, 0xcf, 0xdb, 0x4b, 0x86, > > > +0x7c, 0x96, > > > 0x8c } \ > > > + } > > > + > > > +typedef struct _EFI_PARTITION_NAME_PROTOCOL > > > +EFI_PARTITION_NAME_PROTOCOL; > > > + > > > +/// > > > +/// Protocol GUID name > > > +/// > > > +#define PARTITION_NAME_PROTOCOL EFI_PARTITION_NAME_PROTOCOL_GUID > > > + > > > +/// > > > +/// Protocol > > > +/// > > > +typedef EFI_PARTITION_NAME_PROTOCOL EFI_PARTITION_NAME; > > > + > > > +#define EFI_PARTITION_NAME_PROTOCOL_REVISION 0x00010000 #define > > > +EFI_PARTITION_NAME_PROTOCOL_REVISION2 0x00020001 #define > > > +EFI_PARTITION_NAME_PROTOCOL_REVISION3 0x00020031 > > > + > > > +/// > > > +/// Revision > > > +/// > > > +#define EFI_PARTITION_NAME_INTERFACE_REVISION > > > EFI_PARTITION_NAME_PROTOCOL_REVISION > > > + > > > +/// > > > +/// This protocol provides the name of a partition /// struct > > > +_EFI_PARTITION_NAME_PROTOCOL { > > > + CHAR16 Name[36]; > > > +}; > > > + > > > +extern EFI_GUID gEfiPartitionNameProtocolGuid; > > > + > > > +#endif > > > + > > > diff --git a/MdeModulePkg/MdeModulePkg.dec > > > b/MdeModulePkg/MdeModulePkg.dec index 5c1d29a..290ecaf 100644 > > > --- a/MdeModulePkg/MdeModulePkg.dec > > > +++ b/MdeModulePkg/MdeModulePkg.dec > > > @@ -449,6 +449,9 @@ > > > ## Include/Protocol/SmmReadyToBoot.h > > > gEdkiiSmmReadyToBootProtocolGuid = { 0x6e057ecf, 0xfa99, 0x4f39, > > > { 0x95, 0xbc, 0x59, 0xf9, 0x92, 0x1d, 0x17, 0xe4 } } > > > > > > + ## Include/Protocol/PartitionName.h > > > + gEfiPartitionNameProtocolGuid = { 0xf3287350, 0x384a, 0x44ec, { > > 0x95, > > > 0xcf, 0xdb, 0x4b, 0x86, 0x7c, 0x96, 0x8c } } > > > + > > > # > > > # [Error.gEfiMdeModulePkgTokenSpaceGuid] > > > # 0x80000001 | Invalid value provided. > > > diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c > > > b/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c > > > index 2238449..094ef09 100644 > > > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c > > > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c > > > @@ -260,7 +260,8 @@ PartitionInstallElToritoChildHandles ( > > > Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize), > > > MultU64x32 (Catalog->Boot.Lba + CdDev.PartitionSize > > > - 1, SIZE_2KB / Media->BlockSize), > > > SubBlockSize, > > > - FALSE > > > + FALSE, > > > + NULL > > > ); > > > if (!EFI_ERROR (Status)) { > > > Found = EFI_SUCCESS; > > > diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c > > > b/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c > > > index 3586051..6e1c4ea 100644 > > > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c > > > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c > > > @@ -410,7 +410,8 @@ PartitionInstallGptChildHandles ( > > > Entry->StartingLBA, > > > Entry->EndingLBA, > > > BlockSize, > > > - CompareGuid(&Entry->PartitionTypeGUID, > > > &gEfiPartTypeSystemPartGuid) > > > + CompareGuid(&Entry->PartitionTypeGUID, > > > &gEfiPartTypeSystemPartGuid), > > > + Entry->PartitionName > > > ); > > > } > > > > > > diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c > > > b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c > > > index 4b0159c..c7fb51f 100644 > > > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c > > > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c > > > @@ -240,7 +240,8 @@ PartitionInstallMbrChildHandles ( > > > HdDev.PartitionStart, > > > HdDev.PartitionStart + HdDev.PartitionSize - 1, > > > MBR_SIZE, > > > - (BOOLEAN) (Mbr->Partition[Index].OSIndicator == > > > EFI_PARTITION) > > > + (BOOLEAN) (Mbr->Partition[Index].OSIndicator == > > > EFI_PARTITION), > > > + NULL > > > ); > > > > > > if (!EFI_ERROR (Status)) { > > > @@ -302,7 +303,8 @@ PartitionInstallMbrChildHandles ( > > > HdDev.PartitionStart - ParentHdDev.PartitionStart, > > > HdDev.PartitionStart - ParentHdDev.PartitionStart > > > + HdDev.PartitionSize - 1, > > > MBR_SIZE, > > > - (BOOLEAN) (Mbr->Partition[0].OSIndicator == > > > EFI_PARTITION) > > > + (BOOLEAN) (Mbr->Partition[0].OSIndicator == > > > EFI_PARTITION), > > > + NULL > > > ); > > > if (!EFI_ERROR (Status)) { > > > Found = EFI_SUCCESS; > > > diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > > > b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > > > index 89cc540..b2f41b5 100644 > > > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > > > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > > > @@ -1060,6 +1060,7 @@ PartitionFlushBlocksEx ( > > > @param[in] End End Block. > > > @param[in] BlockSize Child block size. > > > @param[in] InstallEspGuid Flag to install EFI System Partition > > GUID > > > on handle. > > > + @param[in] PartitionName Name of the partition if it was read > > from > > > GPT > > > > > > @retval EFI_SUCCESS A child handle was added. > > > @retval other A child handle was not added. > > > @@ -1078,7 +1079,8 @@ PartitionInstallChildHandle ( > > > IN EFI_LBA Start, > > > IN EFI_LBA End, > > > IN UINT32 BlockSize, > > > - IN BOOLEAN InstallEspGuid > > > + IN BOOLEAN InstallEspGuid, > > > + IN CHAR16 *PartitionName > > > ) > > > { > > > EFI_STATUS Status; > > > @@ -1160,6 +1162,11 @@ PartitionInstallChildHandle ( > > > } > > > } > > > > > > + Private->PartitionName.Name[0] = 0; if (PartitionName != NULL) { > > > + CopyMem(Private->PartitionName.Name, PartitionName, > > > sizeof(Private->PartitionName.Name)); > > > + } > > > + > > > Private->DevicePath = AppendDevicePathNode (ParentDevicePath, > > > DevicePathNode); > > > > > > if (Private->DevicePath == NULL) { @@ -1189,6 +1196,8 @@ > > > PartitionInstallChildHandle ( > > > &Private->BlockIo, > > > &gEfiBlockIo2ProtocolGuid, > > > &Private->BlockIo2, > > > + &gEfiPartitionNameProtocolGuid, > > > + &Private->PartitionName, > > > Private->EspGuid, > > > NULL, > > > NULL > > > @@ -1200,6 +1209,8 @@ PartitionInstallChildHandle ( > > > Private->DevicePath, > > > &gEfiBlockIoProtocolGuid, > > > &Private->BlockIo, > > > + &gEfiPartitionNameProtocolGuid, > > > + &Private->PartitionName, > > > Private->EspGuid, > > > NULL, > > > NULL > > > diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h > > > b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h > > > index 06470f6..12dce32 100644 > > > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h > > > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h > > > @@ -27,6 +27,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, > > > EITHER EXPRESS OR IMPLIED. > > > #include <Protocol/DriverBinding.h> #include <Protocol/DiskIo.h> > > > #include <Protocol/DiskIo2.h> > > > +#include <Protocol/PartitionName.h> > > > #include <Library/DebugLib.h> > > > #include <Library/UefiDriverEntryPoint.h> #include > > > <Library/BaseLib.h> @@ -53,6 +54,7 @@ typedef struct { > > > EFI_BLOCK_IO2_PROTOCOL BlockIo2; > > > EFI_BLOCK_IO_MEDIA Media; > > > EFI_BLOCK_IO_MEDIA Media2;//For BlockIO2 > > > + EFI_PARTITION_NAME_PROTOCOL PartitionName; > > > > > > EFI_DISK_IO_PROTOCOL *DiskIo; > > > EFI_DISK_IO2_PROTOCOL *DiskIo2; > > > @@ -342,7 +344,8 @@ PartitionInstallChildHandle ( > > > IN EFI_LBA Start, > > > IN EFI_LBA End, > > > IN UINT32 BlockSize, > > > - IN BOOLEAN InstallEspGuid > > > + IN BOOLEAN InstallEspGuid, > > > + IN CHAR16 *PartitionName > > > ); > > > > > > /** > > > diff --git > > > a/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf > > > b/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf > > > index 6806263..d9cfc95 100644 > > > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf > > > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf > > > @@ -52,6 +52,7 @@ > > > > > > [Packages] > > > MdePkg/MdePkg.dec > > > + MdeModulePkg/MdeModulePkg.dec > > > > > > > > > [LibraryClasses] > > > @@ -84,6 +85,7 @@ > > > gEfiDevicePathProtocolGuid > > > gEfiDiskIoProtocolGuid ## TO_START > > > gEfiDiskIo2ProtocolGuid ## TO_START > > > + gEfiPartitionNameProtocolGuid ## TO_START > > > > > > [UserExtensions.TianoCore."ExtraFiles"] > > > PartitionDxeExtra.uni > > > -- > > > 2.5.1 > > > _______________________________________________ > > > edk2-devel mailing list > > > [email protected] > > > https://lists.01.org/mailman/listinfo/edk2-devel > > > > > _______________________________________________ > > edk2-devel mailing list > > [email protected] > > https://lists.01.org/mailman/listinfo/edk2-devel > > _______________________________________________ > > edk2-devel mailing list > > [email protected] > > https://lists.01.org/mailman/listinfo/edk2-devel > > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

