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

Reply via email to