log: introduce logtype register macro
[dpdk.git] / drivers / net / qede / qede_ethdev.c
index 0b1fca9..7f5a34b 100644 (file)
 #include <rte_version.h>
 #include <rte_kvargs.h>
 
-/* Globals */
-int qede_logtype_init;
-int qede_logtype_driver;
-
 static const struct qed_eth_ops *qed_ops;
 static int qede_eth_dev_uninit(struct rte_eth_dev *eth_dev);
 static int qede_eth_dev_init(struct rte_eth_dev *eth_dev);
@@ -320,13 +316,19 @@ qede_interrupt_handler(void *param)
 }
 
 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;
@@ -619,17 +621,16 @@ qed_configure_filter_rx_mode(struct rte_eth_dev *eth_dev,
                ECORE_ACCEPT_BCAST;
 
        if (type == QED_FILTER_RX_MODE_TYPE_PROMISC) {
-               flags.rx_accept_filter |= ECORE_ACCEPT_UCAST_UNMATCHED;
+               flags.rx_accept_filter |= (ECORE_ACCEPT_UCAST_UNMATCHED |
+                                          ECORE_ACCEPT_MCAST_UNMATCHED);
                if (IS_VF(edev)) {
-                       flags.tx_accept_filter |= ECORE_ACCEPT_UCAST_UNMATCHED;
-                       DP_INFO(edev, "Enabling Tx unmatched flag for VF\n");
+                       flags.tx_accept_filter |=
+                                               (ECORE_ACCEPT_UCAST_UNMATCHED |
+                                                ECORE_ACCEPT_MCAST_UNMATCHED);
+                       DP_INFO(edev, "Enabling Tx unmatched flags for VF\n");
                }
        } else if (type == QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC) {
                flags.rx_accept_filter |= ECORE_ACCEPT_MCAST_UNMATCHED;
-       } else if (type == (QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC |
-                               QED_FILTER_RX_MODE_TYPE_PROMISC)) {
-               flags.rx_accept_filter |= ECORE_ACCEPT_UCAST_UNMATCHED |
-                       ECORE_ACCEPT_MCAST_UNMATCHED;
        }
 
        return ecore_filter_accept_cmd(edev, 0, flags, false, false,
@@ -1153,7 +1154,9 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)
        /* 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;
@@ -1175,6 +1178,11 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)
        /* 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;
@@ -1260,6 +1268,8 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
        struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
        struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
        struct rte_eth_rxmode *rxmode = &eth_dev->data->dev_conf.rxmode;
+       uint8_t num_rxqs;
+       uint8_t num_txqs;
        int ret;
 
        PMD_INIT_FUNC_TRACE(edev);
@@ -1292,12 +1302,17 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
        if (qede_check_fdir_support(eth_dev))
                return -ENOTSUP;
 
-       qede_dealloc_fp_resc(eth_dev);
-       qdev->num_tx_queues = eth_dev->data->nb_tx_queues * edev->num_hwfns;
-       qdev->num_rx_queues = eth_dev->data->nb_rx_queues * edev->num_hwfns;
-
-       if (qede_alloc_fp_resc(qdev))
-               return -ENOMEM;
+       /* Allocate/reallocate fastpath resources only for new queue config */
+       num_txqs = eth_dev->data->nb_tx_queues * edev->num_hwfns;
+       num_rxqs = eth_dev->data->nb_rx_queues * edev->num_hwfns;
+       if (qdev->num_tx_queues != num_txqs ||
+           qdev->num_rx_queues != num_rxqs) {
+               qede_dealloc_fp_resc(eth_dev);
+               qdev->num_tx_queues = num_txqs;
+               qdev->num_rx_queues = num_rxqs;
+               if (qede_alloc_fp_resc(qdev))
+                       return -ENOMEM;
+       }
 
        /* If jumbo enabled adjust MTU */
        if (rxmode->offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)
@@ -1482,16 +1497,13 @@ qede_link_update(struct rte_eth_dev *eth_dev, __rte_unused int wait_to_complete)
 
 static int qede_promiscuous_enable(struct rte_eth_dev *eth_dev)
 {
-       struct qede_dev *qdev = eth_dev->data->dev_private;
-       struct ecore_dev *edev = &qdev->edev;
-       enum qed_filter_rx_mode_type type = QED_FILTER_RX_MODE_TYPE_PROMISC;
        enum _ecore_status_t ecore_status;
+       struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
+       struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
+       enum qed_filter_rx_mode_type type = QED_FILTER_RX_MODE_TYPE_PROMISC;
 
        PMD_INIT_FUNC_TRACE(edev);
 
-       if (rte_eth_allmulticast_get(eth_dev->data->port_id) == 1)
-               type |= QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC;
-
        ecore_status = qed_configure_filter_rx_mode(eth_dev, type);
 
        return ecore_status >= ECORE_SUCCESS ? 0 : -EAGAIN;
@@ -1865,9 +1877,6 @@ static int qede_allmulticast_enable(struct rte_eth_dev *eth_dev)
            QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC;
        enum _ecore_status_t ecore_status;
 
-       if (rte_eth_promiscuous_get(eth_dev->data->port_id) == 1)
-               type |= QED_FILTER_RX_MODE_TYPE_PROMISC;
-
        ecore_status = qed_configure_filter_rx_mode(eth_dev, type);
 
        return ecore_status >= ECORE_SUCCESS ? 0 : -EAGAIN;
@@ -2323,11 +2332,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
                        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);
@@ -2366,15 +2370,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
        /* 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;
 }
 
@@ -2577,7 +2572,7 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
        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.
@@ -2864,13 +2859,5 @@ RTE_PMD_REGISTER_KMOD_DEP(net_qede, "* igb_uio | uio_pci_generic | vfio-pci");
 RTE_PMD_REGISTER_PCI(net_qede_vf, rte_qedevf_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(net_qede_vf, pci_id_qedevf_map);
 RTE_PMD_REGISTER_KMOD_DEP(net_qede_vf, "* igb_uio | vfio-pci");
-
-RTE_INIT(qede_init_log)
-{
-       qede_logtype_init = rte_log_register("pmd.net.qede.init");
-       if (qede_logtype_init >= 0)
-               rte_log_set_level(qede_logtype_init, RTE_LOG_NOTICE);
-       qede_logtype_driver = rte_log_register("pmd.net.qede.driver");
-       if (qede_logtype_driver >= 0)
-               rte_log_set_level(qede_logtype_driver, RTE_LOG_NOTICE);
-}
+RTE_LOG_REGISTER(qede_logtype_init, pmd.net.qede.init, NOTICE);
+RTE_LOG_REGISTER(qede_logtype_driver, pmd.net.qede.driver, NOTICE);