Commit 14e493dd authored by Robert-Ionut Alexa's avatar Robert-Ionut Alexa Committed by David S. Miller
Browse files

net: dpaa2-eth: add support to query the number of queues through ethtool



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: default avatarRobert-Ionut Alexa <robert-ionut.alexa@nxp.com>
Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3bd5549b
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
// 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 @@ static int dpaa2_eth_set_coalesce(struct net_device *dev,
	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,
};