Michael

Is there a spec about the GPT partition naming rule in Android world? Could you 
share the link?

If these GPT partitions have special naming rules (boot, recovery…), why they 
don’t define specific partition type guid just like EFI SYSTEM PARTITION to 
distinguish them?

For example, EFI System Partition type guid is defined by UEFI as 
C12A7328-F81F-11D2-BA4B-00A0C93EC93B

Thanks
Feng

From: Michael Zimmermann [mailto:sigmaepsilo...@gmail.com]
Sent: Wednesday, September 09, 2015 17:34
To: Tian, Feng
Cc: Ni, Ruiyu; edk2-devel@lists.01.org
Subject: Re: [edk2] [PATCH] MdeModulePkg: add PartitionName protocol

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 
<feng.t...@intel.com<mailto:feng.t...@intel.com>> 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:edk2-devel-boun...@lists.01.org<mailto:edk2-devel-boun...@lists.01.org>]
 On Behalf Of Michael Zimmermann
Sent: Wednesday, September 09, 2015 15:48
To: Tian, Feng
Cc: Ni, Ruiyu; edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
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 
<feng.t...@intel.com<mailto:feng.t...@intel.com>> 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:edk2-devel-boun...@lists.01.org<mailto:edk2-devel-boun...@lists.01.org>]
>  On Behalf Of
> Michael Zimmermann
> Sent: Wednesday, September 09, 2015 15:28
> To: Ni, Ruiyu
> Cc: edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> 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 
> <ruiyu...@intel.com<mailto:ruiyu...@intel.com>> 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:edk2-devel-boun...@lists.01.org<mailto:edk2-devel-boun...@lists.01.org>]
> >  On Behalf
> > Of Michael Zimmermann
> > Sent: Thursday, September 3, 2015 2:23 PM
> > To: edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> > 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 
> > n...@hp.com<mailto:n...@hp.com>>
> > ---
> >  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
> > edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> > https://lists.01.org/mailman/listinfo/edk2-devel
> >
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> https://lists.01.org/mailman/listinfo/edk2-devel
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> https://lists.01.org/mailman/listinfo/edk2-devel
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to