| 1765 | } |
| 1766 | |
| 1767 | int |
| 1768 | i40e_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) |
| 1769 | { |
| 1770 | int err; |
| 1771 | struct i40e_tx_queue *txq; |
| 1772 | struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); |
| 1773 | |
| 1774 | PMD_INIT_FUNC_TRACE(); |
| 1775 | |
| 1776 | txq = dev->data->tx_queues[tx_queue_id]; |
| 1777 | if (!txq || !txq->q_set) { |
| 1778 | PMD_DRV_LOG(ERR, "TX queue %u is not available or setup", |
| 1779 | tx_queue_id); |
| 1780 | return -EINVAL; |
| 1781 | } |
| 1782 | |
| 1783 | if (txq->tx_deferred_start) |
| 1784 | PMD_DRV_LOG(WARNING, "TX queue %u is deferred start", |
| 1785 | tx_queue_id); |
| 1786 | |
| 1787 | /* |
| 1788 | * tx_queue_id is queue id application refers to, while |
| 1789 | * rxq->reg_idx is the real queue index. |
| 1790 | */ |
| 1791 | err = i40e_switch_tx_queue(hw, txq->reg_idx, TRUE); |
| 1792 | if (err) { |
| 1793 | PMD_DRV_LOG(ERR, "Failed to switch TX queue %u on", |
| 1794 | tx_queue_id); |
| 1795 | return err; |
| 1796 | } |
| 1797 | dev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED; |
| 1798 | |
| 1799 | return 0; |
| 1800 | } |
| 1801 | |
| 1802 | int |
| 1803 | i40e_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) |
no test coverage detected