]> git.itanic.dy.fi Git - linux-stable/commitdiff
can: at91_can: at91_alloc_can_err_skb() introduce new function
authorMarc Kleine-Budde <mkl@pengutronix.de>
Thu, 28 Sep 2023 09:15:15 +0000 (11:15 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Thu, 5 Oct 2023 19:47:39 +0000 (21:47 +0200)
This is a preparation patch to convert the driver to make use of the
rx-offload helper. With rx-offload the received CAN frames are sorted
by their timestamp. Regular CAN RX'ed and TX'ed CAN frames are
timestamped by the hardware. Error events are not.

Introduce a new function at91_alloc_can_err_skb() the allocates an
error SKB and reads the current timestamp from the controller.

Link: https://lore.kernel.org/all/20231005-at91_can-rx_offload-v2-26-9987d53600e0@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/at91_can.c

index d5e1d1b2cdd1cbab61e36b3b0b442bdd48d29b26..ca62aa027e5f21fc16ddd27461af2f83c697361a 100644 (file)
@@ -576,6 +576,22 @@ static inline void at91_activate_rx_mb(const struct at91_priv *priv,
        at91_write(priv, AT91_TCR, mask);
 }
 
+static inline u32 at91_get_timestamp(const struct at91_priv *priv)
+{
+       return at91_read(priv, AT91_TIM);
+}
+
+static inline struct sk_buff *
+at91_alloc_can_err_skb(struct net_device *dev,
+                      struct can_frame **cf, u32 *timestamp)
+{
+       const struct at91_priv *priv = netdev_priv(dev);
+
+       *timestamp = at91_get_timestamp(priv);
+
+       return alloc_can_err_skb(dev, cf);
+}
+
 /**
  * at91_rx_overflow_err - send error frame due to rx overflow
  * @dev: net device