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

Reply via email to