vdev: use generic vdev struct for probe and remove
authorJan Blunck <jblunck@infradead.org>
Tue, 11 Apr 2017 15:44:13 +0000 (17:44 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 14 Apr 2017 13:41:50 +0000 (15:41 +0200)
This is a preparation to embed the generic rte_device into the rte_eth_dev
also for virtual devices.

Signed-off-by: Jan Blunck <jblunck@infradead.org>
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
24 files changed:
drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
drivers/crypto/armv8/rte_armv8_pmd.c
drivers/crypto/kasumi/rte_kasumi_pmd.c
drivers/crypto/null/null_crypto_pmd.c
drivers/crypto/openssl/rte_openssl_pmd.c
drivers/crypto/scheduler/scheduler_pmd.c
drivers/crypto/snow3g/rte_snow3g_pmd.c
drivers/crypto/zuc/rte_zuc_pmd.c
drivers/event/octeontx/ssovf_evdev.c
drivers/event/skeleton/skeleton_eventdev.c
drivers/event/sw/sw_evdev.c
drivers/net/af_packet/rte_eth_af_packet.c
drivers/net/bonding/rte_eth_bond_pmd.c
drivers/net/kni/rte_eth_kni.c
drivers/net/null/rte_eth_null.c
drivers/net/pcap/rte_eth_pcap.c
drivers/net/ring/rte_eth_ring.c
drivers/net/tap/rte_eth_tap.c
drivers/net/vhost/rte_eth_vhost.c
drivers/net/virtio/virtio_user_ethdev.c
drivers/net/xenvirt/rte_eth_xenvirt.c
lib/librte_eal/common/eal_common_vdev.c
lib/librte_eal/common/include/rte_vdev.h

index ceec765..1705896 100644 (file)
@@ -429,10 +429,11 @@ aesni_gcm_pmd_enqueue_burst(void *queue_pair,
        return nb_enqueued;
 }
 
-static int aesni_gcm_remove(const char *name);
+static int aesni_gcm_remove(struct rte_vdev_device *vdev);
 
 static int
-aesni_gcm_create(struct rte_crypto_vdev_init_params *init_params)
+aesni_gcm_create(struct rte_vdev_device *vdev,
+                struct rte_crypto_vdev_init_params *init_params)
 {
        struct rte_cryptodev *dev;
        struct aesni_gcm_private *internals;
@@ -483,12 +484,12 @@ aesni_gcm_create(struct rte_crypto_vdev_init_params *init_params)
 init_error:
        GCM_LOG_ERR("driver %s: create failed", init_params->name);
 
-       aesni_gcm_remove(init_params->name);
+       aesni_gcm_remove(vdev);
        return -EFAULT;
 }
 
 static int
-aesni_gcm_probe(const char *name, const char *input_args)
+aesni_gcm_probe(struct rte_vdev_device *vdev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -496,7 +497,11 @@ aesni_gcm_probe(const char *name, const char *input_args)
                rte_socket_id(),
                {0}
        };
+       const char *name;
+       const char *input_args;
 
+       name = rte_vdev_device_name(vdev);
+       input_args = rte_vdev_device_args(vdev);
        rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
        RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
@@ -509,12 +514,15 @@ aesni_gcm_probe(const char *name, const char *input_args)
        RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
                        init_params.max_nb_sessions);
 
-       return aesni_gcm_create(&init_params);
+       return aesni_gcm_create(vdev, &init_params);
 }
 
 static int
-aesni_gcm_remove(const char *name)
+aesni_gcm_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index be15d22..37b22ec 100644 (file)
@@ -669,10 +669,11 @@ aesni_mb_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
        return processed_jobs;
 }
 
-static int cryptodev_aesni_mb_remove(const char *name);
+static int cryptodev_aesni_mb_remove(struct rte_vdev_device *vdev);
 
 static int
-cryptodev_aesni_mb_create(struct rte_crypto_vdev_init_params *init_params)
+cryptodev_aesni_mb_create(struct rte_vdev_device *vdev,
+                         struct rte_crypto_vdev_init_params *init_params)
 {
        struct rte_cryptodev *dev;
        struct aesni_mb_private *internals;
@@ -750,13 +751,12 @@ init_error:
        MB_LOG_ERR("driver %s: cryptodev_aesni_create failed",
                        init_params->name);
 
-       cryptodev_aesni_mb_remove(init_params->name);
+       cryptodev_aesni_mb_remove(vdev);
        return -EFAULT;
 }
 
 static int
-cryptodev_aesni_mb_probe(const char *name,
-               const char *input_args)
+cryptodev_aesni_mb_probe(struct rte_vdev_device *vdev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -764,7 +764,11 @@ cryptodev_aesni_mb_probe(const char *name,
                rte_socket_id(),
                ""
        };
+       const char *name;
+       const char *input_args;
 
+       name = rte_vdev_device_name(vdev);
+       input_args = rte_vdev_device_args(vdev);
        rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
        RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
@@ -777,12 +781,15 @@ cryptodev_aesni_mb_probe(const char *name,
        RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
                        init_params.max_nb_sessions);
 
-       return cryptodev_aesni_mb_create(&init_params);
+       return cryptodev_aesni_mb_create(vdev, &init_params);
 }
 
 static int
