600ce80536
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>
32 lines
662 B
C
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;
|
|
}
|
|
|