app/crypto-perf: support lookaside IPsec
[dpdk.git] / lib / ethdev / rte_ethdev.c
index 655d7be..028907b 100644 (file)
@@ -889,6 +889,32 @@ eth_err(uint16_t port_id, int ret)
        return ret;
 }
 
+static void
+eth_dev_rxq_release(struct rte_eth_dev *dev, uint16_t qid)
+{
+       void **rxq = dev->data->rx_queues;
+
+       if (rxq[qid] == NULL)
+               return;
+
+       if (dev->dev_ops->rx_queue_release != NULL)
+               (*dev->dev_ops->rx_queue_release)(dev, qid);
+       rxq[qid] = NULL;
+}
+
+static void
+eth_dev_txq_release(struct rte_eth_dev *dev, uint16_t qid)
+{
+       void **txq = dev->data->tx_queues;
+
+       if (txq[qid] == NULL)
+               return;
+
+       if (dev->dev_ops->tx_queue_release != NULL)
+               (*dev->dev_ops->tx_queue_release)(dev, qid);
+       txq[qid] = NULL;
+}
+
 static int
 eth_dev_rx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
 {
@@ -905,12 +931,10 @@ eth_dev_rx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
                        return -(ENOMEM);
                }
        } else if (dev->data->rx_queues != NULL && nb_queues != 0) { /* re-configure */
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_release, -ENOTSUP);
+               for (i = nb_queues; i < old_nb_queues; i++)
+                       eth_dev_rxq_release(dev, i);
 
                rxq = dev->data->rx_queues;
-
-               for (i = nb_queues; i < old_nb_queues; i++)
-                       (*dev->dev_ops->rx_queue_release)(rxq[i]);
                rxq = rte_realloc(rxq, sizeof(rxq[0]) * nb_queues,
                                RTE_CACHE_LINE_SIZE);
                if (rxq == NULL)
@@ -925,12 +949,8 @@ eth_dev_rx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
                dev->data->rx_queues = rxq;
 
        } else if (dev->data->rx_queues != NULL && nb_queues == 0) {
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_release, -ENOTSUP);
-
-               rxq = dev->data->rx_queues;
-
                for (i = nb_queues; i < old_nb_queues; i++)
-                       (*dev->dev_ops->rx_queue_release)(rxq[i]);
+                       eth_dev_rxq_release(dev, i);
 
                rte_free(dev->data->rx_queues);
                dev->data->rx_queues = NULL;
@@ -1145,12 +1165,10 @@ eth_dev_tx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
                        return -(ENOMEM);
                }
        } else if (dev->data->tx_queues != NULL && nb_queues != 0) { /* re-configure */
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_release, -ENOTSUP);
+               for (i = nb_queues; i < old_nb_queues; i++)
+                       eth_dev_txq_release(dev, i);
 
                txq = dev->data->tx_queues;
-
-               for (i = nb_queues; i < old_nb_queues; i++)
-                       (*dev->dev_ops->tx_queue_release)(txq[i]);
                txq = rte_realloc(txq, sizeof(txq[0]) * nb_queues,
                                  RTE_CACHE_LINE_SIZE);
                if (txq == NULL)
@@ -1165,12 +1183,8 @@ eth_dev_tx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
                dev->data->tx_queues = txq;
 
        } else if (dev->data->tx_queues != NULL && nb_queues == 0) {
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_release, -ENOTSUP);
-
-               txq = dev->data->tx_queues;
-
                for (i = nb_queues; i < old_nb_queues; i++)
-                       (*dev->dev_ops->tx_queue_release)(txq[i]);
+                       eth_dev_txq_release(dev, i);
 
                rte_free(dev->data->tx_queues);
                dev->data->tx_queues = NULL;
@@ -2006,7 +2020,6 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
        struct rte_eth_dev *dev;
        struct rte_eth_dev_info dev_info;
        struct rte_eth_rxconf local_conf;
-       void **rxq;
 
        RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
        dev = &rte_eth_devices[port_id];
@@ -2110,13 +2123,7 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
                        RTE_ETH_QUEUE_STATE_STOPPED))
                return -EBUSY;
 
-       rxq = dev->data->rx_queues;
-       if (rxq[rx_queue_id]) {
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_release,
-                                       -ENOTSUP);
-               (*dev->dev_ops->rx_queue_release)(rxq[rx_queue_id]);
-               rxq[rx_queue_id] = NULL;
-       }
+       eth_dev_rxq_release(dev, rx_queue_id);
 
        if (rx_conf == NULL)
                rx_conf = &dev_info.default_rxconf;
@@ -2189,7 +2196,6 @@ rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
        int ret;
        struct rte_eth_dev *dev;
        struct rte_eth_hairpin_cap cap;
-       void **rxq;
        int i;
        int count;
 
