can: kvaser_pciefd: Add function to set skb hwtstamps
[ Upstream commit 2d55e9f9b4427e1ad59b974f2267767aac3788d3 ] Add new function, kvaser_pciefd_set_skb_timestamp(), to set skb hwtstamps. Signed-off-by: Jimmy Assarsson <extja@kvaser.com> Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Link: https://lore.kernel.org/all/20230529134248.752036-4-extja@kvaser.com Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Stable-dep-of: ec681b91befa ("can: kvaser_pciefd: Set hardware timestamp on transmitted packets") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
787b404209
commit
70ace9ba20
@ -538,6 +538,13 @@ static int kvaser_pciefd_set_tx_irq(struct kvaser_pciefd_can *can)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void kvaser_pciefd_set_skb_timestamp(const struct kvaser_pciefd *pcie,
|
||||
struct sk_buff *skb, u64 timestamp)
|
||||
{
|
||||
skb_hwtstamps(skb)->hwtstamp =
|
||||
ns_to_ktime(div_u64(timestamp * 1000, pcie->freq_to_ticks_div));
|
||||
}
|
||||
|
||||
static void kvaser_pciefd_setup_controller(struct kvaser_pciefd_can *can)
|
||||
{
|
||||
u32 mode;
|
||||
@ -1171,7 +1178,6 @@ static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie,
|
||||
struct canfd_frame *cf;
|
||||
struct can_priv *priv;
|
||||
struct net_device_stats *stats;
|
||||
struct skb_shared_hwtstamps *shhwtstamps;
|
||||
u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7;
|
||||
|
||||
if (ch_id >= pcie->nr_channels)
|
||||
@ -1214,12 +1220,7 @@ static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie,
|
||||
stats->rx_bytes += cf->len;
|
||||
}
|
||||
stats->rx_packets++;
|
||||
|
||||
shhwtstamps = skb_hwtstamps(skb);
|
||||
|
||||
shhwtstamps->hwtstamp =
|
||||
ns_to_ktime(div_u64(p->timestamp * 1000,
|
||||
pcie->freq_to_ticks_div));
|
||||
kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
|
||||
|
||||
return netif_rx(skb);
|
||||
}
|
||||
@ -1282,7 +1283,6 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can,
|
||||
struct net_device *ndev = can->can.dev;
|
||||
struct sk_buff *skb;
|
||||
struct can_frame *cf = NULL;
|
||||
struct skb_shared_hwtstamps *shhwtstamps;
|
||||
struct net_device_stats *stats = &ndev->stats;
|
||||
|
||||
old_state = can->can.state;
|
||||
@ -1323,10 +1323,7 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
shhwtstamps = skb_hwtstamps(skb);
|
||||
shhwtstamps->hwtstamp =
|
||||
ns_to_ktime(div_u64(p->timestamp * 1000,
|
||||
can->kv_pcie->freq_to_ticks_div));
|
||||
kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp);
|
||||
cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_CNT;
|
||||
|
||||
cf->data[6] = bec.txerr;
|
||||
@ -1374,7 +1371,6 @@ static int kvaser_pciefd_handle_status_resp(struct kvaser_pciefd_can *can,
|
||||
struct net_device *ndev = can->can.dev;
|
||||
struct sk_buff *skb;
|
||||
struct can_frame *cf;
|
||||
struct skb_shared_hwtstamps *shhwtstamps;
|
||||
|
||||
skb = alloc_can_err_skb(ndev, &cf);
|
||||
if (!skb) {
|
||||
@ -1394,10 +1390,7 @@ static int kvaser_pciefd_handle_status_resp(struct kvaser_pciefd_can *can,
|
||||
cf->can_id |= CAN_ERR_RESTARTED;
|
||||
}
|
||||
|
||||
shhwtstamps = skb_hwtstamps(skb);
|
||||
shhwtstamps->hwtstamp =
|
||||
ns_to_ktime(div_u64(p->timestamp * 1000,
|
||||
can->kv_pcie->freq_to_ticks_div));
|
||||
kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp);
|
||||
|
||||
cf->data[6] = bec.txerr;
|
||||
cf->data[7] = bec.rxerr;
|
||||
|
Loading…
Reference in New Issue
Block a user