| 692 | } |
| 693 | |
| 694 | int |
| 695 | idpf_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) |
| 696 | { |
| 697 | struct idpf_vport *vport = dev->data->dev_private; |
| 698 | struct idpf_tx_queue *txq; |
| 699 | int err; |
| 700 | |
| 701 | if (tx_queue_id >= dev->data->nb_tx_queues) |
| 702 | return -EINVAL; |
| 703 | |
| 704 | err = idpf_vc_queue_switch(vport, tx_queue_id, false, false); |
| 705 | if (err != 0) { |
| 706 | PMD_DRV_LOG(ERR, "Failed to switch TX queue %u off", |
| 707 | tx_queue_id); |
| 708 | return err; |
| 709 | } |
| 710 | |
| 711 | txq = dev->data->tx_queues[tx_queue_id]; |
| 712 | txq->q_started = false; |
| 713 | txq->ops->release_mbufs(txq); |
| 714 | if (vport->txq_model == VIRTCHNL2_QUEUE_MODEL_SINGLE) { |
| 715 | idpf_qc_single_tx_queue_reset(txq); |
| 716 | } else { |
| 717 | idpf_qc_split_tx_descq_reset(txq); |
| 718 | idpf_qc_split_tx_complq_reset(txq->complq); |
| 719 | } |
| 720 | dev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STOPPED; |
| 721 | |
| 722 | return 0; |
| 723 | } |
| 724 | |
| 725 | void |
| 726 | idpf_dev_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid) |
no test coverage detected