]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - lib/uuid.c
ARM: k2g: Add pinmux data for QSPI on K2G ICE
[people/ms/u-boot.git] / lib / uuid.c
index f6b442355170927c207d5087e29e1241efc9c09f..1536c027da27c82df8953be81207296c979a1111 100644 (file)
@@ -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, &list_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     - UUID string format: 0 - UUID; 1 - GUID
  */
@@ -93,8 +148,13 @@ int uuid_str_to_bin(char *uuid_str, unsigned char *uuid_bin, int str_format)
        uint32_t tmp32;
        uint64_t tmp64;
 
-       if (!uuid_str_valid(uuid_str))
+       if (!uuid_str_valid(uuid_str)) {
+#ifdef CONFIG_PARTITION_TYPE_GUID
+               if (!uuid_guid_get_bin(uuid_str, uuid_bin))
+                       return 0;
+#endif
                return -EINVAL;
+       }
 
        if (str_format == UUID_STR_FORMAT_STD) {
                tmp32 = cpu_to_be32(simple_strtoul(uuid_str, NULL, 16));
@@ -231,7 +291,7 @@ int do_uuid(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        if (argc == 1)
                printf("%s\n", uuid);
        else
-               setenv(argv[1], uuid);
+               env_set(argv[1], uuid);
 
        return CMD_RET_SUCCESS;
 }