aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKurt Van Dijck <dev.kurt@vandijck-laurijssen.be>2019-10-09 11:48:35 +0200
committerMarc Kleine-Budde <mkl@pengutronix.de>2019-11-05 21:28:03 +0100
commita11469e9e8b072378f492903205f5d46821111d4 (patch)
treed5240aff6fbe9e37e653aad0170b8aeb8246ce06
parentbc0166d9c5c892626213b37ab19fcba69ac34fef (diff)
downloadlinux-can-next-c_can.tar.gz
can: c_can: use rx-offload for echo skb tooc_can
Signed-off-by: Kurt Van Dijck <dev.kurt@vandijck-laurijssen.be> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
-rw-r--r--drivers/net/can/c_can/c_can.c8
-rw-r--r--drivers/net/can/c_can/c_can.h1
2 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
index 8f68d51a7b882f..0455de18b1adee 100644
--- a/drivers/net/can/c_can/c_can.c
+++ b/drivers/net/can/c_can/c_can.c
@@ -480,7 +480,6 @@ static netdev_tx_t c_can_start_xmit(struct sk_buff *skb,
* transmit as we might race against do_tx().
*/
c_can_setup_tx_object(dev, IF_TX, frame, idx);
- priv->dlc[idx] = frame->can_dlc;
can_put_echo_skb(skb, dev, idx);
/* Update the active bits */
@@ -705,6 +704,8 @@ static void c_can_do_tx(struct net_device *dev)
struct c_can_priv *priv = netdev_priv(dev);
struct net_device_stats *stats = &dev->stats;
u32 idx, obj, pkts = 0, bytes = 0, pend, clr;
+ struct sk_buff *skb;
+ u8 len;
clr = pend = priv->read_reg(priv, C_CAN_INTPND2_REG);
@@ -713,8 +714,9 @@ static void c_can_do_tx(struct net_device *dev)
pend &= ~(1 << idx);
obj = idx + C_CAN_MSG_OBJ_TX_FIRST;
c_can_inval_tx_object(dev, IF_RX, obj);
- can_get_echo_skb(dev, idx);
- bytes += priv->dlc[idx];
+ skb = __can_get_echo_skb(dev, idx, &len);
+ can_rx_offload_irq_receive_skb(&priv->offload, skb);
+ bytes += len;
pkts++;
}
diff --git a/drivers/net/can/c_can/c_can.h b/drivers/net/can/c_can/c_can.h
index 770e944df84b44..ebe0676aa7a038 100644
--- a/drivers/net/can/c_can/c_can.h
+++ b/drivers/net/can/c_can/c_can.h
@@ -214,7 +214,6 @@ struct c_can_priv {
void (*raminit) (const struct c_can_priv *priv, bool enable);
u32 comm_rcv_high;
u32 rxmasked;
- u32 dlc[C_CAN_MSG_OBJ_TX_NUM];
};
struct net_device *alloc_c_can_dev(void);