summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2012-10-08 08:14:37 +0000
committerTom Rini <trini@ti.com>2012-10-17 07:59:10 -0700
commitb4414f4a4a8986378a33600046cbe1a917267119 (patch)
tree1c6b5a96163b1cac24061cefb4f4ed97e95e0af8
parent13bf2f55d9ea6620f0bcdc4a9f0b67f6ec81885f (diff)
disk: part_efi: set bootable flag in partition objects
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>
-rw-r--r--disk/part_efi.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/disk/part_efi.c b/disk/part_efi.c
index d563509584a..7a39d52f8ee 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -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