All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Kleine-Budde <mkl@pengutronix.de>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, kuba@kernel.org, linux-can@vger.kernel.org,
	kernel@pengutronix.de, Dario Binacchi <dariobin@libero.it>,
	Andrew Lunn <andrew@lunn.ch>,
	Marc Kleine-Budde <mkl@pengutronix.de>
Subject: [net-next 17/21] can: c_can: add ethtool support
Date: Thu, 27 May 2021 10:45:28 +0200	[thread overview]
Message-ID: <20210527084532.1384031-18-mkl@pengutronix.de> (raw)
In-Reply-To: <20210527084532.1384031-1-mkl@pengutronix.de>

From: Dario Binacchi <dariobin@libero.it>

With commit 132f2d45fb23 ("can: c_can: add support to 64 message
objects") the number of message objects used for reception /
transmission depends on FIFO size.

The ethtools API support allows you to retrieve this info. Driver info
has been added too.

Link: https://lore.kernel.org/r/20210514165549.14365-2-dariobin@libero.it
Signed-off-by: Dario Binacchi <dariobin@libero.it>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
 drivers/net/can/c_can/Makefile                |  5 +++
 drivers/net/can/c_can/c_can.h                 |  2 +
 drivers/net/can/c_can/c_can_ethtool.c         | 43 +++++++++++++++++++
 .../net/can/c_can/{c_can.c => c_can_main.c}   |  1 +
 4 files changed, 51 insertions(+)
 create mode 100644 drivers/net/can/c_can/c_can_ethtool.c
 rename drivers/net/can/c_can/{c_can.c => c_can_main.c} (99%)

diff --git a/drivers/net/can/c_can/Makefile b/drivers/net/can/c_can/Makefile
index e6a94c948531..6fa3b2b9e4b9 100644
--- a/drivers/net/can/c_can/Makefile
+++ b/drivers/net/can/c_can/Makefile
@@ -4,5 +4,10 @@
 #
 
 obj-$(CONFIG_CAN_C_CAN) += c_can.o
+
+c_can-objs :=
+c_can-objs += c_can_ethtool.o
+c_can-objs += c_can_main.o
+
 obj-$(CONFIG_CAN_C_CAN_PLATFORM) += c_can_platform.o
 obj-$(CONFIG_CAN_C_CAN_PCI) += c_can_pci.o
diff --git a/drivers/net/can/c_can/c_can.h b/drivers/net/can/c_can/c_can.h
index 517845c4571e..4247ff80a29c 100644
--- a/drivers/net/can/c_can/c_can.h
+++ b/drivers/net/can/c_can/c_can.h
@@ -218,4 +218,6 @@ int c_can_power_up(struct net_device *dev);
 int c_can_power_down(struct net_device *dev);
 #endif
 
+void c_can_set_ethtool_ops(struct net_device *dev);
+
 #endif /* C_CAN_H */
diff --git a/drivers/net/can/c_can/c_can_ethtool.c b/drivers/net/can/c_can/c_can_ethtool.c
new file mode 100644
index 000000000000..cd5f07fca2a5
--- /dev/null
+++ b/drivers/net/can/c_can/c_can_ethtool.c
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright 2021, Dario Binacchi <dariobin@libero.it>
+ */
+
+#include <linux/ethtool.h>
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <linux/netdevice.h>
+#include <linux/can/dev.h>
+
+#include "c_can.h"
+
+static void c_can_get_drvinfo(struct net_device *netdev,
+			      struct ethtool_drvinfo *info)
+{
+	struct c_can_priv *priv = netdev_priv(netdev);
+	struct platform_device *pdev = to_platform_device(priv->device);
+
+	strscpy(info->driver, "c_can", sizeof(info->driver));
+	strscpy(info->bus_info, pdev->name, sizeof(info->bus_info));
+}
+
+static void c_can_get_ringparam(struct net_device *netdev,
+				struct ethtool_ringparam *ring)
+{
+	struct c_can_priv *priv = netdev_priv(netdev);
+
+	ring->rx_max_pending = priv->msg_obj_num;
+	ring->tx_max_pending = priv->msg_obj_num;
+	ring->rx_pending = priv->msg_obj_rx_num;
+	ring->tx_pending = priv->msg_obj_tx_num;
+}
+
+static const struct ethtool_ops c_can_ethtool_ops = {
+	.get_drvinfo = c_can_get_drvinfo,
+	.get_ringparam = c_can_get_ringparam,
+};
+
+void c_can_set_ethtool_ops(struct net_device *netdev)
+{
+	netdev->ethtool_ops = &c_can_ethtool_ops;
+}
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can_main.c
similarity index 99%
rename from drivers/net/can/c_can/c_can.c
rename to drivers/net/can/c_can/c_can_main.c
index 1fa47968c2ec..7588f70ca0fe 100644
--- a/drivers/net/can/c_can/c_can.c
+++ b/drivers/net/can/c_can/c_can_main.c
@@ -1334,6 +1334,7 @@ int register_c_can_dev(struct net_device *dev)
 
 	dev->flags |= IFF_ECHO;	/* we support local echo */
 	dev->netdev_ops = &c_can_netdev_ops;
+	c_can_set_ethtool_ops(dev);
 
 	err = register_candev(dev);
 	if (!err)
-- 
2.30.2



  parent reply	other threads:[~2021-05-27  8:48 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-27  8:45 pull-request: can-next 2021-05-27 Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 01/21] dt-bindings: can: rcar_can: Convert to json-schema Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 02/21] dt-bindings: can: rcar_canfd: " Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 03/21] can: uapi: update CAN-FD frame description Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 04/21] can: uapi: introduce CANFD_FDF flag for mixed content in struct canfd_frame Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 05/21] can: proc: remove unnecessary variables Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 06/21] can: isotp: change error format from decimal to symbolic error names Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 07/21] can: isotp: add symbolic error message to isotp_module_init() Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 08/21] can: isotp: Add error message if txqueuelen is too small Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 09/21] can: softing: Remove redundant variable ptr Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 10/21] can: hi311x: hi3110_can_probe(): silence clang warning Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 11/21] can: mcp251x: mcp251x_can_probe(): " Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 12/21] can: mcp251xfd: " Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 13/21] can: at91_can: " Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 14/21] can: kvaser_usb: Rename define USB_HYBRID_{,PRO_}CANLIN_PRODUCT_ID Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 15/21] can: kvaser_usb: Add new Kvaser hydra devices Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 16/21] can: c_can: remove unused variable struct c_can_priv::rxmasked Marc Kleine-Budde
2021-05-27  8:45 ` Marc Kleine-Budde [this message]
2021-05-27  8:45 ` [net-next 18/21] can: m_can: use bits.h macros for all regmasks Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 19/21] can: m_can: clean up CCCR reg defs, order by revs Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 20/21] can: m_can: make TXESC, RXESC config more explicit Marc Kleine-Budde
2021-05-27  8:45 ` [net-next 21/21] can: m_can: fix whitespace in a few comments Marc Kleine-Budde
2021-05-27 21:50 ` pull-request: can-next 2021-05-27 patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210527084532.1384031-18-mkl@pengutronix.de \
    --to=mkl@pengutronix.de \
    --cc=andrew@lunn.ch \
    --cc=dariobin@libero.it \
    --cc=davem@davemloft.net \
    --cc=kernel@pengutronix.de \
    --cc=kuba@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.