disk: part_efi: set bootable flag in partition objects
authorStephen Warren <swarren@nvidia.com>
Mon, 8 Oct 2012 08:14:37 +0000 (08:14 +0000)
committerTom Rini <trini@ti.com>
Wed, 17 Oct 2012 14:59:10 +0000 (07:59 -0700)
A partition is considered bootable if it either has the "legacy BIOS
bootable" flag set, or if the partition type UUID matches the standard
"system" type.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
disk/part_efi.c

index d563509584af9fa5290953a65955b053b5159c21..7a39d52f8ee5242c314d97be1512278114e59da4 100644 (file)
@@ -133,6 +133,15 @@ static void uuid_string(unsigned char *uuid, char *str)
        }
 }
 
+static efi_guid_t system_guid = PARTITION_SYSTEM_GUID;
+
+static inline int is_bootable(gpt_entry *p)
+{
+       return p->attributes.fields.legacy_bios_bootable ||
+               !memcmp(&(p->partition_type_guid), &system_guid,
+                       sizeof(efi_guid_t));
+}
+
 /*
  * Public Functions (include/part.h)
  */
@@ -219,6 +228,7 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int part,
        sprintf((char *)info->name, "%s",
                        print_efiname(&gpt_pte[part - 1]));
        sprintf((char *)info->type, "U-Boot");
+       info->bootable = is_bootable(&gpt_pte[part - 1]);
 #ifdef CONFIG_PARTITION_UUIDS
        uuid_string(gpt_pte[part - 1].unique_partition_guid.b, info->uuid);
 #endif