bus/pci: implement device iteration
[dpdk.git] / drivers / bus / pci / pci_params.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2018 GaĆ«tan Rivet
3  */
4
5 #include <rte_bus.h>
6 #include <rte_dev.h>
7 #include <rte_errno.h>
8 #include <rte_kvargs.h>
9 #include <rte_pci.h>
10
11 #include "private.h"
12
13 enum pci_params {
14         RTE_PCI_PARAMS_MAX,
15 };
16
17 static const char * const pci_params_keys[] = {
18         [RTE_PCI_PARAMS_MAX] = NULL,
19 };
20
21 static int
22 pci_dev_match(const struct rte_device *dev,
23               const void *_kvlist)
24 {
25         const struct rte_kvargs *kvlist = _kvlist;
26
27         (void) dev;
28         (void) kvlist;
29         return 0;
30 }
31
32 void *
33 rte_pci_dev_iterate(const void *start,
34                     const char *str,
35                     const struct rte_dev_iterator *it __rte_unused)
36 {
37         rte_bus_find_device_t find_device;
38         struct rte_kvargs *kvargs = NULL;
39         struct rte_device *dev;
40
41         if (str != NULL) {
42                 kvargs = rte_kvargs_parse(str, pci_params_keys);
43                 if (kvargs == NULL) {
44                         RTE_LOG(ERR, EAL, "cannot parse argument list\n");
45                         rte_errno = EINVAL;
46                         return NULL;
47                 }
48         }
49         find_device = rte_pci_bus.bus.find_device;
50         dev = find_device(start, pci_dev_match, kvargs);
51         rte_kvargs_free(kvargs);
52         return dev;
53 }