@@ -2246,13 +2252,7 @@ rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
        }
        if (dev->data->dev_started)
                return -EBUSY;
-       rxq = dev->data->rx_queues;
-       if (rxq[rx_queue_id] != NULL) {
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_release,
-                                       -ENOTSUP);
-               (*dev->dev_ops->rx_queue_release)(rxq[rx_queue_id]);
-               rxq[rx_queue_id] = NULL;
-       }
+       eth_dev_rxq_release(dev, rx_queue_id);
        ret = (*dev->dev_ops->rx_hairpin_queue_setup)(dev, rx_queue_id,
                                                      nb_rx_desc, conf);
        if (ret == 0)
@@ -2269,7 +2269,6 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
        struct rte_eth_dev *dev;
        struct rte_eth_dev_info dev_info;
        struct rte_eth_txconf local_conf;
-       void **txq;
        int ret;
 
        RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
@@ -2314,13 +2313,7 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
                        RTE_ETH_QUEUE_STATE_STOPPED))
                return -EBUSY;
 
-       txq = dev->data->tx_queues;
-       if (txq[tx_queue_id]) {
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_release,
-                                       -ENOTSUP);
-               (*dev->dev_ops->tx_queue_release)(txq[tx_queue_id]);
-               txq[tx_queue_id] = NULL;
-       }
+       eth_dev_txq_release(dev, tx_queue_id);
 
        if (tx_conf == NULL)
                tx_conf = &dev_info.default_txconf;
@@ -2368,7 +2361,6 @@ rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
 {
        struct rte_eth_dev *dev;
        struct rte_eth_hairpin_cap cap;
-       void **txq;
        int i;
        int count;
        int ret;
@@ -2426,13 +2418,7 @@ rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
        }
        if (dev->data->dev_started)
                return -EBUSY;
-       txq = dev->data->tx_queues;
-       if (txq[tx_queue_id] != NULL) {
-               RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_release,
-                                       -ENOTSUP);
-               (*dev->dev_ops->tx_queue_release)(txq[tx_queue_id]);
-               txq[tx_queue_id] = NULL;
-       }
+       eth_dev_txq_release(dev, tx_queue_id);
        ret = (*dev->dev_ops->tx_hairpin_queue_setup)
                (dev, tx_queue_id, nb_tx_desc, conf);
        if (ret == 0)
@@ -4519,67 +4505,6 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
                                                        queue_idx, tx_rate));
 }
 
-int
-rte_eth_mirror_rule_set(uint16_t port_id,
-                       struct rte_eth_mirror_conf *mirror_conf,
-                       uint8_t rule_id, uint8_t on)
-{
-       struct rte_eth_dev *dev;
-
-       RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
-       dev = &rte_eth_devices[port_id];
-
-       if (mirror_conf == NULL) {
-               RTE_ETHDEV_LOG(ERR,
-                       "Cannot set ethdev port %u mirror rule from NULL config\n",
-                       port_id);
-               return -EINVAL;
-       }
-
-       if (mirror_conf->rule_type == 0) {
-               RTE_ETHDEV_LOG(ERR, "Mirror rule type can not be 0\n");
-               return -EINVAL;
-       }
-
-       if (mirror_conf->dst_pool >= ETH_64_POOLS) {
-               RTE_ETHDEV_LOG(ERR, "Invalid dst pool, pool id must be 0-%d\n",
-                       ETH_64_POOLS - 1);
-               return -EINVAL;
-       }
-
-       if ((mirror_conf->rule_type & (ETH_MIRROR_VIRTUAL_POOL_UP |
-            ETH_MIRROR_VIRTUAL_POOL_DOWN)) &&
-           (mirror_conf->pool_mask == 0)) {
-               RTE_ETHDEV_LOG(ERR,
-                       "Invalid mirror pool, pool mask can not be 0\n");
-               return -EINVAL;
-       }
-
-       if ((mirror_conf->rule_type & ETH_MIRROR_VLAN) &&
-           mirror_conf->vlan.vlan_mask == 0) {
-               RTE_ETHDEV_LOG(ERR,
-                       "Invalid vlan mask, vlan mask can not be 0\n");
-               return -EINVAL;
-       }
-
-       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mirror_rule_set, -ENOTSUP);
-
-       return eth_err(port_id, (*dev->dev_ops->mirror_rule_set)(dev,
-                                               mirror_conf, rule_id, on));
-}
-
-int
-rte_eth_mirror_rule_reset(uint16_t port_id, uint8_t rule_id)
-{
-       struct rte_eth_dev *dev;
-
-       RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
-       dev = &rte_eth_devices[port_id];
-
-       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mirror_rule_reset, -ENOTSUP);
-       return eth_err(port_id, (*dev->dev_ops->mirror_rule_reset)(dev, rule_id));
-}
-
 RTE_INIT(eth_dev_init_cb_lists)
 {
        uint16_t i;