1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2018 Gaëtan Rivet 3 */ 4 5 #include <string.h> 6 7 #include <rte_dev.h> 8 #include <rte_bus.h> 9 #include <rte_kvargs.h> 10 #include <rte_errno.h> 11 12 #include "vdev_logs.h" 13 #include "vdev_private.h" 14 15 enum vdev_params { 16 RTE_VDEV_PARAM_NAME, 17 RTE_VDEV_PARAM_MAX, 18 }; 19 20 static const char * const vdev_params_keys[] = { 21 [RTE_VDEV_PARAM_NAME] = "name", 22 [RTE_VDEV_PARAM_MAX] = NULL, 23 }; 24 25 static int 26 vdev_dev_match(const struct rte_device *dev, 27 const void *_kvlist) 28 { 29 const struct rte_kvargs *kvlist = _kvlist; 30 const char *key = vdev_params_keys[RTE_VDEV_PARAM_NAME]; 31 32 if (rte_kvargs_get_with_value(kvlist, key, dev->name) == NULL) 33 return -1; 34 35 return 0; 36 } 37 38 void * 39 rte_vdev_dev_iterate(const void *start, 40 const char *str, 41 const struct rte_dev_iterator *it __rte_unused) 42 { 43 struct rte_kvargs *kvargs = NULL; 44 struct rte_device *dev; 45 46 if (str != NULL) { 47 kvargs = rte_kvargs_parse(str, vdev_params_keys); 48 if (kvargs == NULL) { 49 VDEV_LOG(ERR, "cannot parse argument list\n"); 50 rte_errno = EINVAL; 51 return NULL; 52 } 53 } 54 dev = rte_vdev_find_device(start, vdev_dev_match, kvargs); 55 rte_kvargs_free(kvargs); 56 return dev; 57 } 58