1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2017 6WIND S.A.
3 * Copyright 2017 Mellanox Technologies, Ltd.
8 #include <rte_bus_vdev.h>
9 #include <rte_common.h>
10 #include <rte_config.h>
11 #include <rte_kvargs.h>
14 #define VDEV_NETVSC_DRIVER net_vdev_netvsc
15 #define VDEV_NETVSC_ARG_IFACE "iface"
16 #define VDEV_NETVSC_ARG_MAC "mac"
18 #define DRV_LOG(level, ...) \
19 rte_log(RTE_LOG_ ## level, \
20 vdev_netvsc_logtype, \
21 RTE_FMT(RTE_STR(VDEV_NETVSC_DRIVER) ": " \
22 RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
23 RTE_FMT_TAIL(__VA_ARGS__,)))
25 /** Driver-specific log messages type. */
26 static int vdev_netvsc_logtype;
28 /** Number of driver instances relying on context list. */
29 static unsigned int vdev_netvsc_ctx_inst;
32 * Probe NetVSC interfaces.
35 * Virtual device context for driver instance.
38 * Always 0, even in case of errors.
41 vdev_netvsc_vdev_probe(struct rte_vdev_device *dev)
43 static const char *const vdev_netvsc_arg[] = {
44 VDEV_NETVSC_ARG_IFACE,
48 const char *name = rte_vdev_device_name(dev);
49 const char *args = rte_vdev_device_args(dev);
50 struct rte_kvargs *kvargs = rte_kvargs_parse(args ? args : "",
53 DRV_LOG(DEBUG, "invoked as \"%s\", using arguments \"%s\"", name, args);
55 DRV_LOG(ERR, "cannot parse arguments list");
60 rte_kvargs_free(kvargs);
61 ++vdev_netvsc_ctx_inst;
66 * Remove driver instance.
69 * Virtual device context for driver instance.
75 vdev_netvsc_vdev_remove(__rte_unused struct rte_vdev_device *dev)
77 --vdev_netvsc_ctx_inst;
81 /** Virtual device descriptor. */
82 static struct rte_vdev_driver vdev_netvsc_vdev = {
83 .probe = vdev_netvsc_vdev_probe,
84 .remove = vdev_netvsc_vdev_remove,
87 RTE_PMD_REGISTER_VDEV(VDEV_NETVSC_DRIVER, vdev_netvsc_vdev);
88 RTE_PMD_REGISTER_ALIAS(VDEV_NETVSC_DRIVER, eth_vdev_netvsc);
89 RTE_PMD_REGISTER_PARAM_STRING(net_vdev_netvsc,
90 VDEV_NETVSC_ARG_IFACE "=<string> "
91 VDEV_NETVSC_ARG_MAC "=<string>");
93 /** Initialize driver log type. */
94 RTE_INIT(vdev_netvsc_init_log)
96 vdev_netvsc_logtype = rte_log_register("pmd.vdev_netvsc");
97 if (vdev_netvsc_logtype >= 0)
98 rte_log_set_level(vdev_netvsc_logtype, RTE_LOG_NOTICE);