ethdev: fix xstat name of basic stats per queue
[dpdk.git] / lib / librte_ethdev / rte_ethdev.c
index b51ab9b..b54af39 100644 (file)
@@ -500,6 +500,7 @@ rte_eth_dev_allocate(const char *name)
        strlcpy(eth_dev->data->name, name, sizeof(eth_dev->data->name));
        eth_dev->data->port_id = port_id;
        eth_dev->data->mtu = RTE_ETHER_MTU;
+       pthread_mutex_init(&eth_dev->data->flow_ops_mutex, NULL);
 
 unlock:
        rte_spinlock_unlock(&rte_eth_dev_shared_data->ownership_lock);
@@ -564,6 +565,7 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev)
                rte_free(eth_dev->data->mac_addrs);
                rte_free(eth_dev->data->hash_mac_addrs);
                rte_free(eth_dev->data->dev_private);
+               pthread_mutex_destroy(&eth_dev->data->flow_ops_mutex);
                memset(eth_dev->data, 0, sizeof(struct rte_eth_dev_data));
        }
 
@@ -2543,7 +2545,7 @@ rte_eth_basic_stats_get_names(struct rte_eth_dev *dev,
                for (idx = 0; idx < RTE_NB_RXQ_STATS; idx++) {
                        snprintf(xstats_names[cnt_used_entries].name,
                                sizeof(xstats_names[0].name),
-                               "rx_q%u%s",
+                               "rx_q%u_%s",
                                id_queue, rte_rxq_stats_strings[idx].name);
                        cnt_used_entries++;
                }
@@ -2554,7 +2556,7 @@ rte_eth_basic_stats_get_names(struct rte_eth_dev *dev,
                for (idx = 0; idx < RTE_NB_TXQ_STATS; idx++) {
                        snprintf(xstats_names[cnt_used_entries].name,
                                sizeof(xstats_names[0].name),
-                               "tx_q%u%s",
+                               "tx_q%u_%s",
                                id_queue, rte_txq_stats_strings[idx].name);
                        cnt_used_entries++;
                }
@@ -3660,6 +3662,50 @@ rte_eth_led_off(uint16_t port_id)
        return eth_err(port_id, (*dev->dev_ops->dev_led_off)(dev));
 }
 
+int
+rte_eth_fec_get_capability(uint16_t port_id,
+                          struct rte_eth_fec_capa *speed_fec_capa,
+                          unsigned int num)
+{
+       struct rte_eth_dev *dev;
+       int ret;
+
+       if (speed_fec_capa == NULL && num > 0)
+               return -EINVAL;
+
+       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->fec_get_capability, -ENOTSUP);
+       ret = (*dev->dev_ops->fec_get_capability)(dev, speed_fec_capa, num);
+
+       return ret;
+}
+
+int
+rte_eth_fec_get(uint16_t port_id, uint32_t *fec_capa)
+{
+       struct rte_eth_dev *dev;
+
+       if (fec_capa == NULL)
+               return -EINVAL;
+
+       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->fec_get, -ENOTSUP);
+       return eth_err(port_id, (*dev->dev_ops->fec_get)(dev, fec_capa));
+}
+
+int
+rte_eth_fec_set(uint16_t port_id, uint32_t fec_capa)
+{
+       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->fec_set, -ENOTSUP);
+       return eth_err(port_id, (*dev->dev_ops->fec_set)(dev, fec_capa));
+}
+
 /*
  * Returns index into MAC address array of addr. Use 00:00:00:00:00:00 to find
  * an empty spot.
@@ -4688,7 +4734,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
                return -EINVAL;
        }
 
-       if (dev->data->rx_queues[queue_id] == NULL) {
+       if (dev->data->rx_queues == NULL ||
+                       dev->data->rx_queues[queue_id] == NULL) {
                RTE_ETHDEV_LOG(ERR,
                               "Rx queue %"PRIu16" of device with port_id=%"
                               PRIu16" has not been setup\n",
@@ -4727,7 +4774,8 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
                return -EINVAL;
        }
 
-       if (dev->data->tx_queues[queue_id] == NULL) {
+       if (dev->data->tx_queues == NULL ||
+                       dev->data->tx_queues[queue_id] == NULL) {
                RTE_ETHDEV_LOG(ERR,
                               "Tx queue %"PRIu16" of device with port_id=%"
                               PRIu16" has not been setup\n",