can: kvaser_usb: Add len8_dlc support
PATCH v2 1/1 can: kvaser_usb: Add len8_dlc support
From: Carsten Schmidt <[email protected]>
Add support for the Classical CAN raw DLC functionality to send and receive DLC values from 9 .. 15.
---
This patch was originally posted as
[PATCH] can: kvaser_usb_leaf: Implement CAN 2.0 raw DLC functionality by Carsten Schmidt <[email protected]>
https://lore.kernel.org/linux-can/[email protected]/T/#md546eb98c84099a46204a21b64aa547adc62dd34
Changes in v2:
- Update subject and add commit message
- Add len8_dlc support for Kvaser Hydra devices
- Move assignment of can.ctrlmode_supported = CAN_CTRLMODE_CC_LEN8_DLC from kvaser_usb_leaf.c to kvaser_usb_core.c
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 2 +- drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 13 +++++++++---- drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 6 +++--- 3 files changed, 13 insertions(+), 8 deletions(-)
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +1 -1
@@ -816,7 +816,7 @@ static int kvaser_usb_init_one(struct kvaser_usb *dev, int channel)init_completion (&priv->stop_comp);init_completion (&priv->flush_comp);init_completion (&priv->get_busparams_comp); - priv->can.ctrlmode_supported =0 ; + priv->can.ctrlmode_supported =CAN_CTRLMODE_CC_LEN8_DLC ; priv->dev = dev; priv->netdev = netdev;
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +9 -4
@@ -1263,7 +1263,7 @@ static void kvaser_usb_hydra_rx_msg_std(const struct kvaser_usb *dev,if (flags &KVASER_USB_HYDRA_CF_FLAG_OVERRUN )kvaser_usb_can_rx_over_error (priv->netdev); - cf->len =can_cc_dlc2len (cmd->rx_can.dlc); +can_frame_set_cc_len ((struct can_frame *)cf, cmd->rx_can.dlc, priv->can.ctrlmode);if (flags &KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME ) { cf->can_id |=CAN_RTR_FLAG ;
@@ -1342,7 +1342,7 @@ static void kvaser_usb_hydra_rx_msg_ext(const struct kvaser_usb *dev,if (flags &KVASER_USB_HYDRA_CF_FLAG_ESI ) cf->flags |=CANFD_ESI ; }else { - cf->len =can_cc_dlc2len (dlc); +can_frame_set_cc_len ((struct can_frame *)cf, dlc, priv->can.ctrlmode); }if (flags &KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME ) {
@@ -1442,7 +1442,7 @@ kvaser_usb_hydra_frame_to_cmd_ext(const struct kvaser_usb_net_priv *priv,struct kvaser_usb *dev = priv->dev;struct kvaser_cmd_ext *cmd;struct canfd_frame *cf = (struct canfd_frame *)skb->data; -u8 dlc =can_fd_len2dlc (cf->len); +u8 dlc;u8 nbr_of_bytes = cf->len;u32 flags;u32 id;
@@ -1467,6 +1467,11 @@ kvaser_usb_hydra_frame_to_cmd_ext(const struct kvaser_usb_net_priv *priv, cmd->len =cpu_to_le16 (*cmd_len); +if (can_is_canfd_skb (skb)) + dlc =can_fd_len2dlc (cf->len); +else + dlc =can_get_cc_dlc ((struct can_frame *)cf, priv->can.ctrlmode); + cmd->tx_can.databytes = nbr_of_bytes; cmd->tx_can.dlc = dlc;
@@ -1542,7 +1547,7 @@ kvaser_usb_hydra_frame_to_cmd_std(const struct kvaser_usb_net_priv *priv, id = cf->can_id &CAN_SFF_MASK ; } - cmd->tx_can.dlc = cf->len; + cmd->tx_can.dlc =can_get_cc_dlc (cf, priv->can.ctrlmode); flags = (cf->can_id &CAN_EFF_FLAG ?KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID :0 );
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +3 -3
@@ -573,7 +573,7 @@ kvaser_usb_leaf_frame_to_cmd(const struct kvaser_usb_net_priv *priv, cmd->u.tx_can.data[1 ] = cf->can_id &0x3f ; } - cmd->u.tx_can.data[5 ] = cf->len; + cmd->u.tx_can.data[5 ] =can_get_cc_dlc (cf, priv->can.ctrlmode);memcpy (&cmd->u.tx_can.data[6 ], cf->data, cf->len);if (cf->can_id &CAN_RTR_FLAG )
@@ -1349,7 +1349,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,else cf->can_id &=CAN_SFF_MASK ; - cf->len =can_cc_dlc2len (cmd->u.leaf.log_message.dlc); +can_frame_set_cc_len (cf, cmd->u.leaf.log_message.dlc &0xF , priv->can.ctrlmode);if (cmd->u.leaf.log_message.flags &MSG_FLAG_REMOTE_FRAME ) cf->can_id |=CAN_RTR_FLAG ;
@@ -1367,7 +1367,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev, cf->can_id |=CAN_EFF_FLAG ; } - cf->len =can_cc_dlc2len (rx_data[5 ]); +can_frame_set_cc_len (cf, rx_data[5 ] &0xF , priv->can.ctrlmode);if (cmd->u.rx_can_header.flag &MSG_FLAG_REMOTE_FRAME ) cf->can_id |=CAN_RTR_FLAG ;
Signature · 1 line
2.40.0
Quoted 8 lines · Jimmy Assarsson
From: Carsten Schmidt <[email protected]>
Add support for the Classical CAN raw DLC functionality to send and receive DLC values from 9 .. 15.
Signed-off-by Carsten Schmidt <[email protected]>Tested-by Jimmy Assarsson <[email protected]>Signed-off-by Jimmy Assarsson <[email protected]>
Applied to linux-can-next.
Thanks,
Marc
Signature · 4 lines
Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung Nürnberg | Phone: +49-5121-206917-129 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |