numam-dpdk/lib/librte_ethdev/ethdev_private.c
Gaetan Rivet 600ce80536 ethdev: add private generic device iterator
This iterator can be customized with a comparison function that will
trigger a stopping condition.

It can be leveraged to write several different iterators that have
similar but non-identical purposes.

It is private to librte_ethdev.

Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
2018-10-03 14:22:41 +02:00

32 lines
662 B
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2018 Gaëtan Rivet
*/
#include "rte_ethdev.h"
#include "ethdev_private.h"
struct rte_eth_dev *
eth_find_device(const struct rte_eth_dev *start, rte_eth_cmp_t cmp,
const void *data)
{
struct rte_eth_dev *edev;
ptrdiff_t idx;
/* Avoid Undefined Behaviour */
if (start != NULL &&
(start < &rte_eth_devices[0] ||
start > &rte_eth_devices[RTE_MAX_ETHPORTS]))
return NULL;
if (start != NULL)
idx = start - &rte_eth_devices[0] + 1;
else
idx = 0;
for (; idx < RTE_MAX_ETHPORTS; idx++) {
edev = &rte_eth_devices[idx];
if (cmp(edev, data) == 0)
return edev;
}
return NULL;
}