mirror of
https://github.com/linux-sunxi/u-boot-sunxi.git
synced 2024-02-12 11:16:03 +08:00
uuid: add selection by string for known partition type GUID
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 0x00000022 0x0000037f "boot" attrs: 0x0000000000000000 type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 type: data guid: d117f98e-6f2c-d04b-a5b2-331a19f91cb2 2 0x00000380 0x003a9fdc "root" attrs: 0x0000000000000000 type: 0fc63daf-8483-4772-8e79-3d69d8477de4 type: linux guid: 25718777-d0ad-7443-9e60-02cb591c9737 Signed-off-by: Patrick Delaunay <patrick.delaunay73@gmail.com>
This commit is contained in:

committed by
Tom Rini

parent
7561b258a1
commit
bcb41dcaef
64
lib/uuid.c
64
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, &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));
|
||||
|
Reference in New Issue
Block a user