linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vincent Mailhol <mailhol@kernel.org>
To: Marc Kleine-Budde <mkl@pengutronix.de>,
	 Oliver Hartkopp <socketcan@hartkopp.net>
Cc: "Vincent Mailhol" <mailhol@kernel.org>,
	"Stéphane Grosjean" <stephane.grosjean@hms-networks.com>,
	"Robert Nawrath" <mbro1689@gmail.com>,
	"Minh Le" <minh.le.aj@renesas.com>,
	"Duy Nguyen" <duy.nguyen.rh@renesas.com>,
	linux-can@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v4 17/20] can: netlink: make can_tdc_fill_info() FD agnostic
Date: Tue, 23 Sep 2025 15:58:42 +0900	[thread overview]
Message-ID: <20250923-canxl-netlink-prep-v4-17-e720d28f66fe@kernel.org> (raw)
In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org>

can_tdc_fill_info() depends on some variables which are specific to CAN
FD. Move these to the function parameters list so that, later on, this
function can be reused for the CAN XL TDC.

Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
Changelog:

v1 -> v2:

  - Change WARN_ON(1) into return -EOPNOTSUPP to suppress a gcc
    warning.
    Link: https://lore.kernel.org/linux-can/202509050541.1FKRbqOi-lkp@intel.com/

RFC -> v1:

 - Just pass the IFLA index instead of passing each argument
   individually. Instead, derive these as local variables depending on
   whethe the IFLA index is IFLA_CAN_TDC or IFLA_CAN_XL_TDC.
---
 drivers/net/can/dev/netlink.c | 35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c
index 9794f283ed588e37fbc9a189cb54c6965960d436..99038e0fb25f4e05cd181b188d5aeea25de8f77e 100644
--- a/drivers/net/can/dev/netlink.c
+++ b/drivers/net/can/dev/netlink.c
@@ -585,21 +585,34 @@ static int can_bitrate_const_fill_info(struct sk_buff *skb,
 			sizeof(*bitrate_const) * cnt, bitrate_const);
 }
 
-static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device *dev)
+static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device *dev,
+			     int ifla_can_tdc)
 {
-	struct nlattr *nest;
 	struct can_priv *priv = netdev_priv(dev);
-	struct can_tdc *tdc = &priv->fd.tdc;
-	const struct can_tdc_const *tdc_const = priv->fd.tdc_const;
+	struct data_bittiming_params *dbt_params;
+	const struct can_tdc_const *tdc_const;
+	struct can_tdc *tdc;
+	struct nlattr *nest;
+	bool tdc_is_enabled, tdc_manual;
+
+	if (ifla_can_tdc == IFLA_CAN_TDC) {
+		dbt_params = &priv->fd;
+		tdc_is_enabled = can_fd_tdc_is_enabled(priv);
+		tdc_manual = priv->ctrlmode & CAN_CTRLMODE_TDC_MANUAL;
+	} else {
+		return -EOPNOTSUPP; /* Place holder for CAN XL */
+	}
+	tdc_const = dbt_params->tdc_const;
+	tdc = &dbt_params->tdc;
 
 	if (!tdc_const)
 		return 0;
 
-	nest = nla_nest_start(skb, IFLA_CAN_TDC);
+	nest = nla_nest_start(skb, ifla_can_tdc);
 	if (!nest)
 		return -EMSGSIZE;
 
-	if (priv->ctrlmode_supported & CAN_CTRLMODE_TDC_MANUAL &&
+	if (tdc_manual &&
 	    (nla_put_u32(skb, IFLA_CAN_TDC_TDCV_MIN, tdc_const->tdcv_min) ||
 	     nla_put_u32(skb, IFLA_CAN_TDC_TDCV_MAX, tdc_const->tdcv_max)))
 		goto err_cancel;
@@ -611,15 +624,15 @@ static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device *dev)
 	     nla_put_u32(skb, IFLA_CAN_TDC_TDCF_MAX, tdc_const->tdcf_max)))
 		goto err_cancel;
 
-	if (can_fd_tdc_is_enabled(priv)) {
+	if (tdc_is_enabled) {
 		u32 tdcv;
 		int err = -EINVAL;
 
-		if (priv->ctrlmode & CAN_CTRLMODE_TDC_MANUAL) {
+		if (tdc_manual) {
 			tdcv = tdc->tdcv;
 			err = 0;
-		} else if (priv->fd.do_get_auto_tdcv) {
-			err = priv->fd.do_get_auto_tdcv(dev, &tdcv);
+		} else if (dbt_params->do_get_auto_tdcv) {
+			err = dbt_params->do_get_auto_tdcv(dev, &tdcv);
 		}
 		if (!err && nla_put_u32(skb, IFLA_CAN_TDC_TDCV, tdcv))
 			goto err_cancel;
@@ -707,7 +720,7 @@ static int can_fill_info(struct sk_buff *skb, const struct net_device *dev)
 		     sizeof(priv->bitrate_max),
 		     &priv->bitrate_max)) ||
 
-	    can_tdc_fill_info(skb, dev) ||
+	    can_tdc_fill_info(skb, dev, IFLA_CAN_TDC) ||
 
 	    can_ctrlmode_ext_fill_info(skb, priv)
 	    )

-- 
2.49.1


  parent reply	other threads:[~2025-09-23  7:00 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-23  6:58 [PATCH v4 00/20] can: netlink: preparation before introduction of CAN XL step 3/3 Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 01/20] can: dev: move struct data_bittiming_params to linux/can/bittiming.h Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 02/20] can: dev: make can_get_relative_tdco() FD agnostic and move it to bittiming.h Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 03/20] can: netlink: document which symbols are FD specific Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 04/20] can: netlink: refactor can_validate_bittiming() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 05/20] can: netlink: add can_validate_tdc() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 06/20] can: netlink: add can_validate_databittiming() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 07/20] can: netlink: refactor CAN_CTRLMODE_TDC_{AUTO,MANUAL} flag reset logic Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 08/20] can: netlink: remove useless check in can_tdc_changelink() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 09/20] can: netlink: make can_tdc_changelink() FD agnostic Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 10/20] can: netlink: add can_dtb_changelink() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 11/20] can: netlink: add can_ctrlmode_changelink() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 12/20] can: netlink: make can_tdc_get_size() FD agnostic Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 13/20] can: netlink: add can_data_bittiming_get_size() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 14/20] can: netlink: add can_bittiming_fill_info() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 15/20] can: netlink: add can_bittiming_const_fill_info() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 16/20] can: netlink: add can_bitrate_const_fill_info() Vincent Mailhol
2025-09-23  6:58 ` Vincent Mailhol [this message]
2025-09-23  6:58 ` [PATCH v4 18/20] can: calc_bittiming: make can_calc_tdco() FD agnostic Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 19/20] can: dev: add can_get_ctrlmode_str() Vincent Mailhol
2025-09-23  6:58 ` [PATCH v4 20/20] can: netlink: add userland error messages Vincent Mailhol
2025-09-23  9:09 ` [PATCH v4 00/20] can: netlink: preparation before introduction of CAN XL step 3/3 Marc Kleine-Budde

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=20250923-canxl-netlink-prep-v4-17-e720d28f66fe@kernel.org \
    --to=mailhol@kernel.org \
    --cc=duy.nguyen.rh@renesas.com \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mbro1689@gmail.com \
    --cc=minh.le.aj@renesas.com \
    --cc=mkl@pengutronix.de \
    --cc=socketcan@hartkopp.net \
    --cc=stephane.grosjean@hms-networks.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).