ethdev: get default Rx/Tx configuration from dev info

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]
This commit is contained in:
Pablo de Lara 2014-10-01 10:49:04 +01:00 committed by Thomas Monjalon
parent a30268e9a2
commit fbde27f19a
2 changed files with 17 additions and 0 deletions

View File

@ -1022,6 +1022,9 @@ rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id,
return (-EINVAL); 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, ret = (*dev->dev_ops->rx_queue_setup)(dev, rx_queue_id, nb_rx_desc,
socket_id, rx_conf, mp); socket_id, rx_conf, mp);
if (!ret) { 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) const struct rte_eth_txconf *tx_conf)
{ {
struct rte_eth_dev *dev; struct rte_eth_dev *dev;
struct rte_eth_dev_info dev_info;
/* This function is only safe when called from the primary process /* This function is only safe when called from the primary process
* in a multi-process setup*/ * 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; 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); 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, return (*dev->dev_ops->tx_queue_setup)(dev, tx_queue_id, nb_tx_desc,
socket_id, tx_conf); socket_id, tx_conf);
} }

View File

@ -906,6 +906,8 @@ struct rte_eth_dev_info {
uint16_t max_vmdq_pools; /**< Maximum number of VMDq pools. */ uint16_t max_vmdq_pools; /**< Maximum number of VMDq pools. */
uint32_t rx_offload_capa; /**< Device RX offload capabilities. */ uint32_t rx_offload_capa; /**< Device RX offload capabilities. */
uint32_t tx_offload_capa; /**< Device TX 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 */ /** 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. * the DMA memory allocated for the receive descriptors of the ring.
* @param rx_conf * @param rx_conf
* The pointer to the configuration data to be used for the receive queue. * 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 * The *rx_conf* structure contains an *rx_thresh* structure with the values
* of the Prefetch, Host, and Write-Back threshold registers of the receive * of the Prefetch, Host, and Write-Back threshold registers of the receive
* ring. * 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. * the DMA memory allocated for the transmit descriptors of the ring.
* @param tx_conf * @param tx_conf
* The pointer to the configuration data to be used for the transmit queue. * 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_conf* structure contains the following data:
* - The *tx_thresh* structure with the values of the Prefetch, Host, and * - The *tx_thresh* structure with the values of the Prefetch, Host, and
* Write-Back threshold registers of the transmit ring. * Write-Back threshold registers of the transmit ring.