bus/vdev: implement device iteration

Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
This commit is contained in:
Gaetan Rivet 2018-09-19 18:03:33 +02:00 committed by Thomas Monjalon
parent 4410c1b0c0
commit ac91bc493c
5 changed files with 89 additions and 6 deletions

View File

@ -19,8 +19,9 @@ EXPORT_MAP := rte_bus_vdev_version.map
LIBABIVER := 1
SRCS-y += vdev.c
SRCS-y += vdev_params.c
LDLIBS += -lrte_eal
LDLIBS += -lrte_eal -lrte_kvargs
#
# Export include files

View File

@ -1,7 +1,10 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation
sources = files('vdev.c')
sources = files('vdev.c',
'vdev_params.c')
install_headers('rte_bus_vdev.h')
allow_experimental_apis = true
deps += ['kvargs']

View File

@ -23,6 +23,7 @@
#include "rte_bus_vdev.h"
#include "vdev_logs.h"
#include "vdev_private.h"
#define VDEV_MP_KEY "bus_vdev_mp"
@ -497,9 +498,9 @@ vdev_probe(void)
return ret;
}
static struct rte_device *
vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
const void *data)
struct rte_device *
rte_vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
const void *data)
{
const struct rte_vdev_device *vstart;
struct rte_vdev_device *dev;
@ -536,10 +537,11 @@ vdev_unplug(struct rte_device *dev)
static struct rte_bus rte_vdev_bus = {
.scan = vdev_scan,
.probe = vdev_probe,
.find_device = vdev_find_device,
.find_device = rte_vdev_find_device,
.plug = vdev_plug,
.unplug = vdev_unplug,
.parse = vdev_parse,
.dev_iterate = rte_vdev_dev_iterate,
};
RTE_REGISTER_BUS(vdev, rte_vdev_bus);

View File

@ -0,0 +1,51 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2018 Gaëtan Rivet
*/
#include <rte_dev.h>
#include <rte_bus.h>
#include <rte_kvargs.h>
#include <rte_errno.h>
#include "vdev_logs.h"
#include "vdev_private.h"
enum vdev_params {
RTE_VDEV_PARAMS_MAX,
};
static const char * const vdev_params_keys[] = {
[RTE_VDEV_PARAMS_MAX] = NULL,
};
static int
vdev_dev_match(const struct rte_device *dev,
const void *_kvlist)
{
const struct rte_kvargs *kvlist = _kvlist;
(void) kvlist;
(void) dev;
return 0;
}
void *
rte_vdev_dev_iterate(const void *start,
const char *str,
const struct rte_dev_iterator *it __rte_unused)
{
struct rte_kvargs *kvargs = NULL;
struct rte_device *dev;
if (str != NULL) {
kvargs = rte_kvargs_parse(str, vdev_params_keys);
if (kvargs == NULL) {
VDEV_LOG(ERR, "cannot parse argument list\n");
rte_errno = EINVAL;
return NULL;
}
}
dev = rte_vdev_find_device(start, vdev_dev_match, kvargs);
rte_kvargs_free(kvargs);
return dev;
}

View File

@ -0,0 +1,26 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2018 Gaëtan Rivet
*/
#ifndef _VDEV_PRIVATE_H_
#define _VDEV_PRIVATE_H_
#ifdef __cplusplus
extern "C" {
#endif
struct rte_device *
rte_vdev_find_device(const struct rte_device *start,
rte_dev_cmp_t cmp,
const void *data);
void *
rte_vdev_dev_iterate(const void *start,
const char *str,
const struct rte_dev_iterator *it);
#ifdef __cplusplus
}
#endif
#endif /* _VDEV_PRIVATE_H_ */