Skip to content

Commit e72f1ba

Browse files
vincent-mailholmarckleinebudde
authored andcommitted
can: netlink: make can_tdc_fill_info() FD agnostic
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 <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Marc Kleine-Budde <[email protected]>
1 parent d5ee934 commit e72f1ba

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

drivers/net/can/dev/netlink.c

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -585,21 +585,34 @@ static int can_bitrate_const_fill_info(struct sk_buff *skb,
585585
sizeof(*bitrate_const) * cnt, bitrate_const);
586586
}
587587

588-
static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device *dev)
588+
static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device *dev,
589+
int ifla_can_tdc)
589590
{
590-
struct nlattr *nest;
591591
struct can_priv *priv = netdev_priv(dev);
592-
struct can_tdc *tdc = &priv->fd.tdc;
593-
const struct can_tdc_const *tdc_const = priv->fd.tdc_const;
592+
struct data_bittiming_params *dbt_params;
593+
const struct can_tdc_const *tdc_const;
594+
struct can_tdc *tdc;
595+
struct nlattr *nest;
596+
bool tdc_is_enabled, tdc_manual;
597+
598+
if (ifla_can_tdc == IFLA_CAN_TDC) {
599+
dbt_params = &priv->fd;
600+
tdc_is_enabled = can_fd_tdc_is_enabled(priv);
601+
tdc_manual = priv->ctrlmode & CAN_CTRLMODE_TDC_MANUAL;
602+
} else {
603+
return -EOPNOTSUPP; /* Place holder for CAN XL */
604+
}
605+
tdc_const = dbt_params->tdc_const;
606+
tdc = &dbt_params->tdc;
594607

595608
if (!tdc_const)
596609
return 0;
597610

598-
nest = nla_nest_start(skb, IFLA_CAN_TDC);
611+
nest = nla_nest_start(skb, ifla_can_tdc);
599612
if (!nest)
600613
return -EMSGSIZE;
601614

602-
if (priv->ctrlmode_supported & CAN_CTRLMODE_TDC_MANUAL &&
615+
if (tdc_manual &&
603616
(nla_put_u32(skb, IFLA_CAN_TDC_TDCV_MIN, tdc_const->tdcv_min) ||
604617
nla_put_u32(skb, IFLA_CAN_TDC_TDCV_MAX, tdc_const->tdcv_max)))
605618
goto err_cancel;
@@ -611,15 +624,15 @@ static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device *dev)
611624
nla_put_u32(skb, IFLA_CAN_TDC_TDCF_MAX, tdc_const->tdcf_max)))
612625
goto err_cancel;
613626

614-
if (can_fd_tdc_is_enabled(priv)) {
627+
if (tdc_is_enabled) {
615628
u32 tdcv;
616629
int err = -EINVAL;
617630

618-
if (priv->ctrlmode & CAN_CTRLMODE_TDC_MANUAL) {
631+
if (tdc_manual) {
619632
tdcv = tdc->tdcv;
620633
err = 0;
621-
} else if (priv->fd.do_get_auto_tdcv) {
622-
err = priv->fd.do_get_auto_tdcv(dev, &tdcv);
634+
} else if (dbt_params->do_get_auto_tdcv) {
635+
err = dbt_params->do_get_auto_tdcv(dev, &tdcv);
623636
}
624637
if (!err && nla_put_u32(skb, IFLA_CAN_TDC_TDCV, tdcv))
625638
goto err_cancel;
@@ -707,7 +720,7 @@ static int can_fill_info(struct sk_buff *skb, const struct net_device *dev)
707720
sizeof(priv->bitrate_max),
708721
&priv->bitrate_max)) ||
709722

710-
can_tdc_fill_info(skb, dev) ||
723+
can_tdc_fill_info(skb, dev, IFLA_CAN_TDC) ||
711724

712725
can_ctrlmode_ext_fill_info(skb, priv)
713726
)

0 commit comments

Comments
 (0)