[dpdk-dev] [PATCH v1 05/18] eal/dev: add device iterator interface
Gaetan Rivet
gaetan.rivet at 6wind.com
Thu Mar 15 18:49:35 CET 2018
A device iterator allows iterating over a set of devices.
This set is defined by the two descriptions offered,
* rte_bus
* rte_class
Only one description can be provided, or both. It is not allowed to
provide no description at all.
Each layer of abstraction them performs a filter based on the
description provided. This filtering allows iterating on their internal
set of devices, stopping when a match is valid and storing the current
iteration context.
This context allows starting the next iteration from the same point and
going forward.
Signed-off-by: Gaetan Rivet <gaetan.rivet at 6wind.com>
---
lib/librte_eal/common/include/rte_dev.h | 36 +++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
index b688f1efd..d272d7191 100644
--- a/lib/librte_eal/common/include/rte_dev.h
+++ b/lib/librte_eal/common/include/rte_dev.h
@@ -263,6 +263,42 @@ __attribute__((used)) = str
static const char DRV_EXP_TAG(name, kmod_dep_export)[] \
__attribute__((used)) = str
+/**
+ * Iteration context.
+ *
+ * This context carries over the current iteration state.
+ */
+struct rte_dev_iterator {
+ const char *devstr; /**< device string. */
+ /* Bus context. */
+ struct rte_bus *bus; /**< bus handle. */
+ const char *busstr; /**< bus-related part of device string. */
+ struct rte_device *device; /**< current position. */
+ /* Class context. */
+ struct rte_class *cls; /**< class handle. */
+ const char *clsstr; /**< class-related part of device string. */
+ void *class_device; /**< additional specialized context. */
+};
+
+/**
+ * Device iteration function.
+ *
+ * Iterate over a set of devices, defined in comprehension by
+ * the given iterator.
+ *
+ * This function must update the internal rte_dev_iterator ``device``
+ * field. The ``context`` field can be used as an additional generic context
+ * when the current ``rte_device`` is insufficient.
+ *
+ * @param it
+ * Device iterator.
+ *
+ * @return
+ * The address of the current element when the stopping
+ * condition became valid.
+ */
+typedef struct rte_device *(*rte_dev_iterate_t)(struct rte_dev_iterator *it);
+
#ifdef __cplusplus
}
#endif
--
2.11.0
More information about the dev
mailing list