bus: add iterator to find a bus

This helper allows to iterate over all registered buses and find one
matching data used as parameter.

Signed-off-by: Jan Blunck <jblunck@infradead.org>
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
This commit is contained in:
Jan Blunck 2017-06-30 20:19:30 +02:00 committed by Thomas Monjalon
parent fea892e35f
commit 87bfa873af
4 changed files with 75 additions and 0 deletions

View File

@ -193,3 +193,10 @@ DPDK_17.05 {
vfio_get_group_no;
} DPDK_17.02;
DPDK_17.08 {
global:
rte_bus_find;
} DPDK_17.05;

View File

@ -145,3 +145,22 @@ rte_bus_dump(FILE *f)
}
}
}
struct rte_bus *
rte_bus_find(const struct rte_bus *start, rte_bus_cmp_t cmp,
const void *data)
{
struct rte_bus *bus = NULL;
bool start_found = !start;
TAILQ_FOREACH(bus, &rte_bus_list, next) {
if (!start_found) {
if (bus == start)
start_found = 1;
continue;
}
if (cmp(bus, data) == 0)
break;
}
return bus;
}

View File

@ -140,6 +140,48 @@ int rte_bus_probe(void);
*/
void rte_bus_dump(FILE *f);
/**
* Bus comparison function.
*
* @param bus
* Bus under test.
*
* @param data
* Data to compare against.
*
* @return
* 0 if the bus matches the data.
* !0 if the bus does not match.
* <0 if ordering is possible and the bus is lower than the data.
* >0 if ordering is possible and the bus is greater than the data.
*/
typedef int (*rte_bus_cmp_t)(const struct rte_bus *bus, const void *data);
/**
* Bus iterator to find a particular bus.
*
* This function compares each registered bus to find one that matches
* the data passed as parameter.
*
* If the comparison function returns zero this function will stop iterating
* over any more buses. To continue a search the bus of a previous search can
* be passed via the start parameter.
*
* @param start
* Starting point for the iteration.
*
* @param cmp
* Comparison function.
*
* @param data
* Data to pass to comparison function.
*
* @return
* A pointer to a rte_bus structure or NULL in case no bus matches
*/
struct rte_bus *rte_bus_find(const struct rte_bus *start, rte_bus_cmp_t cmp,
const void *data);
/**
* Helper for Bus registration.
* The constructor has higher priority than PMD constructors.

View File

@ -198,3 +198,10 @@ DPDK_17.05 {
vfio_get_group_no;
} DPDK_17.02;
DPDK_17.08 {
global:
rte_bus_find;
} DPDK_17.05;