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

Reply via email to