diff options
author | Sam Protsenko <semen.protsenko@linaro.org> | 2017-09-22 01:51:58 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-10-06 11:28:17 -0400 |
commit | 30789095566a6f4c62430f613f450acf8d5162e5 (patch) | |
tree | 638ea729a038272db9e29915b866168b5653ad9c | |
parent | 19d141a0f90c640a8d5ed699745cbc8169918945 (diff) | |
download | u-boot-30789095566a6f4c62430f613f450acf8d5162e5.tar.gz u-boot-30789095566a6f4c62430f613f450acf8d5162e5.tar.bz2 u-boot-30789095566a6f4c62430f613f450acf8d5162e5.zip |
disk: Provide API to get partition by name for specific type
There is already existing function part_get_info_by_name().
But sometimes user is particularly interested in looking for only
specific partition type. This patch implements such an API that
provides partition searching by name for specified partition type.
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | disk/part.c | 15 | ||||
-rw-r--r-- | include/part.h | 15 |
2 files changed, 28 insertions, 2 deletions
diff --git a/disk/part.c b/disk/part.c index aa9183d696..66b8101f98 100644 --- a/disk/part.c +++ b/disk/part.c @@ -21,6 +21,9 @@ #define PRINTF(fmt,args...) #endif +/* Check all partition types */ +#define PART_TYPE_ALL -1 + DECLARE_GLOBAL_DATA_PTR; #ifdef HAVE_BLOCK_DEVICE @@ -626,8 +629,8 @@ cleanup: return ret; } -int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, - disk_partition_t *info) +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); @@ -638,6 +641,8 @@ int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, 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 */ @@ -652,6 +657,12 @@ int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, return -1; } +int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, + disk_partition_t *info) +{ + return part_get_info_by_name_type(dev_desc, name, info, PART_TYPE_ALL); +} + void part_set_generic_name(const struct blk_desc *dev_desc, int part_num, char *name) { diff --git a/include/part.h b/include/part.h index b2e820ef8a..0caceafc5f 100644 --- a/include/part.h +++ b/include/part.h @@ -174,6 +174,21 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str, disk_partition_t *info, int allow_whole_dev); /** + * part_get_info_by_name_type() - Search for a partition by name + * for only specified partition type + * + * @param dev_desc - block device descriptor + * @param gpt_name - the specified table entry name + * @param info - returns the disk partition info + * @param part_type - only search in partitions of this type + * + * @return - the partition number on match (starting on 1), -1 on no match, + * otherwise error + */ +int part_get_info_by_name_type(struct blk_desc *dev_desc, const char *name, + disk_partition_t *info, int part_type); + +/** * part_get_info_by_name() - Search for a partition by name * among all available registered partitions * |