Re: [U-Boot] [PATCH v2 3/3] uuid: add selection by string for known partition type GUID

2015-10-23 Thread Tom Rini
On Wed, Oct 21, 2015 at 02:14:49PM +0200, Patrick Delaunay wrote:

> short strings can be used in type parameter of gpt command
> to replace the guid string for the types known by u-boot
> 
>   partitions = name=boot,size=0x6bc00,type=data; \
>name=root,size=0x7538ba00,type=linux;
>   gpt write mmc 0 $partitions
> 
> and they are also used to display the type of partition
> in "part list" command
> 
>   Partition Map for MMC device 0  --   Partition Type: EFI
> 
>   PartStart LBA   End LBA Name
>   Attributes
>   Type GUID
>   Partition GUID
> 1 0x0022  0x037f  "boot"
>   attrs:  0x
>   type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
>   type:   data
>   guid:   d117f98e-6f2c-d04b-a5b2-331a19f91cb2
> 2 0x0380  0x003a9fdc  "root"
>   attrs:  0x
>   type:   0fc63daf-8483-4772-8e79-3d69d8477de4
>   type:   linux
>   guid:   25718777-d0ad-7443-9e60-02cb591c9737
> 
> Signed-off-by: Patrick Delaunay 

Reviewed-by: Tom Rini 

-- 
Tom


signature.asc
Description: Digital signature
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v2 3/3] uuid: add selection by string for known partition type GUID

2015-10-21 Thread Patrick Delaunay
short strings can be used in type parameter of gpt command
to replace the guid string for the types known by u-boot

  partitions = name=boot,size=0x6bc00,type=data; \
   name=root,size=0x7538ba00,type=linux;
  gpt write mmc 0 $partitions

and they are also used to display the type of partition
in "part list" command

  Partition Map for MMC device 0  --   Partition Type: EFI

  Part  Start LBA   End LBA Name
Attributes
Type GUID
Partition GUID
1   0x0022  0x037f  "boot"
attrs:  0x
type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
type:   data
guid:   d117f98e-6f2c-d04b-a5b2-331a19f91cb2
2   0x0380  0x003a9fdc  "root"
attrs:  0x
type:   0fc63daf-8483-4772-8e79-3d69d8477de4
type:   linux
guid:   25718777-d0ad-7443-9e60-02cb591c9737

Signed-off-by: Patrick Delaunay 
---

Changes in v2:
- guid change to type in gpt parameter
- remove hardcoded array size and use ARRAY_SIZE
- use guid in parameter name
- array is renamed to list_guid
  (it could be not limited to partition type)

 disk/part_efi.c |  4 
 include/uuid.h  |  4 
 lib/uuid.c  | 64 +++--
 3 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/disk/part_efi.c b/disk/part_efi.c
index c124143..ea9c615 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -223,6 +223,10 @@ void print_part_efi(block_dev_desc_t * dev_desc)
uuid_bin = (unsigned char *)gpt_pte[i].partition_type_guid.b;
uuid_bin_to_str(uuid_bin, uuid, UUID_STR_FORMAT_GUID);
printf("\ttype:\t%s\n", uuid);
+#ifdef CONFIG_PARTITION_TYPE_GUID
+   if (!uuid_guid_get_str(uuid_bin, uuid))
+   printf("\ttype:\t%s\n", uuid);
+#endif
uuid_bin = (unsigned char *)gpt_pte[i].unique_partition_guid.b;
uuid_bin_to_str(uuid_bin, uuid, UUID_STR_FORMAT_GUID);
printf("\tguid:\t%s\n", uuid);
diff --git a/include/uuid.h b/include/uuid.h
index 93027c1..c3f423f 100644
--- a/include/uuid.h
+++ b/include/uuid.h
@@ -36,6 +36,10 @@ enum {
 int uuid_str_valid(const char *uuid);
 int uuid_str_to_bin(char *uuid_str, unsigned char *uuid_bin, int str_format);
 void uuid_bin_to_str(unsigned char *uuid_bin, char *uuid_str, int str_format);
+#ifdef CONFIG_PARTITION_TYPE_GUID
+int uuid_guid_get_bin(const char *guid_str, unsigned char *guid_bin);
+int uuid_guid_get_str(unsigned char *guid_bin, char *guid_str);
+#endif
 void gen_rand_uuid(unsigned char *uuid_bin);
 void gen_rand_uuid_str(char *uuid_str, int str_format);
 #endif
diff --git a/lib/uuid.c b/lib/uuid.c
index f6b4423..c8584ed 100644
--- a/lib/uuid.c
+++ b/lib/uuid.c
@@ -80,10 +80,65 @@ int uuid_str_valid(const char *uuid)
return 1;
 }
 
+#ifdef CONFIG_PARTITION_TYPE_GUID
+static const struct {
+   const char *string;
+   efi_guid_t guid;
+} list_guid[] = {
+   {"system",  PARTITION_SYSTEM_GUID},
+   {"mbr", LEGACY_MBR_PARTITION_GUID},
+   {"msft",PARTITION_MSFT_RESERVED_GUID},
+   {"data",PARTITION_BASIC_DATA_GUID},
+   {"linux",   PARTITION_LINUX_FILE_SYSTEM_DATA_GUID},
+   {"raid",PARTITION_LINUX_RAID_GUID},
+   {"swap",PARTITION_LINUX_SWAP_GUID},
+   {"lvm", PARTITION_LINUX_LVM_GUID}
+};
+
+/*
+ * uuid_guid_get_bin() - this function get GUID bin for string
+ *
+ * @param guid_str - pointer to partition type string
+ * @param guid_bin - pointer to allocated array for big endian output [16B]
+ */
+int uuid_guid_get_bin(const char *guid_str, unsigned char *guid_bin)
+{
+   int i;
+
+   for (i = 0; i < ARRAY_SIZE(list_guid); i++) {
+   if (!strcmp(list_guid[i].string, guid_str)) {
+   memcpy(guid_bin, _guid[i].guid, 16);
+   return 0;
+   }
+   }
+   return -ENODEV;
+}
+
+/*
+ * uuid_guid_get_str() - this function get string for GUID.
+ *
+ * @param guid_bin - pointer to string with partition type guid [16B]
+ * @param guid_str - pointer to allocated partition type string [7B]
+ */
+int uuid_guid_get_str(unsigned char *guid_bin, char *guid_str)
+{
+   int i;
+
+   *guid_str = 0;
+   for (i = 0; i < ARRAY_SIZE(list_guid); i++) {
+   if (!memcmp(list_guid[i].guid.b, guid_bin, 16)) {
+   strcpy(guid_str, list_guid[i].string);
+   return 0;
+   }
+   }
+   return -ENODEV;
+}
+#endif
+
 /*
  * uuid_str_to_bin() - convert string UUID or GUID to big endian binary data.
  *
- * @param uuid_str - pointer to UUID or GUID string [37B]
+ * @param uuid_str - pointer to UUID or GUID string [37B] or GUID shorcut
  * @param uuid_bin - pointer to allocated array for big endian output [16B]
  * @str_format -