We already record DOS partition type in cdev, so let's do the same for
GPT Type UUID. This will be used in a later commit to identify
barebox-state partitions.

Signed-off-by: Ahmad Fatoum <[email protected]>
---
 common/partitions.c        | 2 +-
 common/partitions/efi.c    | 1 +
 common/partitions/parser.h | 5 ++++-
 fs/fs.c                    | 2 ++
 include/driver.h           | 6 +++++-
 5 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/common/partitions.c b/common/partitions.c
index b579559672a0..e3e8a9f3044d 100644
--- a/common/partitions.c
+++ b/common/partitions.c
@@ -50,7 +50,7 @@ static int register_one_partition(struct block_device *blk,
 
        cdev->flags |= DEVFS_PARTITION_FROM_TABLE;
 
-       cdev->dos_partition_type = part->dos_partition_type;
+       cdev->typeuuid = part->typeuuid;
        strcpy(cdev->partuuid, part->partuuid);
 
        free(partition_name);
diff --git a/common/partitions/efi.c b/common/partitions/efi.c
index df63b82afe24..2756337ab284 100644
--- a/common/partitions/efi.c
+++ b/common/partitions/efi.c
@@ -471,6 +471,7 @@ static void efi_partition(void *buf, struct block_device 
*blk,
                pentry->size++;
                part_set_efi_name(&ptes[i], pentry->name);
                snprintf(pentry->partuuid, sizeof(pentry->partuuid), "%pUl", 
&ptes[i].unique_partition_guid);
+               pentry->typeuuid = ptes[i].partition_type_guid;
                pd->used_entries++;
        }
 }
diff --git a/common/partitions/parser.h b/common/partitions/parser.h
index f2f692f7903b..9cc41a7573fe 100644
--- a/common/partitions/parser.h
+++ b/common/partitions/parser.h
@@ -17,10 +17,13 @@
 
 struct partition {
        char name[MAX_PARTITION_NAME];
-       u8 dos_partition_type;
        char partuuid[MAX_UUID_STR];
        uint64_t first_sec;
        uint64_t size;
+       union {
+               u8 dos_partition_type;
+               guid_t typeuuid;
+       };
 };
 
 struct partition_desc {
diff --git a/fs/fs.c b/fs/fs.c
index 9a92e6e251e5..16cc072adfaf 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -110,6 +110,8 @@ void cdev_print(const struct cdev *cdev)
                nbytes += printf("Filetype: %s\t", 
file_type_to_string(cdev->filetype));
        if (cdev_is_mbr_partitioned(cdev->master))
                nbytes += printf("DOS parttype: 0x%02x\t", 
cdev->dos_partition_type);
+       else if (cdev_is_gpt_partitioned(cdev->master))
+               nbytes += printf("GPT typeuuid: %pUl\t", &cdev->typeuuid);
        if (*cdev->partuuid || *cdev->diskuuid)
                nbytes += printf("%sUUID: %s", cdev_is_partition(cdev) ? "PART" 
: "DISK",
                                 cdev_is_partition(cdev) ? cdev->partuuid : 
cdev->diskuuid);
diff --git a/include/driver.h b/include/driver.h
index 5f2eae65466f..6407f7d6ba36 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -8,6 +8,7 @@
 
 #include <linux/list.h>
 #include <linux/ioport.h>
+#include <linux/uuid.h>
 #include <of.h>
 #include <filetype.h>
 
@@ -536,12 +537,15 @@ struct cdev {
        unsigned int flags;
        int open;
        struct mtd_info *mtd;
-       u8 dos_partition_type;
        struct cdev *link;
        struct list_head link_entry, links;
        struct list_head partition_entry, partitions;
        struct cdev *master;
        enum filetype filetype;
+       union {
+               u8 dos_partition_type;
+               guid_t typeuuid;
+       };
 };
 
 int devfs_create(struct cdev *);
-- 
2.39.2


Reply via email to