}
static void
-qede_assign_rxtx_handlers(struct rte_eth_dev *dev)
+qede_assign_rxtx_handlers(struct rte_eth_dev *dev, bool is_dummy)
{
uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
struct qede_dev *qdev = dev->data->dev_private;
struct ecore_dev *edev = &qdev->edev;
bool use_tx_offload = false;
+ if (is_dummy) {
+ dev->rx_pkt_burst = qede_rxtx_pkts_dummy;
+ dev->tx_pkt_burst = qede_rxtx_pkts_dummy;
+ return;
+ }
+
if (ECORE_IS_CMT(edev)) {
dev->rx_pkt_burst = qede_recv_pkts_cmt;
dev->tx_pkt_burst = qede_xmit_pkts_cmt;
/* Start/resume traffic */
qede_fastpath_start(edev);
- qede_assign_rxtx_handlers(eth_dev);
+ /* Assign I/O handlers */
+ qede_assign_rxtx_handlers(eth_dev, false);
+
DP_INFO(edev, "Device started\n");
return 0;
/* Update link status */
qede_link_update(eth_dev, 0);
+ /* Replace I/O functions with dummy ones. It cannot
+ * be set to NULL because rte_eth_rx_burst() doesn't check for NULL.
+ */
+ qede_assign_rxtx_handlers(eth_dev, true);
+
/* Disable vport */
if (qede_activate_vport(eth_dev, false))
return;
dev->data->min_rx_buf_size);
return -EINVAL;
}
- /* Temporarily replace I/O functions with dummy ones. It cannot
- * be set to NULL because rte_eth_rx_burst() doesn't check for NULL.
- */
- dev->rx_pkt_burst = qede_rxtx_pkts_dummy;
- dev->tx_pkt_burst = qede_rxtx_pkts_dummy;
if (dev->data->dev_started) {
dev->data->dev_started = 0;
qede_dev_stop(dev);
/* update max frame size */
dev->data->dev_conf.rxmode.max_rx_pkt_len = max_rx_pkt_len;
- /* Reassign back */
- qede_assign_rxtx_handlers(dev);
- if (ECORE_IS_CMT(edev)) {
- dev->rx_pkt_burst = qede_recv_pkts_cmt;
- dev->tx_pkt_burst = qede_xmit_pkts_cmt;
- } else {
- dev->rx_pkt_burst = qede_recv_pkts;
- dev->tx_pkt_burst = qede_xmit_pkts;
- }
return 0;
}
strncpy((char *)params.name, QEDE_PMD_VER_PREFIX,
QEDE_PMD_DRV_VER_STR_SIZE);
- qede_assign_rxtx_handlers(eth_dev);
+ qede_assign_rxtx_handlers(eth_dev, true);
eth_dev->tx_pkt_prepare = qede_xmit_prep_pkts;
/* For CMT mode device do periodic polling for slowpath events.