-cryptodev_aesni_mb_remove(const char *name)
+cryptodev_aesni_mb_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index 6376e9e..bf56bc6 100644 (file)
@@ -44,7 +44,7 @@
 
 #include "rte_armv8_pmd_private.h"
 
-static int cryptodev_armv8_crypto_uninit(const char *name);
+static int cryptodev_armv8_crypto_uninit(struct rte_vdev_device *vdev);
 
 /**
  * Pointers to the supported combined mode crypto functions are stored
@@ -773,7 +773,8 @@ armv8_crypto_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 
 /** Create ARMv8 crypto device */
 static int
-cryptodev_armv8_crypto_create(struct rte_crypto_vdev_init_params *init_params)
+cryptodev_armv8_crypto_create(struct rte_vdev_device *vdev,
+                             struct rte_crypto_vdev_init_params *init_params)
 {
        struct rte_cryptodev *dev;
        struct armv8_crypto_private *internals;
@@ -845,14 +846,13 @@ init_error:
                "driver %s: cryptodev_armv8_crypto_create failed",
                init_params->name);
 
-       cryptodev_armv8_crypto_uninit(init_params->name);
+       cryptodev_armv8_crypto_uninit(vdev);
        return -EFAULT;
 }
 
 /** Initialise ARMv8 crypto device */
 static int
-cryptodev_armv8_crypto_init(const char *name,
-               const char *input_args)
+cryptodev_armv8_crypto_init(struct rte_vdev_device *vdev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -860,7 +860,11 @@ cryptodev_armv8_crypto_init(const char *name,
                rte_socket_id(),
                {0}
        };
+       const char *name;
+       const char *input_args;
 
+       name = rte_vdev_device_name(vdev);
+       input_args = rte_vdev_device_args(vdev);
        rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
        RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
@@ -874,13 +878,16 @@ cryptodev_armv8_crypto_init(const char *name,
        RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
                        init_params.max_nb_sessions);
 
-       return cryptodev_armv8_crypto_create(&init_params);
+       return cryptodev_armv8_crypto_create(vdev, &init_params);
 }
 
 /** Uninitialise ARMv8 crypto device */
 static int
-cryptodev_armv8_crypto_uninit(const char *name)
+cryptodev_armv8_crypto_uninit(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index 55bdb29..42fdd33 100644 (file)
@@ -548,10 +548,11 @@ kasumi_pmd_dequeue_burst(void *queue_pair,
        return nb_dequeued;
 }
 
-static int cryptodev_kasumi_remove(const char *name);
+static int cryptodev_kasumi_remove(struct rte_vdev_device *vdev);
 
 static int
-cryptodev_kasumi_create(struct rte_crypto_vdev_init_params *init_params)
+cryptodev_kasumi_create(struct rte_vdev_device *vdev,
+                       struct rte_crypto_vdev_init_params *init_params)
 {
        struct rte_cryptodev *dev;
        struct kasumi_private *internals;
@@ -606,13 +607,12 @@ init_error:
        KASUMI_LOG_ERR("driver %s: cryptodev_kasumi_create failed",
                        init_params->name);
 
-       cryptodev_kasumi_remove(init_params->name);
+       cryptodev_kasumi_remove(vdev);
        return -EFAULT;
 }
 
 static int
-cryptodev_kasumi_probe(const char *name,
-               const char *input_args)
+cryptodev_kasumi_probe(struct rte_vdev_device *vdev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -620,6 +620,11 @@ cryptodev_kasumi_probe(const char *name,
                rte_socket_id(),
                {0}
        };
+       const char *name;
+       const char *input_args;
+
+       name = rte_vdev_device_name(vdev);
+       input_args = rte_vdev_device_args(vdev);
 
        rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
@@ -633,12 +638,15 @@ cryptodev_kasumi_probe(const char *name,
        RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
                        init_params.max_nb_sessions);
 
-       return cryptodev_kasumi_create(&init_params);
+       return cryptodev_kasumi_create(vdev, &init_params);
 }
 
 static int
-cryptodev_kasumi_remove(const char *name)
+cryptodev_kasumi_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index f68ec8d..a44c61a 100644 (file)
@@ -218,8 +218,7 @@ init_error:
 
 /** Initialise null crypto device */
 static int
-cryptodev_null_probe(const char *name,
-               const char *input_args)
+cryptodev_null_probe(struct rte_vdev_device *dev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -228,10 +227,11 @@ cryptodev_null_probe(const char *name,
                {0}
        };
 
-       rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
+       rte_cryptodev_parse_vdev_init_params(&init_params,
+               rte_vdev_device_args(dev));
 
-       RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
-                       init_params.socket_id);
+       RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n",
+               rte_vdev_device_name(dev), init_params.socket_id);
        if (init_params.name[0] != '\0')
                RTE_LOG(INFO, PMD, "  User defined name = %s\n",
                        init_params.name);
