@@ -915,6 +915,8 @@ static void kvaser_usb_leaf_tx_acknowledge(const struct kvaser_usb *dev,
915
915
struct kvaser_usb_net_priv * priv ;
916
916
unsigned long flags ;
917
917
u8 channel , tid ;
918
+ struct sk_buff * skb ;
919
+ ktime_t hwtstamp = 0 ;
918
920
919
921
channel = cmd -> u .tx_acknowledge_header .channel ;
920
922
tid = cmd -> u .tx_acknowledge_header .tid ;
@@ -954,9 +956,19 @@ static void kvaser_usb_leaf_tx_acknowledge(const struct kvaser_usb *dev,
954
956
955
957
priv -> can .state = CAN_STATE_ERROR_ACTIVE ;
956
958
}
959
+ switch (dev -> driver_info -> family ) {
960
+ case KVASER_LEAF :
961
+ hwtstamp = kvaser_usb_timestamp48_to_ktime (dev -> cfg , cmd -> u .leaf .tx_ack .time );
962
+ break ;
963
+ case KVASER_USBCAN :
964
+ break ;
965
+ }
957
966
958
967
spin_lock_irqsave (& priv -> tx_contexts_lock , flags );
959
968
969
+ skb = priv -> can .echo_skb [context -> echo_index ];
970
+ if (skb )
971
+ skb_hwtstamps (skb )-> hwtstamp = hwtstamp ;
960
972
stats -> tx_packets ++ ;
961
973
stats -> tx_bytes += can_get_echo_skb (priv -> netdev ,
962
974
context -> echo_index , NULL );
@@ -1334,6 +1346,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,
1334
1346
struct net_device_stats * stats ;
1335
1347
u8 channel = cmd -> u .rx_can_header .channel ;
1336
1348
const u8 * rx_data = NULL ; /* GCC */
1349
+ ktime_t hwtstamp = 0 ;
1337
1350
1338
1351
if (channel >= dev -> nchannels ) {
1339
1352
dev_err (& dev -> intf -> dev ,
@@ -1364,6 +1377,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,
1364
1377
switch (dev -> driver_info -> family ) {
1365
1378
case KVASER_LEAF :
1366
1379
rx_data = cmd -> u .leaf .rx_can .data ;
1380
+ hwtstamp = kvaser_usb_timestamp48_to_ktime (dev -> cfg , cmd -> u .leaf .rx_can .time );
1367
1381
break ;
1368
1382
case KVASER_USBCAN :
1369
1383
rx_data = cmd -> u .usbcan .rx_can .data ;
@@ -1410,6 +1424,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,
1410
1424
memcpy (cf -> data , & rx_data [6 ], cf -> len );
1411
1425
}
1412
1426
1427
+ skb_hwtstamps (skb )-> hwtstamp = hwtstamp ;
1413
1428
stats -> rx_packets ++ ;
1414
1429
if (!(cf -> can_id & CAN_RTR_FLAG ))
1415
1430
stats -> rx_bytes += cf -> len ;
0 commit comments