From: Joshua Watt <jpewhacker@gmail.com>
To: u-boot@lists.denx.de
Cc: Joshua Watt <JPEWhacker@gmail.com>,
Simon Glass <sjg@chromium.org>,
Tobias Waldekranz <tobias@waldekranz.com>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Heiko Schocher <hs@denx.de>,
Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
Subject: [PATCH v2 3/5] disk: part: Add API to get partitions with specific driver
Date: Mon, 3 Jul 2023 08:39:54 -0500 [thread overview]
Message-ID: <20230703133959.3880305-4-JPEWhacker@gmail.com> (raw)
In-Reply-To: <20230703133959.3880305-1-JPEWhacker@gmail.com>
Adds part_driver_get_type() API which can be used to force a specific
driver to be used when getting partition information instead of relying
on auto detection.
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
disk/part.c | 38 +++++++++++++++++++++++++++++++-------
include/part.h | 19 ++++++++++++++++++-
2 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/disk/part.c b/disk/part.c
index 35300df590..1f8c786ca5 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -26,6 +26,22 @@
/* Check all partition types */
#define PART_TYPE_ALL -1
+static struct part_driver *part_driver_get_type(int part_type)
+{
+ struct part_driver *drv =
+ ll_entry_start(struct part_driver, part_driver);
+ const int n_ents = ll_entry_count(struct part_driver, part_driver);
+ struct part_driver *entry;
+
+ for (entry = drv; entry != drv + n_ents; entry++) {
+ if (part_type == entry->part_type)
+ return entry;
+ }
+
+ /* Not found */
+ return NULL;
+}
+
static struct part_driver *part_driver_lookup_type(struct blk_desc *dev_desc)
{
struct part_driver *drv =
@@ -44,10 +60,7 @@ static struct part_driver *part_driver_lookup_type(struct blk_desc *dev_desc)
}
}
} else {
- for (entry = drv; entry != drv + n_ents; entry++) {
- if (dev_desc->part_type == entry->part_type)
- return entry;
- }
+ return part_driver_get_type(dev_desc->part_type);
}
/* Not found */
@@ -306,8 +319,8 @@ void part_print(struct blk_desc *dev_desc)
drv->print(dev_desc);
}
-int part_get_info(struct blk_desc *dev_desc, int part,
- struct disk_partition *info)
+int part_get_info_by_type(struct blk_desc *dev_desc, int part, int part_type,
+ struct disk_partition *info)
{
struct part_driver *drv;
@@ -320,7 +333,12 @@ int part_get_info(struct blk_desc *dev_desc, int part,
info->type_guid[0] = 0;
#endif
- drv = part_driver_lookup_type(dev_desc);
+ if (part_type == PART_TYPE_UNKNOWN) {
+ drv = part_driver_lookup_type(dev_desc);
+ } else {
+ drv = part_driver_get_type(part_type);
+ }
+
if (!drv) {
debug("## Unknown partition table type %x\n",
dev_desc->part_type);
@@ -340,6 +358,12 @@ int part_get_info(struct blk_desc *dev_desc, int part,
return -ENOENT;
}
+int part_get_info(struct blk_desc *dev_desc, int part,
+ struct disk_partition *info)
+{
+ return part_get_info_by_type(dev_desc, part, PART_TYPE_UNKNOWN, info);
+}
+
int part_get_info_whole_disk(struct blk_desc *dev_desc,
struct disk_partition *info)
{
diff --git a/include/part.h b/include/part.h
index be75c73549..8a0c8732a6 100644
--- a/include/part.h
+++ b/include/part.h
@@ -105,7 +105,24 @@ struct blk_desc *blk_get_dev(const char *ifname, int dev);
struct blk_desc *mg_disk_get_dev(int dev);
-/* disk/part.c */
+/**
+ * part_get_info_by_type() - Get partitions from a block device using a specific
+ * partition driver
+ *
+ * Each interface allocates its own devices and typically struct blk_desc is
+ * contained with the interface's data structure. There is no global
+ * numbering for block devices, so the interface name must be provided.
+ *
+ * @dev_desc: Block device descriptor
+ * @part: Partition number to read
+ * @part_type: Partition driver to use, or PART_TYPE_UNKNOWN to automatically
+ * choose a driver
+ * @info: Returned partition information
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+int part_get_info_by_type(struct blk_desc *dev_desc, int part, int part_type,
+ struct disk_partition *info);
int part_get_info(struct blk_desc *dev_desc, int part,
struct disk_partition *info);
/**
--
2.33.0
next prev parent reply other threads:[~2023-07-03 13:40 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-23 19:59 [PATCH 0/2] Fix 'mbr' command with hybrid MBR/GPT Joshua Watt
2023-06-23 19:59 ` [PATCH 1/2] disk: part: Add API to get partitions with specific driver Joshua Watt
2023-06-26 9:07 ` Simon Glass
2023-06-28 13:33 ` Joshua Watt
2023-06-29 19:09 ` Simon Glass
2023-06-23 20:00 ` [PATCH 2/2] cmd: mbr: Force DOS driver to be used for verify Joshua Watt
2023-07-03 13:39 ` [PATCH v2 0/5] Fix 'mbr' command with hybrid MBR/GPT Joshua Watt
2023-07-03 13:39 ` [PATCH v2 1/5] dm: test: Fix partition test to use mmc2 Joshua Watt
2023-07-04 2:40 ` Simon Glass
2023-07-05 0:16 ` Jaehoon Chung
2023-07-18 13:58 ` Tom Rini
2023-07-03 13:39 ` [PATCH v2 2/5] dm: test: Improve partition test error output Joshua Watt
2023-07-04 2:40 ` Simon Glass
2023-07-18 13:58 ` Tom Rini
2023-07-03 13:39 ` Joshua Watt [this message]
2023-07-04 2:40 ` [PATCH v2 3/5] disk: part: Add API to get partitions with specific driver Simon Glass
2023-07-18 13:58 ` Tom Rini
2023-07-03 13:39 ` [PATCH v2 4/5] dm: test: Add test for part_get_info_by_type Joshua Watt
2023-07-04 2:40 ` Simon Glass
2023-07-18 13:58 ` Tom Rini
2023-07-03 13:39 ` [PATCH v2 5/5] cmd: mbr: Force DOS driver to be used for verify Joshua Watt
2023-07-04 2:40 ` Simon Glass
2023-07-18 13:58 ` Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230703133959.3880305-4-JPEWhacker@gmail.com \
--to=jpewhacker@gmail.com \
--cc=hs@denx.de \
--cc=sjg@chromium.org \
--cc=stefan.herbrechtsmeier@weidmueller.com \
--cc=tobias@waldekranz.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox