net/sfc: implement port representor link update
[dpdk.git] / drivers / net / ena / ena_ethdev.c
index 14f776b..a82d4b6 100644 (file)
@@ -192,8 +192,8 @@ static int ena_dev_reset(struct rte_eth_dev *dev);
 static int ena_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
 static void ena_rx_queue_release_all(struct rte_eth_dev *dev);
 static void ena_tx_queue_release_all(struct rte_eth_dev *dev);
-static void ena_rx_queue_release(void *queue);
-static void ena_tx_queue_release(void *queue);
+static void ena_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid);
+static void ena_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid);
 static void ena_rx_queue_release_bufs(struct ena_ring *ring);
 static void ena_tx_queue_release_bufs(struct ena_ring *ring);
 static int ena_link_update(struct rte_eth_dev *dev,
@@ -525,27 +525,25 @@ ena_dev_reset(struct rte_eth_dev *dev)
 
 static void ena_rx_queue_release_all(struct rte_eth_dev *dev)
 {
-       struct ena_ring **queues = (struct ena_ring **)dev->data->rx_queues;
        int nb_queues = dev->data->nb_rx_queues;
        int i;
 
        for (i = 0; i < nb_queues; i++)
-               ena_rx_queue_release(queues[i]);
+               ena_rx_queue_release(dev, i);
 }
 
 static void ena_tx_queue_release_all(struct rte_eth_dev *dev)
 {
-       struct ena_ring **queues = (struct ena_ring **)dev->data->tx_queues;
        int nb_queues = dev->data->nb_tx_queues;
        int i;
 
        for (i = 0; i < nb_queues; i++)
-               ena_tx_queue_release(queues[i]);
+               ena_tx_queue_release(dev, i);
 }
 
-static void ena_rx_queue_release(void *queue)
+static void ena_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid)
 {
-       struct ena_ring *ring = (struct ena_ring *)queue;
+       struct ena_ring *ring = dev->data->rx_queues[qid];
 
        /* Free ring resources */
        if (ring->rx_buffer_info)
@@ -566,9 +564,9 @@ static void ena_rx_queue_release(void *queue)
                ring->port_id, ring->id);
 }
 
-static void ena_tx_queue_release(void *queue)
+static void ena_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid)
 {
-       struct ena_ring *ring = (struct ena_ring *)queue;
+       struct ena_ring *ring = dev->data->tx_queues[qid];
 
        /* Free ring resources */
        if (ring->push_buf_intermediate_buf)
@@ -1856,6 +1854,7 @@ static int ena_dev_configure(struct rte_eth_dev *dev)
 
        if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG)
                dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+       dev->data->dev_conf.txmode.offloads |= DEV_TX_OFFLOAD_MULTI_SEGS;
 
        adapter->tx_selected_offloads = dev->data->dev_conf.txmode.offloads;
        adapter->rx_selected_offloads = dev->data->dev_conf.rxmode.offloads;
@@ -1930,6 +1929,7 @@ static int ena_infos_get(struct rte_eth_dev *dev,
                        DEV_RX_OFFLOAD_TCP_CKSUM;
 
        rx_feat |= DEV_RX_OFFLOAD_JUMBO_FRAME;
+       tx_feat |= DEV_TX_OFFLOAD_MULTI_SEGS;
 
        /* Inform framework about available features */
        dev_info->rx_offload_capa = rx_feat;