1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2018 Gaëtan Rivet 3 */ 4 5 #include <errno.h> 6 #include <string.h> 7 8 #include <dev_driver.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 const char *name; 32 33 /* no kvlist arg, all devices match */ 34 if (kvlist == NULL) 35 return 0; 36 37 /* if key is present in kvlist and does not match, filter device */ 38 name = rte_kvargs_get(kvlist, key); 39 if (name != NULL && strcmp(name, dev->name)) 40 return -1; 41 42 return 0; 43 } 44 45 void * 46 rte_vdev_dev_iterate(const void *start, 47 const char *str, 48 const struct rte_dev_iterator *it __rte_unused) 49 { 50 struct rte_kvargs *kvargs = NULL; 51 struct rte_device *dev; 52 53 if (str != NULL) { 54 kvargs = rte_kvargs_parse(str, vdev_params_keys); 55 if (kvargs == NULL) { 56 VDEV_LOG(ERR, "cannot parse argument list"); 57 rte_errno = EINVAL; 58 return NULL; 59 } 60 } 61 dev = rte_vdev_find_device(start, vdev_dev_match, kvargs); 62 rte_kvargs_free(kvargs); 63 return dev; 64 } 65