768c8b2ed5eaa30c11877a12b7ecd9ed0fdbd532
[dpdk.git] / lib / librte_ethdev / ethdev_private.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 GaĆ«tan Rivet
3  */
4
5 #include "rte_ethdev.h"
6 #include "ethdev_private.h"
7
8 struct rte_eth_dev *
9 eth_find_device(const struct rte_eth_dev *start, rte_eth_cmp_t cmp,
10                 const void *data)
11 {
12         struct rte_eth_dev *edev;
13         ptrdiff_t idx;
14
15         /* Avoid Undefined Behaviour */
16         if (start != NULL &&
17             (start < &rte_eth_devices[0] ||
18              start > &rte_eth_devices[RTE_MAX_ETHPORTS]))
19                 return NULL;
20         if (start != NULL)
21                 idx = start - &rte_eth_devices[0] + 1;
22         else
23                 idx = 0;
24         for (; idx < RTE_MAX_ETHPORTS; idx++) {
25                 edev = &rte_eth_devices[idx];
26                 if (cmp(edev, data) == 0)
27                         return edev;
28         }
29         return NULL;
30 }
31