diff mbox

[U-Boot,v2,3/4] disk: part: refactor generic name creation for DOS and ISO

Message ID 1473409638-19701-4-git-send-email-brain@jikos.cz
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Petr Kulhavy Sept. 9, 2016, 8:27 a.m. UTC
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 <brain@jikos.cz>
Reviewed-by: Tom Rini <trini@konsulko.com>
---
v1: initial
v2: no change

 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(-)

Comments

Steve Rae Sept. 12, 2016, 5:39 p.m. UTC | #1
On Fri, Sep 9, 2016 at 1:27 AM, Petr Kulhavy <brain@jikos.cz> wrote:
> 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 <brain@jikos.cz>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> ---
> v1: initial
> v2: no change
>
>  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)
> --
> 2.7.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

Acked-by: Steve Rae <steve.rae@raedomain.com>
Simon Glass Sept. 19, 2016, 12:57 a.m. UTC | #2
On 9 September 2016 at 02:27, Petr Kulhavy <brain@jikos.cz> wrote:
> 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 <brain@jikos.cz>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> ---
> v1: initial
> v2: no change
>
>  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(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
Tom Rini Oct. 3, 2016, 1:37 p.m. UTC | #3
On Fri, Sep 09, 2016 at 10:27:17AM +0200, Petr Kulhavy wrote:

> 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 <brain@jikos.cz>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> Acked-by: Steve Rae <steve.rae@raedomain.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!
diff mbox

Patch

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)