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