summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2023-09-28 11:15:15 +0200
committerMarc Kleine-Budde <mkl@pengutronix.de>2023-10-05 21:47:39 +0200
commitdd94a2f1f2f848a2534c4b0115db752a55b7eb03 (patch)
tree9dc0f5be26358c8520380e70e5413eaad50222b9
parent3db6154e44dba8626cd6e31e15bd29d1c3861ca8 (diff)
can: at91_can: at91_alloc_can_err_skb() introduce new function
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>
-rw-r--r--drivers/net/can/at91_can.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
index d5e1d1b2cdd1..ca62aa027e5f 100644
--- a/drivers/net/can/at91_can.c
+++ b/drivers/net/can/at91_can.c
@@ -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