ethdev: get default Rx/Tx configuration from dev info
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Wed, 1 Oct 2014 09:49:04 +0000 (10:49 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 10 Oct 2014 10:47:05 +0000 (12:47 +0200)
Many sample apps use duplicated code to set rte_eth_txconf and rte_eth_rxconf
structures. This patch allows the user to get a default optimal RX/TX configuration
through rte_eth_dev_info get, and still any parameters may be tweaked as wished,
before setting up queues.

Besides, if a NULL pointer is passed to rte_eth_rx_queue_setup or
rte_eth_tx_queue_setup, these functions get internally the default RX/TX
configuration for the user.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
[Thomas: split patch]

lib/librte_ether/rte_ethdev.c
lib/librte_ether/rte_ethdev.h

index 6c657cf..1659340 100644 (file)
@@ -1022,6 +1022,9 @@ rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id,
                return (-EINVAL);
        }
 
+       if (rx_conf == NULL)
+               rx_conf = &dev_info.default_rxconf;
+
        ret = (*dev->dev_ops->rx_queue_setup)(dev, rx_queue_id, nb_rx_desc,
                                              socket_id, rx_conf, mp);
        if (!ret) {
@@ -1039,6 +1042,7 @@ rte_eth_tx_queue_setup(uint8_t port_id, uint16_t tx_queue_id,
                       const struct rte_eth_txconf *tx_conf)
 {
        struct rte_eth_dev *dev;
+       struct rte_eth_dev_info dev_info;
 
        /* This function is only safe when called from the primary process
         * in a multi-process setup*/
@@ -1060,7 +1064,14 @@ rte_eth_tx_queue_setup(uint8_t port_id, uint16_t tx_queue_id,
                return -EBUSY;
        }
 
+       FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);
        FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_setup, -ENOTSUP);
+
+       (*dev->dev_ops->dev_infos_get)(dev, &dev_info);
+
+       if (tx_conf == NULL)
+               tx_conf = &dev_info.default_txconf;
+
        return (*dev->dev_ops->tx_queue_setup)(dev, tx_queue_id, nb_tx_desc,
                                               socket_id, tx_conf);
 }
index 3f79cc3..13be711 100644 (file)
@@ -906,6 +906,8 @@ struct rte_eth_dev_info {
        uint16_t max_vmdq_pools; /**< Maximum number of VMDq pools. */
        uint32_t rx_offload_capa; /**< Device RX offload capabilities. */
        uint32_t tx_offload_capa; /**< Device TX offload capabilities. */
+       struct rte_eth_rxconf default_rxconf; /**< Default RX configuration */
+       struct rte_eth_txconf default_txconf; /**< Default TX configuration */
 };
 
 /** Maximum name length for extended statistics counters */
@@ -1717,6 +1719,8 @@ extern int rte_eth_dev_configure(uint8_t port_id,
  *   the DMA memory allocated for the receive descriptors of the ring.
  * @param rx_conf
  *   The pointer to the configuration data to be used for the receive queue.
+ *   NULL value is allowed, in which case default RX configuration
+ *   will be used.
  *   The *rx_conf* structure contains an *rx_thresh* structure with the values
  *   of the Prefetch, Host, and Write-Back threshold registers of the receive
  *   ring.
@@ -1754,6 +1758,8 @@ extern int rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id,
  *   the DMA memory allocated for the transmit descriptors of the ring.
  * @param tx_conf
  *   The pointer to the configuration data to be used for the transmit queue.
+ *   NULL value is allowed, in which case default RX configuration
+ *   will be used.
  *   The *tx_conf* structure contains the following data:
  *   - The *tx_thresh* structure with the values of the Prefetch, Host, and
  *     Write-Back threshold registers of the transmit ring.