Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

can: kvaser_usb: Add len8_dlc support

Add support for the Classical CAN raw DLC functionality to send and
receive DLC values from 9 .. 15.

v1: https://lore.kernel.org/all/20230506105529.4023-1-carsten.schmidt-achim@t-online.de

Signed-off-by: Carsten Schmidt <carsten.schmidt-achim@t-online.de>
Tested-by: Jimmy Assarsson <extja@kvaser.com>
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Link: https://lore.kernel.org/r/20230516125332.82894-1-extja@kvaser.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>

authored by

Carsten Schmidt and committed by
Marc Kleine-Budde
843b8464 d49b9b07

+13 -8
+1 -1
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
··· 816 816 init_completion(&priv->stop_comp); 817 817 init_completion(&priv->flush_comp); 818 818 init_completion(&priv->get_busparams_comp); 819 - priv->can.ctrlmode_supported = 0; 819 + priv->can.ctrlmode_supported = CAN_CTRLMODE_CC_LEN8_DLC; 820 820 821 821 priv->dev = dev; 822 822 priv->netdev = netdev;
+9 -4
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
··· 1263 1263 if (flags & KVASER_USB_HYDRA_CF_FLAG_OVERRUN) 1264 1264 kvaser_usb_can_rx_over_error(priv->netdev); 1265 1265 1266 - cf->len = can_cc_dlc2len(cmd->rx_can.dlc); 1266 + can_frame_set_cc_len((struct can_frame *)cf, cmd->rx_can.dlc, priv->can.ctrlmode); 1267 1267 1268 1268 if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME) { 1269 1269 cf->can_id |= CAN_RTR_FLAG; ··· 1342 1342 if (flags & KVASER_USB_HYDRA_CF_FLAG_ESI) 1343 1343 cf->flags |= CANFD_ESI; 1344 1344 } else { 1345 - cf->len = can_cc_dlc2len(dlc); 1345 + can_frame_set_cc_len((struct can_frame *)cf, dlc, priv->can.ctrlmode); 1346 1346 } 1347 1347 1348 1348 if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME) { ··· 1442 1442 struct kvaser_usb *dev = priv->dev; 1443 1443 struct kvaser_cmd_ext *cmd; 1444 1444 struct canfd_frame *cf = (struct canfd_frame *)skb->data; 1445 - u8 dlc = can_fd_len2dlc(cf->len); 1445 + u8 dlc; 1446 1446 u8 nbr_of_bytes = cf->len; 1447 1447 u32 flags; 1448 1448 u32 id; ··· 1466 1466 8); 1467 1467 1468 1468 cmd->len = cpu_to_le16(*cmd_len); 1469 + 1470 + if (can_is_canfd_skb(skb)) 1471 + dlc = can_fd_len2dlc(cf->len); 1472 + else 1473 + dlc = can_get_cc_dlc((struct can_frame *)cf, priv->can.ctrlmode); 1469 1474 1470 1475 cmd->tx_can.databytes = nbr_of_bytes; 1471 1476 cmd->tx_can.dlc = dlc; ··· 1547 1542 id = cf->can_id & CAN_SFF_MASK; 1548 1543 } 1549 1544 1550 - cmd->tx_can.dlc = cf->len; 1545 + cmd->tx_can.dlc = can_get_cc_dlc(cf, priv->can.ctrlmode); 1551 1546 1552 1547 flags = (cf->can_id & CAN_EFF_FLAG ? 1553 1548 KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID : 0);
+3 -3
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
··· 573 573 cmd->u.tx_can.data[1] = cf->can_id & 0x3f; 574 574 } 575 575 576 - cmd->u.tx_can.data[5] = cf->len; 576 + cmd->u.tx_can.data[5] = can_get_cc_dlc(cf, priv->can.ctrlmode); 577 577 memcpy(&cmd->u.tx_can.data[6], cf->data, cf->len); 578 578 579 579 if (cf->can_id & CAN_RTR_FLAG) ··· 1349 1349 else 1350 1350 cf->can_id &= CAN_SFF_MASK; 1351 1351 1352 - cf->len = can_cc_dlc2len(cmd->u.leaf.log_message.dlc); 1352 + can_frame_set_cc_len(cf, cmd->u.leaf.log_message.dlc & 0xF, priv->can.ctrlmode); 1353 1353 1354 1354 if (cmd->u.leaf.log_message.flags & MSG_FLAG_REMOTE_FRAME) 1355 1355 cf->can_id |= CAN_RTR_FLAG; ··· 1367 1367 cf->can_id |= CAN_EFF_FLAG; 1368 1368 } 1369 1369 1370 - cf->len = can_cc_dlc2len(rx_data[5]); 1370 + can_frame_set_cc_len(cf, rx_data[5] & 0xF, priv->can.ctrlmode); 1371 1371 1372 1372 if (cmd->u.rx_can_header.flag & MSG_FLAG_REMOTE_FRAME) 1373 1373 cf->can_id |= CAN_RTR_FLAG;