[U-Boot] [PATCH V3] part: show efi partition name when print out partition info
Lei Wen
adrian.wenl at gmail.com
Thu Sep 29 04:14:40 CEST 2011
Hi Wolfgang,
On Thu, Sep 8, 2011 at 12:11 PM, Lei Wen <leiwen at marvell.com> wrote:
> 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 <leiwen at marvell.com>
> ---
> Changelog:
> V1: align the efi part name output to the left
> V2: correct patch description for this new alignment
> V3: Remove the magic number definition, and reuse the same
> number used by partition_name. Fix loop overflow issue.
>
> disk/part_efi.c | 24 ++++++++++++++++++++----
> disk/part_efi.h | 3 ++-
> 2 files changed, 22 insertions(+), 5 deletions(-)
>
> 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 <ide.h>
> #include <malloc.h>
> #include "part_efi.h"
> +#include <linux/ctype.h>
>
> #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;
>
> --
> 1.7.0.4
>
How about merge this patch included in 2011.09 release? :)
Thanks,
Lei
More information about the U-Boot
mailing list