ethdev: remove experimental tag for iterator API
[dpdk.git] / drivers / net / softnic / rte_eth_softnic.c
index 148b82e..743a7c5 100644 (file)
@@ -14,6 +14,7 @@
 #include <rte_errno.h>
 #include <rte_ring.h>
 #include <rte_tm_driver.h>
+#include <rte_mtr_driver.h>
 
 #include "rte_eth_softnic.h"
 #include "rte_eth_softnic_internals.h"
@@ -27,7 +28,7 @@
 #define PMD_PARAM_TM_QSIZE2                                "tm_qsize2"
 #define PMD_PARAM_TM_QSIZE3                                "tm_qsize3"
 
-static const char *pmd_valid_args[] = {
+static const char * const pmd_valid_args[] = {
        PMD_PARAM_FIRMWARE,
        PMD_PARAM_CONN_PORT,
        PMD_PARAM_CPU_ID,
@@ -46,7 +47,7 @@ static const char welcome[] =
 
 static const char prompt[] = "softnic> ";
 
-struct softnic_conn_params conn_params_default = {
+static const struct softnic_conn_params conn_params_default = {
        .welcome = welcome,
        .prompt = prompt,
        .addr = "0.0.0.0",
@@ -189,6 +190,7 @@ pmd_dev_stop(struct rte_eth_dev *dev)
        softnic_mempool_free(p);
 
        tm_hierarchy_free(p);
+       softnic_mtr_free(p);
 }
 
 static void
@@ -227,6 +229,14 @@ pmd_tm_ops_get(struct rte_eth_dev *dev __rte_unused, void *arg)
        return 0;
 }
 
+static int
+pmd_mtr_ops_get(struct rte_eth_dev *dev __rte_unused, void *arg)
+{
+       *(const struct rte_mtr_ops **)arg = &pmd_mtr_ops;
+
+       return 0;
+}
+
 static const struct eth_dev_ops pmd_ops = {
        .dev_configure = pmd_dev_configure,
        .dev_start = pmd_dev_start,
@@ -238,6 +248,7 @@ static const struct eth_dev_ops pmd_ops = {
        .tx_queue_setup = pmd_tx_queue_setup,
        .filter_ctrl = pmd_filter_ctrl,
        .tm_ops_get = pmd_tm_ops_get,
+       .mtr_ops_get = pmd_mtr_ops_get,
 };
 
 static uint16_t
@@ -280,12 +291,14 @@ pmd_init(struct pmd_params *params)
 
        /* Resources */
        tm_hierarchy_init(p);
+       softnic_mtr_init(p);
 
        softnic_mempool_init(p);
        softnic_swq_init(p);
        softnic_link_init(p);
        softnic_tmgr_init(p);
        softnic_tap_init(p);
+       softnic_cryptodev_init(p);
        softnic_port_in_action_profile_init(p);
        softnic_table_action_profile_init(p);
        softnic_pipeline_init(p);
@@ -334,6 +347,7 @@ pmd_free(struct pmd_internals *p)
        softnic_mempool_free(p);
 
        tm_hierarchy_free(p);
+       softnic_mtr_free(p);
 
        rte_free(p);
 }
@@ -543,7 +557,6 @@ static int
 pmd_remove(struct rte_vdev_device *vdev)
 {
        struct rte_eth_dev *dev = NULL;
-       struct pmd_internals *p;
 
        if (!vdev)
                return -EINVAL;
@@ -554,12 +567,12 @@ pmd_remove(struct rte_vdev_device *vdev)
        dev = rte_eth_dev_allocated(rte_vdev_device_name(vdev));
        if (dev == NULL)
                return -ENODEV;
-       p = dev->data->dev_private;
 
        /* Free device data structures*/
-       rte_free(dev->data);
+       pmd_free(dev->data->dev_private);
+       dev->data->dev_private = NULL; /* already freed */
+       dev->data->mac_addrs = NULL; /* statically allocated */
        rte_eth_dev_release_port(dev);
-       pmd_free(p);
 
        return 0;
 }