From 6eecc0307927fee1ff70151980b3a8c02ffeb947 Mon Sep 17 00:00:00 2001 From: Lei Wen Date: Wed, 7 Sep 2011 18:11:19 +0000 Subject: part: show efi partition name when print out partition info Previous output: Marvell>> mmc part Partition Map for MMC device 1 -- Partition Type: EFI Part Start LBA End LBA gpt1 0x8C00 0xCBFF gpt2 0xCC00 0x57BFF gpt3 0x57C00 0xA2BFF gpt4 0xA2C00 0xECBFDE With the patch, the output becomes: Marvell>> mmc part Partition Map for MMC device 1 -- Partition Type: EFI Part Name Start LBA End LBA 1 ramdisk 0x00008C00 0x0000CBFF 2 system 0x0000CC00 0x00057BFF 3 userdata 0x00057C00 0x000A2BFF 4 remaining 0x000A2C00 0x00ECBFDE Signed-off-by: Lei Wen diff --git a/disk/part_efi.c b/disk/part_efi.c index 1b04c27..0a513c6 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -35,6 +35,7 @@ #include #include #include "part_efi.h" +#include #if defined(CONFIG_CMD_IDE) || \ defined(CONFIG_CMD_MG_DISK) || \ @@ -99,6 +100,20 @@ static gpt_entry *alloc_read_gpt_entries(block_dev_desc_t * dev_desc, static int is_pte_valid(gpt_entry * pte); +static char *print_efiname(gpt_entry *pte) +{ + static char name[PARTNAME_SZ + 1]; + int i; + for (i = 0; i < PARTNAME_SZ; i++) { + u8 c; + c = pte->partition_name[i] & 0xff; + c = (c && !isprint(c)) ? '.' : c; + name[i] = c; + } + name[PARTNAME_SZ] = 0; + return name; +} + /* * Public Functions (include/part.h) */ @@ -122,12 +137,12 @@ void print_part_efi(block_dev_desc_t * dev_desc) debug("%s: gpt-entry at 0x%08X\n", __FUNCTION__, (unsigned int)*pgpt_pte); - printf("Part Start LBA End LBA\n"); + printf("Part\tName\t\t\tStart LBA\tEnd LBA\n"); for (i = 0; i < le32_to_int(gpt_head.num_partition_entries); i++) { if (is_pte_valid(&(*pgpt_pte)[i])) { - printf("%s%d 0x%llX 0x%llX\n", GPT_ENTRY_NAME, - (i + 1), + printf("%3d\t%-18s\t0x%08llX\t0x%08llX\n", (i + 1), + print_efiname(&(*pgpt_pte)[i]), le64_to_int((*pgpt_pte)[i].starting_lba), le64_to_int((*pgpt_pte)[i].ending_lba)); } else { @@ -169,7 +184,8 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int part, - info->start; info->blksz = GPT_BLOCK_SIZE; - sprintf((char *)info->name, "%s%d", GPT_ENTRY_NAME, part); + sprintf((char *)info->name, "%s", + print_efiname(&(*pgpt_pte)[part - 1])); sprintf((char *)info->type, "U-Boot"); debug("%s: start 0x%lX, size 0x%lX, name %s", __FUNCTION__, diff --git a/disk/part_efi.h b/disk/part_efi.h index 6bbb06b..5903e7c 100644 --- a/disk/part_efi.h +++ b/disk/part_efi.h @@ -117,13 +117,14 @@ typedef struct _gpt_entry_attributes { unsigned long long type_guid_specific:16; } __attribute__ ((packed)) gpt_entry_attributes; +#define PARTNAME_SZ (72 / sizeof(efi_char16_t)) typedef struct _gpt_entry { efi_guid_t partition_type_guid; efi_guid_t unique_partition_guid; unsigned char starting_lba[8]; unsigned char ending_lba[8]; gpt_entry_attributes attributes; - efi_char16_t partition_name[72 / sizeof(efi_char16_t)]; + efi_char16_t partition_name[PARTNAME_SZ]; } __attribute__ ((packed)) gpt_entry; -- cgit v0.10.2