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

Reply via email to