From da2ee24d9150448e1816db790b4e11e2cf53df20 Mon Sep 17 00:00:00 2001 From: Petr Kulhavy Date: Fri, 9 Sep 2016 10:27:17 +0200 Subject: [PATCH] disk: part: refactor generic name creation for DOS and ISO In both DOS and ISO partition tables the same code to create partition name like "hda1" was repeated. Code moved to into a new function part_set_generic_name() in part.c and optimized. Added recognition of MMC and SD types, name is like "mmcsda1". Signed-off-by: Petr Kulhavy Reviewed-by: Tom Rini Acked-by: Steve Rae Reviewed-by: Simon Glass --- disk/part.c | 32 ++++++++++++++++++++++++++++++++ disk/part_dos.c | 31 ++----------------------------- disk/part_iso.c | 25 +------------------------ doc/README.android-fastboot | 1 + include/part.h | 14 ++++++++++++++ 5 files changed, 50 insertions(+), 53 deletions(-) diff --git a/disk/part.c b/disk/part.c index 8317e80..9f51a07 100644 --- a/disk/part.c +++ b/disk/part.c @@ -641,3 +641,35 @@ int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, } return -1; } + +void part_set_generic_name(const struct blk_desc *dev_desc, + int part_num, char *name) +{ + char *devtype; + + switch (dev_desc->if_type) { + case IF_TYPE_IDE: + case IF_TYPE_SATA: + case IF_TYPE_ATAPI: + devtype = "hd"; + break; + case IF_TYPE_SCSI: + devtype = "sd"; + break; + case IF_TYPE_USB: + devtype = "usbd"; + break; + case IF_TYPE_DOC: + devtype = "docd"; + break; + case IF_TYPE_MMC: + case IF_TYPE_SD: + devtype = "mmcsd"; + break; + default: + devtype = "xx"; + break; + } + + sprintf(name, "%s%c%d", devtype, 'a' + dev_desc->devnum, part_num); +} diff --git a/disk/part_dos.c b/disk/part_dos.c index 8e6aae5..ed78334 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -209,35 +209,8 @@ static int part_get_info_extended(struct blk_desc *dev_desc, info->start = (lbaint_t)(ext_part_sector + le32_to_int(pt->start4)); info->size = (lbaint_t)le32_to_int(pt->size4); - switch(dev_desc->if_type) { - case IF_TYPE_IDE: - case IF_TYPE_SATA: - case IF_TYPE_ATAPI: - sprintf((char *)info->name, "hd%c%d", - 'a' + dev_desc->devnum, - part_num); - break; - case IF_TYPE_SCSI: - sprintf((char *)info->name, "sd%c%d", - 'a' + dev_desc->devnum, - part_num); - break; - case IF_TYPE_USB: - sprintf((char *)info->name, "usbd%c%d", - 'a' + dev_desc->devnum, - part_num); - break; - case IF_TYPE_DOC: - sprintf((char *)info->name, "docd%c%d", - 'a' + dev_desc->devnum, - part_num); - break; - default: - sprintf((char *)info->name, "xx%c%d", - 'a' + dev_desc->devnum, - part_num); - break; - } + part_set_generic_name(dev_desc, part_num, + (char *)info->name); /* sprintf(info->type, "%d, pt->sys_ind); */ strcpy((char *)info->type, "U-Boot"); info->bootable = is_bootable(pt); diff --git a/disk/part_iso.c b/disk/part_iso.c index 78fc97e..bb8ed65 100644 --- a/disk/part_iso.c +++ b/disk/part_iso.c @@ -137,30 +137,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num, entry_num=1; offset=0x20; strcpy((char *)info->type, "U-Boot"); - switch(dev_desc->if_type) { - case IF_TYPE_IDE: - case IF_TYPE_SATA: - case IF_TYPE_ATAPI: - sprintf ((char *)info->name, "hd%c%d", - 'a' + dev_desc->devnum, part_num); - break; - case IF_TYPE_SCSI: - sprintf ((char *)info->name, "sd%c%d", - 'a' + dev_desc->devnum, part_num); - break; - case IF_TYPE_USB: - sprintf ((char *)info->name, "usbd%c%d", - 'a' + dev_desc->devnum, part_num); - break; - case IF_TYPE_DOC: - sprintf ((char *)info->name, "docd%c%d", - 'a' + dev_desc->devnum, part_num); - break; - default: - sprintf ((char *)info->name, "xx%c%d", - 'a' + dev_desc->devnum, part_num); - break; - } + part_set_generic_name(dev_desc, part_num, (char *)info->name); /* the bootcatalog (including validation Entry) is limited to 2048Bytes * (63 boot entries + validation entry) */ while(offset<2048) { diff --git a/doc/README.android-fastboot b/doc/README.android-fastboot index dea7066..b8afa15 100644 --- a/doc/README.android-fastboot +++ b/doc/README.android-fastboot @@ -79,6 +79,7 @@ The device type is as follows: * IDE, ATAPI and SATA disks: hd * SCSI disks: sd * USB media: usbd + * MMC and SD cards: mmcsd * Disk on chip: docd * other: xx diff --git a/include/part.h b/include/part.h index b17c219..0979005 100644 --- a/include/part.h +++ b/include/part.h @@ -165,6 +165,20 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str, int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, disk_partition_t *info); +/** + * part_set_generic_name() - create generic partition like hda1 or sdb2 + * + * Helper function for partition tables, which don't hold partition names + * (DOS, ISO). Generates partition name out of the device type and partition + * number. + * + * @dev_desc: pointer to the block device + * @part_num: partition number for which the name is generated + * @name: buffer where the name is written + */ +void part_set_generic_name(const struct blk_desc *dev_desc, + int part_num, char *name); + extern const struct block_drvr block_drvr[]; #else static inline struct blk_desc *blk_get_dev(const char *ifname, int dev)