]> git.sur5r.net Git - u-boot/commitdiff
disk: part: use common api to lookup part driver
authorKever Yang <kever.yang@rock-chips.com>
Sat, 10 Feb 2018 09:55:38 +0000 (17:55 +0800)
committerTom Rini <trini@konsulko.com>
Wed, 14 Mar 2018 01:58:45 +0000 (21:58 -0400)
Do not need to scan disk every time when we get part info
by name.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
[trini: Fix build in !CONFIG_HAVE_BLOCK_DEVICE case]
Signed-off-by: Tom Rini <trini@konsulko.com>
disk/part.c

index 16de7a2c3139d6deeedd61b2c080edd4a8a33ca1..44ef14dc54f0761d1f439ea4b0e78b650e7990c2 100644 (file)
@@ -26,7 +26,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef CONFIG_HAVE_BLOCK_DEVICE
 static struct part_driver *part_driver_lookup_type(struct blk_desc *dev_desc)
 {
        struct part_driver *drv =
@@ -55,6 +54,7 @@ static struct part_driver *part_driver_lookup_type(struct blk_desc *dev_desc)
        return NULL;
 }
 
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 static struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 {
        struct blk_desc *dev_desc;
@@ -644,28 +644,25 @@ cleanup:
 int part_get_info_by_name_type(struct blk_desc *dev_desc, const char *name,
                               disk_partition_t *info, int part_type)
 {
-       struct part_driver *first_drv =
-               ll_entry_start(struct part_driver, part_driver);
-       const int n_drvs = ll_entry_count(struct part_driver, part_driver);
        struct part_driver *part_drv;
-
-       for (part_drv = first_drv; part_drv != first_drv + n_drvs; part_drv++) {
-               int ret;
-               int i;
-               for (i = 1; i < part_drv->max_entries; i++) {
-                       if (part_type >= 0 && part_type != part_drv->part_type)
-                               break;
-                       ret = part_drv->get_info(dev_desc, i, info);
-                       if (ret != 0) {
-                               /* no more entries in table */
-                               break;
-                       }
-                       if (strcmp(name, (const char *)info->name) == 0) {
-                               /* matched */
-                               return i;
-                       }
+       int ret;
+       int i;
+
+       part_drv = part_driver_lookup_type(dev_desc);
+       if (!part_drv)
+               return -1;
+       for (i = 1; i < part_drv->max_entries; i++) {
+               ret = part_drv->get_info(dev_desc, i, info);
+               if (ret != 0) {
+                       /* no more entries in table */
+                       break;
+               }
+               if (strcmp(name, (const char *)info->name) == 0) {
+                       /* matched */
+                       return i;
                }
        }
+
        return -1;
 }