1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2018 Gaƫtan Rivet
8 #include <rte_compat.h>
10 #include <rte_kvargs.h>
13 #include "rte_ethdev.h"
14 #include "rte_ethdev_core.h"
15 #include "ethdev_private.h"
21 static const char * const eth_params_keys[] = {
22 [RTE_ETH_PARAM_MAX] = NULL,
25 struct eth_dev_match_arg {
26 struct rte_device *device;
27 struct rte_kvargs *kvlist;
30 #define eth_dev_match_arg(d, k) \
31 (&(const struct eth_dev_match_arg) { \
37 eth_dev_match(const struct rte_eth_dev *edev,
40 const struct eth_dev_match_arg *arg = _arg;
41 const struct rte_kvargs *kvlist = arg->kvlist;
43 if (edev->state == RTE_ETH_DEV_UNUSED)
45 if (edev->device != arg->device)
48 /* Empty string matches everything. */
54 eth_dev_iterate(const void *start,
56 const struct rte_dev_iterator *it)
58 struct rte_kvargs *kvargs = NULL;
59 struct rte_eth_dev *edev = NULL;
60 const char * const *valid_keys = NULL;
63 if (str[0] == '+') /* no validation of keys */
66 valid_keys = eth_params_keys;
67 kvargs = rte_kvargs_parse(str, valid_keys);
69 RTE_LOG(ERR, EAL, "cannot parse argument list\n");
74 edev = eth_find_device(start, eth_dev_match,
75 eth_dev_match_arg(it->device, kvargs));
76 rte_kvargs_free(kvargs);
80 struct rte_class rte_class_eth = {
81 .dev_iterate = eth_dev_iterate,
84 RTE_REGISTER_CLASS(eth, rte_class_eth);