@@ -256,9 +256,15 @@ cryptodev_null_remove(const char *name)
        return 0;
 }
 
+static int
+cryptodev_null_remove_dev(struct rte_vdev_device *dev)
+{
+       return cryptodev_null_remove(rte_vdev_device_name(dev));
+}
+
 static struct rte_vdev_driver cryptodev_null_pmd_drv = {
        .probe = cryptodev_null_probe,
-       .remove = cryptodev_null_remove
+       .remove = cryptodev_null_remove_dev,
 };
 
 RTE_PMD_REGISTER_VDEV(CRYPTODEV_NAME_NULL_PMD, cryptodev_null_pmd_drv);
index 5046eac..f3c8f83 100644 (file)
@@ -44,7 +44,7 @@
 
 #define DES_BLOCK_SIZE 8
 
-static int cryptodev_openssl_remove(const char *name);
+static int cryptodev_openssl_remove(struct rte_vdev_device *vdev);
 
 /*----------------------------------------------------------------------------*/
 
@@ -1264,7 +1264,8 @@ openssl_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 
 /** Create OPENSSL crypto device */
 static int
-cryptodev_openssl_create(struct rte_crypto_vdev_init_params *init_params)
+cryptodev_openssl_create(struct rte_vdev_device *vdev,
+                        struct rte_crypto_vdev_init_params *init_params)
 {
        struct rte_cryptodev *dev;
        struct openssl_private *internals;
@@ -1312,14 +1313,13 @@ init_error:
        OPENSSL_LOG_ERR("driver %s: cryptodev_openssl_create failed",
                        init_params->name);
 
-       cryptodev_openssl_remove(init_params->name);
+       cryptodev_openssl_remove(vdev);
        return -EFAULT;
 }
 
 /** Initialise OPENSSL crypto device */
 static int
-cryptodev_openssl_probe(const char *name,
-               const char *input_args)
+cryptodev_openssl_probe(struct rte_vdev_device *vdev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -1327,6 +1327,11 @@ cryptodev_openssl_probe(const char *name,
                rte_socket_id(),
                {0}
        };
+       const char *name;
+       const char *input_args;
+
+       name = rte_vdev_device_name(vdev);
+       input_args = rte_vdev_device_args(vdev);
 
        rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
@@ -1340,13 +1345,16 @@ cryptodev_openssl_probe(const char *name,
        RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
                        init_params.max_nb_sessions);
 
-       return cryptodev_openssl_create(&init_params);
+       return cryptodev_openssl_create(vdev, &init_params);
 }
 
 /** Uninitialise OPENSSL crypto device */
 static int
-cryptodev_openssl_remove(const char *name)
+cryptodev_openssl_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index b189fbd..7d9e376 100644 (file)
@@ -193,14 +193,16 @@ cryptodev_scheduler_create(const char *name,
 }
 
 static int
-cryptodev_scheduler_remove(const char *name)
+cryptodev_scheduler_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
        struct rte_cryptodev *dev;
        struct scheduler_ctx *sched_ctx;
 
-       if (name == NULL)
+       if (vdev == NULL)
                return -EINVAL;
 
+       name = rte_vdev_device_name(vdev);
        dev = rte_cryptodev_pmd_get_named_dev(name);
        if (dev == NULL)
                return -EINVAL;
@@ -413,7 +415,7 @@ free_kvlist:
 }
 
 static int
