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:
parent
fea892e35f
commit
87bfa873af
@ -193,3 +193,10 @@ DPDK_17.05 {
|
||||
vfio_get_group_no;
|
||||
|
||||
} DPDK_17.02;
|
||||
|
||||
DPDK_17.08 {
|
||||
global:
|
||||
|
||||
rte_bus_find;
|
||||
|
||||
} DPDK_17.05;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -198,3 +198,10 @@ DPDK_17.05 {
|
||||
vfio_get_group_no;
|
||||
|
||||
} DPDK_17.02;
|
||||
|
||||
DPDK_17.08 {
|
||||
global:
|
||||
|
||||
rte_bus_find;
|
||||
|
||||
} DPDK_17.05;
|
||||
|
Loading…
x
Reference in New Issue
Block a user