]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
can: netlink: add can_data_bittiming_get_size()
authorVincent Mailhol <mailhol@kernel.org>
Tue, 23 Sep 2025 06:58:38 +0000 (15:58 +0900)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 24 Sep 2025 15:09:46 +0000 (17:09 +0200)
Add the can_data_bittiming_get_size() function to factorise the logic
to retrieve the size of below data bittiming parameters:

  - data_bittiming
  - data_bittiming_const
  - data_bitrate_const
  - tdc parameters

This function will be reused later on for CAN XL.

Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
Link: https://patch.msgid.link/20250923-canxl-netlink-prep-v4-13-e720d28f66fe@kernel.org
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/dev/netlink.c

index 3c0675877f5ef84a2b84d5852a0e91d23b164eeb..5d2b524daea90442e56a1b24e7c32190a84ed934 100644 (file)
@@ -504,6 +504,23 @@ static size_t can_tdc_get_size(struct data_bittiming_params *dbt_params,
        return size;
 }
 
+static size_t can_data_bittiming_get_size(struct data_bittiming_params *dbt_params,
+                                         u32 tdc_flags)
+{
+       size_t size = 0;
+
+       if (dbt_params->data_bittiming.bitrate)         /* IFLA_CAN_DATA_BITTIMING */
+               size += nla_total_size(sizeof(dbt_params->data_bittiming));
+       if (dbt_params->data_bittiming_const)           /* IFLA_CAN_DATA_BITTIMING_CONST */
+               size += nla_total_size(sizeof(*dbt_params->data_bittiming_const));
+       if (dbt_params->data_bitrate_const)             /* IFLA_CAN_DATA_BITRATE_CONST */
+               size += nla_total_size(sizeof(*dbt_params->data_bitrate_const) *
+                                      dbt_params->data_bitrate_const_cnt);
+       size += can_tdc_get_size(dbt_params, tdc_flags);/* IFLA_CAN_TDC */
+
+       return size;
+}
+
 static size_t can_ctrlmode_ext_get_size(void)
 {
        return nla_total_size(0) +              /* nest IFLA_CAN_CTRLMODE_EXT */
@@ -525,10 +542,6 @@ static size_t can_get_size(const struct net_device *dev)
        size += nla_total_size(sizeof(u32));                    /* IFLA_CAN_RESTART_MS */
        if (priv->do_get_berr_counter)                          /* IFLA_CAN_BERR_COUNTER */
                size += nla_total_size(sizeof(struct can_berr_counter));
-       if (priv->fd.data_bittiming.bitrate)                    /* IFLA_CAN_DATA_BITTIMING */
-               size += nla_total_size(sizeof(struct can_bittiming));
-       if (priv->fd.data_bittiming_const)                      /* IFLA_CAN_DATA_BITTIMING_CONST */
-               size += nla_total_size(sizeof(struct can_bittiming_const));
        if (priv->termination_const) {
                size += nla_total_size(sizeof(priv->termination));              /* IFLA_CAN_TERMINATION */
                size += nla_total_size(sizeof(*priv->termination_const) *       /* IFLA_CAN_TERMINATION_CONST */
@@ -537,14 +550,12 @@ static size_t can_get_size(const struct net_device *dev)
        if (priv->bitrate_const)                                /* IFLA_CAN_BITRATE_CONST */
                size += nla_total_size(sizeof(*priv->bitrate_const) *
                                       priv->bitrate_const_cnt);
-       if (priv->fd.data_bitrate_const)                        /* IFLA_CAN_DATA_BITRATE_CONST */
-               size += nla_total_size(sizeof(*priv->fd.data_bitrate_const) *
-                                      priv->fd.data_bitrate_const_cnt);
        size += sizeof(priv->bitrate_max);                      /* IFLA_CAN_BITRATE_MAX */
-       size += can_tdc_get_size(&priv->fd,                     /* IFLA_CAN_TDC */
-                                priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK);
        size += can_ctrlmode_ext_get_size();                    /* IFLA_CAN_CTRLMODE_EXT */
 
+       size += can_data_bittiming_get_size(&priv->fd,
+                                           priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK);
+
        return size;
 }