-cryptodev_scheduler_probe(const char *name, const char *input_args)
+cryptodev_scheduler_probe(struct rte_vdev_device *vdev)
 {
        struct scheduler_init_params init_params = {
                .def_p = {
@@ -428,9 +430,11 @@ cryptodev_scheduler_probe(const char *name, const char *input_args)
                .enable_ordering = 0
        };
 
-       scheduler_parse_init_params(&init_params, input_args);
+       scheduler_parse_init_params(&init_params,
+                                   rte_vdev_device_args(vdev));
 
-       RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n", name,
+       RTE_LOG(INFO, PMD, "Initialising %s on NUMA node %d\n",
+                       rte_vdev_device_name(vdev),
                        init_params.def_p.socket_id);
        RTE_LOG(INFO, PMD, "  Max number of queue pairs = %d\n",
                        init_params.def_p.max_nb_queue_pairs);
@@ -440,7 +444,8 @@ cryptodev_scheduler_probe(const char *name, const char *input_args)
                RTE_LOG(INFO, PMD, "  User defined name = %s\n",
                        init_params.def_p.name);
 
-       return cryptodev_scheduler_create(name, &init_params);
+       return cryptodev_scheduler_create(rte_vdev_device_name(vdev),
+                                         &init_params);
 }
 
 static struct rte_vdev_driver cryptodev_scheduler_pmd_drv = {
index 1042b31..a31eaa8 100644 (file)
@@ -539,10 +539,11 @@ snow3g_pmd_dequeue_burst(void *queue_pair,
        return nb_dequeued;
 }
 
-static int cryptodev_snow3g_remove(const char *name);
+static int cryptodev_snow3g_remove(struct rte_vdev_device *vdev);
 
 static int
-cryptodev_snow3g_create(struct rte_crypto_vdev_init_params *init_params)
+cryptodev_snow3g_create(struct rte_vdev_device *vdev,
+                       struct rte_crypto_vdev_init_params *init_params)
 {
        struct rte_cryptodev *dev;
        struct snow3g_private *internals;
@@ -595,13 +596,12 @@ init_error:
        SNOW3G_LOG_ERR("driver %s: cryptodev_snow3g_create failed",
                        init_params->name);
 
-       cryptodev_snow3g_remove(init_params->name);
+       cryptodev_snow3g_remove(vdev);
        return -EFAULT;
 }
 
 static int
-cryptodev_snow3g_probe(const char *name,
-               const char *input_args)
+cryptodev_snow3g_probe(struct rte_vdev_device *vdev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -609,6 +609,11 @@ cryptodev_snow3g_probe(const char *name,
                rte_socket_id(),
                {0}
        };
+       const char *name;
+       const char *input_args;
+
+       name = rte_vdev_device_name(vdev);
+       input_args = rte_vdev_device_args(vdev);
 
        rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
@@ -622,12 +627,15 @@ cryptodev_snow3g_probe(const char *name,
        RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
                        init_params.max_nb_sessions);
 
-       return cryptodev_snow3g_create(&init_params);
+       return cryptodev_snow3g_create(vdev, &init_params);
 }
 
 static int
-cryptodev_snow3g_remove(const char *name)
+cryptodev_snow3g_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index 06ff503..5eec933 100644 (file)
@@ -439,10 +439,11 @@ zuc_pmd_dequeue_burst(void *queue_pair,
        return nb_dequeued;
 }
 
-static int cryptodev_zuc_remove(const char *name);
+static int cryptodev_zuc_remove(struct rte_vdev_device *vdev);
 
 static int
-cryptodev_zuc_create(struct rte_crypto_vdev_init_params *init_params)
+cryptodev_zuc_create(struct rte_vdev_device *vdev,
+                    struct rte_crypto_vdev_init_params *init_params)
 {
        struct rte_cryptodev *dev;
        struct zuc_private *internals;
@@ -495,13 +496,12 @@ init_error:
        ZUC_LOG_ERR("driver %s: cryptodev_zuc_create failed",
                        init_params->name);
 
-       cryptodev_zuc_remove(init_params->name);
+       cryptodev_zuc_remove(vdev);
        return -EFAULT;
 }
 
 static int
-cryptodev_zuc_probe(const char *name,
-               const char *input_args)
+cryptodev_zuc_probe(struct rte_vdev_device *vdev)
 {
        struct rte_crypto_vdev_init_params init_params = {
                RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS,
@@ -509,6 +509,11 @@ cryptodev_zuc_probe(const char *name,
                rte_socket_id(),
                {0}
        };
+       const char *name;
+       const char *input_args;
+
+       name = rte_vdev_device_name(vdev);
+       input_args = rte_vdev_device_args(vdev);
 
        rte_cryptodev_parse_vdev_init_params(&init_params, input_args);
 
@@ -522,12 +527,15 @@ cryptodev_zuc_probe(const char *name,
        RTE_LOG(INFO, PMD, "  Max number of sessions = %d\n",
                        init_params.max_nb_sessions);
 
-       return cryptodev_zuc_create(&init_params);
+       return cryptodev_zuc_create(vdev, &init_params);
 }
 
 static int
-cryptodev_zuc_remove(const char *name)
+cryptodev_zuc_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index 6479c80..c80a443 100644 (file)
@@ -488,17 +488,17 @@ static const struct rte_eventdev_ops ssovf_ops = {
 };
 
 static int
-ssovf_vdev_probe(const char *name, const char *params)
+ssovf_vdev_probe(struct rte_vdev_device *vdev)
 {
        struct octeontx_ssovf_info oinfo;
        struct ssovf_mbox_dev_info info;
        struct ssovf_evdev *edev;
        struct rte_eventdev *eventdev;
        static int ssovf_init_once;
+       const char *name;
        int ret;
 
-       RTE_SET_USED(params);
-
+       name = rte_vdev_device_name(vdev);
        /* More than one instance is not supported */
        if (ssovf_init_once) {
                ssovf_log_err("Request to create >1 %s instance", name);
@@ -563,8 +563,11 @@ error:
 }
 
 static int
-ssovf_vdev_remove(const char *name)
+ssovf_vdev_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        ssovf_log_info("Closing %s", name);
        return rte_event_pmd_vdev_uninit(name);
 }
index d2da7d8..800bd76 100644 (file)
@@ -468,16 +468,22 @@ fail:
 }
 
 static int
-skeleton_eventdev_probe(const char *name, __rte_unused const char *input_args)
+skeleton_eventdev_probe(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        RTE_LOG(INFO, PMD, "Initializing %s on NUMA node %d\n", name,
                        rte_socket_id());
        return skeleton_eventdev_create(name, rte_socket_id());
 }
 
 static int
-skeleton_eventdev_remove(const char *name)
+skeleton_eventdev_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        PMD_DRV_LOG(INFO, "Closing %s on NUMA node %d", name, rte_socket_id());
 
        return rte_event_pmd_vdev_uninit(name);
index 0caf8ba..a31aaa6 100644 (file)
@@ -696,7 +696,7 @@ set_credit_quanta(const char *key __rte_unused, const char *value, void *opaque)
 }
 
 static int
-sw_probe(const char *name, const char *params)
+sw_probe(struct rte_vdev_device *vdev)
 {
        static const struct rte_eventdev_ops evdev_sw_ops = {
                        .dev_configure = sw_dev_configure,
@@ -727,12 +727,16 @@ sw_probe(const char *name, const char *params)
                CREDIT_QUANTA_ARG,
                NULL
        };
+       const char *name;
+       const char *params;
        struct rte_eventdev *dev;
        struct sw_evdev *sw;
        int socket_id = rte_socket_id();
        int sched_quanta  = SW_DEFAULT_SCHED_QUANTA;
        int credit_quanta = SW_DEFAULT_CREDIT_QUANTA;
 
+       name = rte_vdev_device_name(vdev);
+       params = rte_vdev_device_args(vdev);
        if (params != NULL && params[0] != '\0') {
                struct rte_kvargs *kvlist = rte_kvargs_parse(params, args);
 
@@ -806,8 +810,11 @@ sw_probe(const char *name, const char *params)
 }
 
 static int
-sw_remove(const char *name)
+sw_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        if (name == NULL)
                return -EINVAL;
 
index 2f87553..77536e8 100644 (file)
@@ -923,8 +923,9 @@ rte_eth_from_packet(const char *name,
 }
 
 static int
-rte_pmd_af_packet_probe(const char *name, const char *params)
+rte_pmd_af_packet_probe(struct rte_vdev_device *dev)
 {
+       const char *name = rte_vdev_device_name(dev);
        unsigned numa_node;
        int ret = 0;
        struct rte_kvargs *kvlist;
@@ -934,7 +935,7 @@ rte_pmd_af_packet_probe(const char *name, const char *params)
 
        numa_node = rte_socket_id();
 
-       kvlist = rte_kvargs_parse(params, valid_arguments);
+       kvlist = rte_kvargs_parse(rte_vdev_device_args(dev), valid_arguments);
        if (kvlist == NULL) {
                ret = -1;
                goto exit;
@@ -961,7 +962,7 @@ exit:
 }
 
 static int
-rte_pmd_af_packet_remove(const char *name)
+rte_pmd_af_packet_remove(struct rte_vdev_device *dev)
 {
        struct rte_eth_dev *eth_dev = NULL;
        struct pmd_internals *internals;
@@ -970,11 +971,11 @@ rte_pmd_af_packet_remove(const char *name)
        RTE_LOG(INFO, PMD, "Closing AF_PACKET ethdev on numa socket %u\n",
                        rte_socket_id());
 
-       if (name == NULL)
+       if (dev == NULL)
                return -1;
 
        /* find the ethdev entry */
-       eth_dev = rte_eth_dev_allocated(name);
+       eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
        if (eth_dev == NULL)
                return -1;
 
index 77d3bee..340d793 100644 (file)
@@ -2240,16 +2240,19 @@ const struct eth_dev_ops default_dev_ops = {
 };
 
 static int
-bond_probe(const char *name, const char *params)
+bond_probe(struct rte_vdev_device *dev)
 {
+       const char *name;
        struct bond_dev_private *internals;
        struct rte_kvargs *kvlist;
        uint8_t bonding_mode, socket_id;
        int  arg_count, port_id;
 
+       name = rte_vdev_device_name(dev);
        RTE_LOG(INFO, EAL, "Initializing pmd_bond for %s\n", name);
 
-       kvlist = rte_kvargs_parse(params, pmd_bond_init_valid_arguments);
+       kvlist = rte_kvargs_parse(rte_vdev_device_args(dev),
+               pmd_bond_init_valid_arguments);
        if (kvlist == NULL)
                return -1;
 
@@ -2307,13 +2310,15 @@ parse_error:
 }
 
 static int
-bond_remove(const char *name)
+bond_remove(struct rte_vdev_device *dev)
 {
+       const char *name;
        int  ret;
 
-       if (name == NULL)
+       if (!dev)
                return -EINVAL;
 
+       name = rte_vdev_device_name(dev);
        RTE_LOG(INFO, EAL, "Uninitializing pmd_bond for %s\n", name);
 
        /* free link bonding eth device */
index 59205e7..e3ce572 100644 (file)
@@ -393,7 +393,7 @@ eth_kni_create(const char *name, struct eth_kni_args *args,
 
        eth_dev->data = data;
        eth_dev->dev_ops = &eth_kni_ops;
-       eth_dev->driver = NULL;
+       eth_dev->device->driver = NULL;
 
        data->dev_flags = RTE_ETH_DEV_DETACHABLE;
        data->kdrv = RTE_KDRV_NONE;
@@ -442,12 +442,16 @@ eth_kni_kvargs_process(struct eth_kni_args *args, const char *params)
 }
 
 static int
-eth_kni_probe(const char *name, const char *params)
+eth_kni_probe(struct rte_vdev_device *vdev)
 {
        struct rte_eth_dev *eth_dev;
        struct eth_kni_args args;
+       const char *name;
+       const char *params;
        int ret;
 
+       name = rte_vdev_device_name(vdev);
+       params = rte_vdev_device_args(vdev);
        RTE_LOG(INFO, PMD, "Initializing eth_kni for %s\n", name);
 
        ret = eth_kni_kvargs_process(&args, params);
@@ -475,11 +479,13 @@ kni_uninit:
 }
 
 static int
-eth_kni_remove(const char *name)
+eth_kni_remove(struct rte_vdev_device *vdev)
 {
        struct rte_eth_dev *eth_dev;
        struct pmd_internals *internals;
+       const char *name;
 
+       name = rte_vdev_device_name(vdev);
        RTE_LOG(INFO, PMD, "Un-Initializing eth_kni for %s\n", name);
 
        /* find the ethdev entry */
index 7e14da0..a7b57bc 100644 (file)
@@ -606,17 +606,20 @@ get_packet_copy_arg(const char *key __rte_unused,
 }
 
 static int
-rte_pmd_null_probe(const char *name, const char *params)
+rte_pmd_null_probe(struct rte_vdev_device *dev)
 {
+       const char *name, *params;
        unsigned numa_node;
        unsigned packet_size = default_packet_size;
        unsigned packet_copy = default_packet_copy;
        struct rte_kvargs *kvlist = NULL;
        int ret;
 
-       if (name == NULL)
+       if (!dev)
                return -EINVAL;
 
+       name = rte_vdev_device_name(dev);
+       params = rte_vdev_device_args(dev);
        RTE_LOG(INFO, PMD, "Initializing pmd_null for %s\n", name);
 
        numa_node = rte_socket_id();
@@ -658,18 +661,18 @@ free_kvlist:
 }
 
 static int
-rte_pmd_null_remove(const char *name)
+rte_pmd_null_remove(struct rte_vdev_device *dev)
 {
        struct rte_eth_dev *eth_dev = NULL;
 
-       if (name == NULL)
+       if (!dev)
                return -EINVAL;
 
        RTE_LOG(INFO, PMD, "Closing null ethdev on numa socket %u\n",
                        rte_socket_id());
 
        /* find the ethdev entry */
-       eth_dev = rte_eth_dev_allocated(name);
+       eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
        if (eth_dev == NULL)
                return -1;
 
index 075e3be..05cbd47 100644 (file)
@@ -936,8 +936,9 @@ eth_from_pcaps(const char *name, struct pmd_devargs *rx_queues,
 }
 
 static int
-pmd_pcap_probe(const char *name, const char *params)
+pmd_pcap_probe(struct rte_vdev_device *dev)
 {
+       const char *name;
        unsigned int is_rx_pcap = 0, is_tx_pcap = 0;
        struct rte_kvargs *kvlist;
        struct pmd_devargs pcaps = {0};
@@ -945,13 +946,14 @@ pmd_pcap_probe(const char *name, const char *params)
        int single_iface = 0;
        int ret;
 
+       name = rte_vdev_device_name(dev);
        RTE_LOG(INFO, PMD, "Initializing pmd_pcap for %s\n", name);
 
        gettimeofday(&start_time, NULL);
        start_cycles = rte_get_timer_cycles();
        hz = rte_get_timer_hz();
 
-       kvlist = rte_kvargs_parse(params, valid_arguments);
+       kvlist = rte_kvargs_parse(rte_vdev_device_args(dev), valid_arguments);
        if (kvlist == NULL)
                return -1;
 
@@ -1035,18 +1037,18 @@ free_kvlist:
 }
 
 static int
-pmd_pcap_remove(const char *name)
+pmd_pcap_remove(struct rte_vdev_device *dev)
 {
        struct rte_eth_dev *eth_dev = NULL;
 
        RTE_LOG(INFO, PMD, "Closing pcap ethdev on numa socket %u\n",
                        rte_socket_id());
 
-       if (name == NULL)
+       if (!dev)
                return -1;
 
        /* reserve an ethdev entry */
-       eth_dev = rte_eth_dev_allocated(name);
+       eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
        if (eth_dev == NULL)
                return -1;
 
index 77ef3a1..4bae895 100644 (file)
@@ -502,12 +502,16 @@ out:
 }
 
 static int
-rte_pmd_ring_probe(const char *name, const char *params)
+rte_pmd_ring_probe(struct rte_vdev_device *dev)
 {
+       const char *name, *params;
        struct rte_kvargs *kvlist = NULL;
        int ret = 0;
        struct node_action_list *info = NULL;
 
+       name = rte_vdev_device_name(dev);
+       params = rte_vdev_device_args(dev);
+
        RTE_LOG(INFO, PMD, "Initializing pmd_ring for %s\n", name);
 
        if (params == NULL || params[0] == '\0') {
@@ -577,8 +581,9 @@ out_free:
 }
 
 static int
-rte_pmd_ring_remove(const char *name)
+rte_pmd_ring_remove(struct rte_vdev_device *dev)
 {
+       const char *name = rte_vdev_device_name(dev);
        struct rte_eth_dev *eth_dev = NULL;
        struct pmd_internals *internals = NULL;
        struct ring_queue *r = NULL;
index 347a807..698e14b 100644 (file)
@@ -1288,14 +1288,18 @@ set_remote_iface(const char *key __rte_unused,
 /* Open a TAP interface device.
  */
 static int
-rte_pmd_tap_probe(const char *name, const char *params)
+rte_pmd_tap_probe(struct rte_vdev_device *dev)
 {
+       const char *name, *params;
        int ret;
        struct rte_kvargs *kvlist = NULL;
        int speed;
        char tap_name[RTE_ETH_NAME_MAX_LEN];
        char remote_iface[RTE_ETH_NAME_MAX_LEN];
 
+       name = rte_vdev_device_name(dev);
+       params = rte_vdev_device_args(dev);
+
        speed = ETH_SPEED_NUM_10G;
        snprintf(tap_name, sizeof(tap_name), "%s%d",
                 DEFAULT_TAP_NAME, tap_unit++);
@@ -1355,7 +1359,7 @@ leave:
 /* detach a TAP device.
  */
 static int
-rte_pmd_tap_remove(const char *name)
+rte_pmd_tap_remove(struct rte_vdev_device *dev)
 {
        struct rte_eth_dev *eth_dev = NULL;
        struct pmd_internals *internals;
@@ -1365,7 +1369,7 @@ rte_pmd_tap_remove(const char *name)
                rte_socket_id());
 
        /* find the ethdev entry */
-       eth_dev = rte_eth_dev_allocated(name);
+       eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
        if (!eth_dev)
                return 0;
 
index 41ce5fc..cdd8c31 100644 (file)
@@ -1132,8 +1132,9 @@ open_int(const char *key __rte_unused, const char *value, void *extra_args)
 }
 
 static int
-rte_pmd_vhost_probe(const char *name, const char *params)
+rte_pmd_vhost_probe(struct rte_vdev_device *dev)
 {
+       const char *name;
        struct rte_kvargs *kvlist = NULL;
        int ret = 0;
        char *iface_name;
@@ -1142,9 +1143,10 @@ rte_pmd_vhost_probe(const char *name, const char *params)
        int client_mode = 0;
        int dequeue_zero_copy = 0;
 
+       name = rte_vdev_device_name(dev);
        RTE_LOG(INFO, PMD, "Initializing pmd_vhost for %s\n", name);
 
-       kvlist = rte_kvargs_parse(params, valid_arguments);
+       kvlist = rte_kvargs_parse(rte_vdev_device_args(dev), valid_arguments);
        if (kvlist == NULL)
                return -1;
 
@@ -1195,11 +1197,13 @@ out_free:
 }
 
 static int
-rte_pmd_vhost_remove(const char *name)
+rte_pmd_vhost_remove(struct rte_vdev_device *dev)
 {
+       const char *name;
        struct rte_eth_dev *eth_dev = NULL;
        unsigned int i;
 
+       name = rte_vdev_device_name(dev);
        RTE_LOG(INFO, PMD, "Un-Initializing pmd_vhost for %s\n", name);
 
        /* find an ethdev entry */
index 4c3f664..7979c1f 100644 (file)
@@ -402,7 +402,7 @@ virtio_user_eth_dev_free(struct rte_eth_dev *eth_dev)
  * Returns 0 on success.
  */
 static int
-virtio_user_pmd_probe(const char *name, const char *params)
+virtio_user_pmd_probe(struct rte_vdev_device *dev)
 {
        struct rte_kvargs *kvlist = NULL;
        struct rte_eth_dev *eth_dev;
@@ -415,13 +415,7 @@ virtio_user_pmd_probe(const char *name, const char *params)
        char *mac_addr = NULL;
        int ret = -1;
 
-       if (!params || params[0] == '\0') {
-               PMD_INIT_LOG(ERR, "arg %s is mandatory for virtio_user",
-                         VIRTIO_USER_ARG_QUEUE_SIZE);
-               goto end;
-       }
-
-       kvlist = rte_kvargs_parse(params, valid_args);
+       kvlist = rte_kvargs_parse(rte_vdev_device_args(dev), valid_args);
        if (!kvlist) {
                PMD_INIT_LOG(ERR, "error when parsing param");
                goto end;
@@ -507,7 +501,7 @@ virtio_user_pmd_probe(const char *name, const char *params)
        }
 
        if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
-               eth_dev = virtio_user_eth_dev_alloc(name);
+               eth_dev = virtio_user_eth_dev_alloc(rte_vdev_device_name(dev));
                if (!eth_dev) {
                        PMD_INIT_LOG(ERR, "virtio_user fails to alloc device");
                        goto end;
@@ -521,7 +515,7 @@ virtio_user_pmd_probe(const char *name, const char *params)
                        goto end;
                }
        } else {
-               eth_dev = rte_eth_dev_attach_secondary(name);
+               eth_dev = rte_eth_dev_attach_secondary(rte_vdev_device_name(dev));
                if (!eth_dev)
                        goto end;
        }
@@ -548,15 +542,17 @@ end:
 
 /** Called by rte_eth_dev_detach() */
 static int
-virtio_user_pmd_remove(const char *name)
+virtio_user_pmd_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
        struct rte_eth_dev *eth_dev;
        struct virtio_hw *hw;
        struct virtio_user_dev *dev;
 
-       if (!name)
+       if (!vdev)
                return -EINVAL;
 
+       name = rte_vdev_device_name(vdev);
        PMD_DRV_LOG(INFO, "Un-Initializing %s", name);
        eth_dev = rte_eth_dev_allocated(name);
        if (!eth_dev)
index 19bc09a..6ec8c08 100644 (file)
@@ -726,7 +726,7 @@ eth_dev_xenvirt_free(const char *name, const unsigned numa_node)
 
 /*TODO: Support multiple process model */
 static int
-rte_pmd_xenvirt_probe(const char *name, const char *params)
+rte_pmd_xenvirt_probe(struct rte_vdev_device *dev)
 {
        if (virtio_idx == 0) {
                if (xenstore_init() != 0) {
@@ -738,14 +738,15 @@ rte_pmd_xenvirt_probe(const char *name, const char *params)
                        return -1;
                }
        }
-       eth_dev_xenvirt_create(name, params, rte_socket_id(), DEV_CREATE);
+       eth_dev_xenvirt_create(rte_vdev_device_name(dev),
+               rte_vdev_device_args(dev), rte_socket_id(), DEV_CREATE);
        return 0;
 }
 
 static int
-rte_pmd_xenvirt_remove(const char *name)
+rte_pmd_xenvirt_remove(struct rte_vdev_device *dev)
 {
-       eth_dev_xenvirt_free(name, rte_socket_id());
+       eth_dev_xenvirt_free(rte_vdev_device_name(dev), rte_socket_id());
 
        if (virtio_idx == 0) {
                if (xenstore_uninit() != 0)
index 70da608..22fe2ca 100644 (file)
@@ -76,7 +76,6 @@ static int
 vdev_probe_all_drivers(struct rte_vdev_device *dev)
 {
        const char *name = rte_vdev_device_name(dev);
-       const char *args = rte_vdev_device_args(dev);
        struct rte_vdev_driver *driver;
        int ret;
 
@@ -90,7 +89,7 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev)
                if (!strncmp(driver->driver.name, name,
                            strlen(driver->driver.name))) {
                        dev->device.driver = &driver->driver;
-                       ret = driver->probe(name, args);
+                       ret = driver->probe(dev);
                        if (ret)
                                dev->device.driver = NULL;
                        return ret;
@@ -103,7 +102,7 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev)
                    !strncmp(driver->driver.alias, name,
                            strlen(driver->driver.alias))) {
                        dev->device.driver = &driver->driver;
-                       ret = driver->probe(name, args);
+                       ret = driver->probe(dev);
                        if (ret)
                                dev->device.driver = NULL;
                        return ret;
@@ -215,7 +214,7 @@ vdev_remove_driver(struct rte_vdev_device *dev)
 
        driver = container_of(dev->device.driver, const struct rte_vdev_driver,
                driver);
-       return driver->remove(name);
+       return driver->remove(dev);
 }
 
 int
index 81f6beb..8db2c00 100644 (file)
@@ -68,12 +68,12 @@ TAILQ_HEAD(vdev_driver_list, rte_vdev_driver);
 /**
  * Probe function called for each virtual device driver once.
  */
-typedef int (rte_vdev_probe_t)(const char *name, const char *args);
+typedef int (rte_vdev_probe_t)(struct rte_vdev_device *dev);
 
 /**
  * Remove function called for each virtual device driver once.
  */
-typedef int (rte_vdev_remove_t)(const char *name);
+typedef int (rte_vdev_remove_t)(struct rte_vdev_device *dev);
 
 /**
  * A virtual device driver abstraction.