Re: [PATCH v2 10/17] can: bittiming: factor out can_sjw_set_default() and can_sjw_check()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu. 2 Feb. 2023 at 20:09, Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> wrote:
> Factor out the functionality of assigning a SJW default value into
> can_sjw_set_default() and the checking the SJW limits into
> can_sjw_check().
>
> This functions will be improved and called from a different function
> in the following patches.
>
> Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
> ---
>  drivers/net/can/dev/bittiming.c | 30 ++++++++++++++++++++++++++----
>  include/linux/can/bittiming.h   |  5 +++++
>  2 files changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/can/dev/bittiming.c b/drivers/net/can/dev/bittiming.c
> index 0b0b8c767c5b..101de1b3bf30 100644
> --- a/drivers/net/can/dev/bittiming.c
> +++ b/drivers/net/can/dev/bittiming.c
> @@ -6,6 +6,24 @@
>
>  #include <linux/can/dev.h>
>
> +void can_sjw_set_default(struct can_bittiming *bt)
> +{
> +       if (bt->sjw)
> +               return;
> +
> +       /* If user space provides no sjw, use 1 as default */
> +       bt->sjw = 1;
> +}
> +
> +int can_sjw_check(const struct net_device *dev, const struct can_bittiming *bt,
> +                 const struct can_bittiming_const *btc, struct netlink_ext_ack *extack)
> +{
> +       if (bt->sjw > btc->sjw_max)
> +               return -ERANGE;

You return -ERANGE here but then replace it by -EINVAL in patch #12.
Better to directly return -EINVAL here.

> +       return 0;
> +}
> +
>  /* Checks the validity of the specified bit-timing parameters prop_seg,
>   * phase_seg1, phase_seg2 and sjw and tries to determine the bitrate
>   * prescaler value brp. You can find more information in the header
> @@ -18,12 +36,16 @@ static int can_fixup_bittiming(const struct net_device *dev, struct can_bittimin
>         const struct can_priv *priv = netdev_priv(dev);
>         unsigned int tseg1;
>         u64 brp64;
> +       int err;
> +
> +       can_sjw_set_default(bt);
> +
> +       err = can_sjw_check(dev, bt, btc, extack);
> +       if (err)
> +               return err;
>
>         tseg1 = bt->prop_seg + bt->phase_seg1;
> -       if (!bt->sjw)
> -               bt->sjw = 1;
> -       if (bt->sjw > btc->sjw_max ||
> -           tseg1 < btc->tseg1_min || tseg1 > btc->tseg1_max ||
> +       if (tseg1 < btc->tseg1_min || tseg1 > btc->tseg1_max ||
>             bt->phase_seg2 < btc->tseg2_min || bt->phase_seg2 > btc->tseg2_max)
>                 return -ERANGE;
>
> diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h
> index 53d693ae5397..6cb2ae308e3f 100644
> --- a/include/linux/can/bittiming.h
> +++ b/include/linux/can/bittiming.h
> @@ -138,6 +138,11 @@ can_calc_tdco(struct can_tdc *tdc, const struct can_tdc_const *tdc_const,
>  }
>  #endif /* CONFIG_CAN_CALC_BITTIMING */
>
> +void can_sjw_set_default(struct can_bittiming *bt);
> +
> +int can_sjw_check(const struct net_device *dev, const struct can_bittiming *bt,
> +                 const struct can_bittiming_const *btc, struct netlink_ext_ack *extack);
> +
>  int can_get_bittiming(const struct net_device *dev, struct can_bittiming *bt,
>                       const struct can_bittiming_const *btc,
>                       const u32 *bitrate_const,



[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux