net: dpaa2-eth: add support to query the number of queues through ethtool
authorRobert-Ionut Alexa <robert-ionut.alexa@nxp.com>
Tue, 18 Oct 2022 14:18:50 +0000 (17:18 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Oct 2022 08:22:11 +0000 (09:22 +0100)
The .get_channels() ethtool_ops callback is implemented and exports the
number of queues: Rx, Tx, Tx conf and Rx err.
The last two ones, Tx confirmation and Rx err, are counted as 'others'.

The .set_channels() callback is not implemented since the DPAA2
software/firmware architecture does not allow the dynamic
reconfiguration of the number of queues.

Signed-off-by: Robert-Ionut Alexa <robert-ionut.alexa@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c

index eea7d7a..97ec2ad 100644 (file)
@@ -1,7 +1,6 @@
 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
 /* Copyright 2014-2016 Freescale Semiconductor Inc.
- * Copyright 2016 NXP
- * Copyright 2020 NXP
+ * Copyright 2016-2022 NXP
  */
 
 #include <linux/net_tstamp.h>
@@ -876,6 +875,29 @@ restore_rx_usecs:
        return err;
 }
 
+static void dpaa2_eth_get_channels(struct net_device *net_dev,
+                                  struct ethtool_channels *channels)
+{
+       struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
+       int queue_count = dpaa2_eth_queue_count(priv);
+
+       channels->max_rx = queue_count;
+       channels->max_tx = queue_count;
+       channels->rx_count = queue_count;
+       channels->tx_count = queue_count;
+
+       /* Tx confirmation and Rx error */
+       channels->max_other = queue_count + 1;
+       channels->max_combined = channels->max_rx +
+                                channels->max_tx +
+                                channels->max_other;
+       /* Tx conf and Rx err */
+       channels->other_count = queue_count + 1;
+       channels->combined_count = channels->rx_count +
+                                  channels->tx_count +
+                                  channels->other_count;
+}
+
 const struct ethtool_ops dpaa2_ethtool_ops = {
        .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS |
                                     ETHTOOL_COALESCE_USE_ADAPTIVE_RX,
@@ -896,4 +918,5 @@ const struct ethtool_ops dpaa2_ethtool_ops = {
        .set_tunable = dpaa2_eth_set_tunable,
        .get_coalesce = dpaa2_eth_get_coalesce,
        .set_coalesce = dpaa2_eth_set_coalesce,
+       .get_channels = dpaa2_eth_get_channels,
 };