net/thunderx: support Tx queue start and stop

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Signed-off-by: Maciej Czekaj <maciej.czekaj@caviumnetworks.com>
Signed-off-by: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
Signed-off-by: Zyta Szpak <zyta.szpak@semihalf.com>
Signed-off-by: Slawomir Rosek <slawomir.rosek@semihalf.com>
Signed-off-by: Radoslaw Biernacki <rad@semihalf.com>
This commit is contained in:
Jerin Jacob 2016-06-17 18:59:51 +05:30 committed by Bruce Richardson
parent 86b4eb4221
commit fc1f6c62b6

View File

@ -562,6 +562,51 @@ nicvf_tx_queue_reset(struct nicvf_txq *txq)
txq->xmit_bufs = 0;
}
static inline int
nicvf_start_tx_queue(struct rte_eth_dev *dev, uint16_t qidx)
{
struct nicvf_txq *txq;
int ret;
if (dev->data->tx_queue_state[qidx] == RTE_ETH_QUEUE_STATE_STARTED)
return 0;
txq = dev->data->tx_queues[qidx];
txq->pool = NULL;
ret = nicvf_qset_sq_config(nicvf_pmd_priv(dev), qidx, txq);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to configure sq %d %d", qidx, ret);
goto config_sq_error;
}
dev->data->tx_queue_state[qidx] = RTE_ETH_QUEUE_STATE_STARTED;
return ret;
config_sq_error:
nicvf_qset_sq_reclaim(nicvf_pmd_priv(dev), qidx);
return ret;
}
static inline int
nicvf_stop_tx_queue(struct rte_eth_dev *dev, uint16_t qidx)
{
struct nicvf_txq *txq;
int ret;
if (dev->data->tx_queue_state[qidx] == RTE_ETH_QUEUE_STATE_STOPPED)
return 0;
ret = nicvf_qset_sq_reclaim(nicvf_pmd_priv(dev), qidx);
if (ret)
PMD_INIT_LOG(ERR, "Failed to reclaim sq %d %d", qidx, ret);
txq = dev->data->tx_queues[qidx];
nicvf_tx_queue_release_mbufs(txq);
nicvf_tx_queue_reset(txq);
dev->data->tx_queue_state[qidx] = RTE_ETH_QUEUE_STATE_STOPPED;
return ret;
}
static inline int
nicvf_configure_cpi(struct rte_eth_dev *dev)
@ -871,6 +916,18 @@ nicvf_dev_rx_queue_stop(struct rte_eth_dev *dev, uint16_t qidx)
return ret;
}
static int
nicvf_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t qidx)
{
return nicvf_start_tx_queue(dev, qidx);
}
static int
nicvf_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t qidx)
{
return nicvf_stop_tx_queue(dev, qidx);
}
static int
nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,
uint16_t nb_desc, unsigned int socket_id,
@ -1100,6 +1157,8 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {
.rss_hash_conf_get = nicvf_dev_rss_hash_conf_get,
.rx_queue_start = nicvf_dev_rx_queue_start,
.rx_queue_stop = nicvf_dev_rx_queue_stop,
.tx_queue_start = nicvf_dev_tx_queue_start,
.tx_queue_stop = nicvf_dev_tx_queue_stop,
.rx_queue_setup = nicvf_dev_rx_queue_setup,
.rx_queue_release = nicvf_dev_rx_queue_release,
.rx_queue_count = nicvf_dev_rx_queue_count,